mirror of
https://github.com/EvolutionAPI/evolution-client-python.git
synced 2025-07-13 15:14:48 -06:00
initial commit
This commit is contained in:
commit
8654a31a4d
158
README.md
Normal file
158
README.md
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
# Evolution Client Python
|
||||||
|
|
||||||
|
Client Python para interagir com a API Evolution.
|
||||||
|
|
||||||
|
## Instalação
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install evolution-client
|
||||||
|
```
|
||||||
|
|
||||||
|
## Uso Básico
|
||||||
|
|
||||||
|
### Inicializando o Cliente
|
||||||
|
|
||||||
|
```python
|
||||||
|
from evolution.client import EvolutionClient
|
||||||
|
|
||||||
|
client = EvolutionClient(
|
||||||
|
base_url='http://seu-servidor:porta',
|
||||||
|
api_token='seu-token-api'
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Gerenciamento de Instâncias
|
||||||
|
|
||||||
|
#### Listar Instâncias
|
||||||
|
```python
|
||||||
|
instances = client.instances.fetch_instances()
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Criar Nova Instância
|
||||||
|
```python
|
||||||
|
from evolution.models.instance import InstanceConfig
|
||||||
|
|
||||||
|
config = InstanceConfig(
|
||||||
|
instanceName="minha-instancia",
|
||||||
|
integration="WHATSAPP-BAILEYS",
|
||||||
|
qrcode=True
|
||||||
|
)
|
||||||
|
|
||||||
|
nova_instancia = client.instances.create_instance(config)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Operações com Instâncias
|
||||||
|
|
||||||
|
#### Conectar Instância
|
||||||
|
```python
|
||||||
|
estado = client.instance_operations.connect(instance_id, instance_token)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Verificar Estado da Conexão
|
||||||
|
```python
|
||||||
|
estado = client.instance_operations.get_connection_state(instance_id, instance_token)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Definir Presença
|
||||||
|
```python
|
||||||
|
from evolution.models.presence import PresenceStatus
|
||||||
|
|
||||||
|
client.instance_operations.set_presence(
|
||||||
|
instance_id,
|
||||||
|
PresenceStatus.AVAILABLE,
|
||||||
|
instance_token
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Enviando Mensagens
|
||||||
|
|
||||||
|
#### Mensagem de Texto
|
||||||
|
```python
|
||||||
|
from evolution.models.message import TextMessage
|
||||||
|
|
||||||
|
mensagem = TextMessage(
|
||||||
|
number="5511999999999",
|
||||||
|
text="Olá, como vai?",
|
||||||
|
delay=1000 # delay opcional em ms
|
||||||
|
)
|
||||||
|
|
||||||
|
response = client.messages.send_text(instance_id, mensagem, instance_token)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Mensagem de Mídia
|
||||||
|
```python
|
||||||
|
from evolution.models.message import MediaMessage, MediaType
|
||||||
|
|
||||||
|
mensagem = MediaMessage(
|
||||||
|
number="5511999999999",
|
||||||
|
mediatype=MediaType.IMAGE.value,
|
||||||
|
mimetype="image/jpeg",
|
||||||
|
caption="Minha imagem",
|
||||||
|
media="base64_da_imagem_ou_url",
|
||||||
|
fileName="imagem.jpg"
|
||||||
|
)
|
||||||
|
|
||||||
|
response = client.messages.send_media(instance_id, mensagem, instance_token)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Mensagem com Botões
|
||||||
|
```python
|
||||||
|
from evolution.models.message import ButtonMessage, Button
|
||||||
|
|
||||||
|
botoes = [
|
||||||
|
Button(
|
||||||
|
type="reply",
|
||||||
|
displayText="Opção 1",
|
||||||
|
id="1"
|
||||||
|
),
|
||||||
|
Button(
|
||||||
|
type="reply",
|
||||||
|
displayText="Opção 2",
|
||||||
|
id="2"
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
mensagem = ButtonMessage(
|
||||||
|
number="5511999999999",
|
||||||
|
title="Título",
|
||||||
|
description="Descrição",
|
||||||
|
footer="Rodapé",
|
||||||
|
buttons=botoes
|
||||||
|
)
|
||||||
|
|
||||||
|
response = client.messages.send_buttons(instance_id, mensagem, instance_token)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Mensagem com Lista
|
||||||
|
```python
|
||||||
|
from evolution.models.message import ListMessage, ListSection, ListRow
|
||||||
|
|
||||||
|
rows = [
|
||||||
|
ListRow(
|
||||||
|
title="Item 1",
|
||||||
|
description="Descrição do item 1",
|
||||||
|
rowId="1"
|
||||||
|
),
|
||||||
|
ListRow(
|
||||||
|
title="Item 2",
|
||||||
|
description="Descrição do item 2",
|
||||||
|
rowId="2"
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
section = ListSection(
|
||||||
|
title="Seção 1",
|
||||||
|
rows=rows
|
||||||
|
)
|
||||||
|
|
||||||
|
mensagem = ListMessage(
|
||||||
|
number="5511999999999",
|
||||||
|
title="Título da Lista",
|
||||||
|
description="Descrição da lista",
|
||||||
|
buttonText="Clique aqui",
|
||||||
|
footerText="Rodapé",
|
||||||
|
sections=[section]
|
||||||
|
)
|
||||||
|
|
||||||
|
response = client.messages.send_list(instance_id, mensagem, instance_token)
|
||||||
|
```
|
0
build/lib/evolution/__init__.py
Normal file
0
build/lib/evolution/__init__.py
Normal file
81
build/lib/evolution/client.py
Normal file
81
build/lib/evolution/client.py
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
import requests
|
||||||
|
from .exceptions import EvolutionAuthenticationError, EvolutionNotFoundError, EvolutionAPIError
|
||||||
|
from .services.instance import InstanceService
|
||||||
|
from .services.instance_operations import InstanceOperationsService
|
||||||
|
from .services.message import MessageService
|
||||||
|
from .services.call import CallService
|
||||||
|
from .services.chat import ChatService
|
||||||
|
from .services.label import LabelService
|
||||||
|
from .services.profile import ProfileService
|
||||||
|
from .services.group import GroupService
|
||||||
|
class EvolutionClient:
|
||||||
|
"""
|
||||||
|
Cliente para interagir com a API Evolution.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
base_url (str): A URL base do servidor da API Evolution.
|
||||||
|
api_token (str): O token de autenticação para acessar a API.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, base_url: str, api_token: str):
|
||||||
|
self.base_url = base_url.rstrip('/')
|
||||||
|
self.api_token = api_token
|
||||||
|
self.instances = InstanceService(self)
|
||||||
|
self.instance_operations = InstanceOperationsService(self)
|
||||||
|
self.messages = MessageService(self)
|
||||||
|
self.calls = CallService(self)
|
||||||
|
self.chat = ChatService(self)
|
||||||
|
self.label = LabelService(self)
|
||||||
|
self.profile = ProfileService(self)
|
||||||
|
self.group = GroupService(self)
|
||||||
|
|
||||||
|
def _get_headers(self, instance_token: str = None):
|
||||||
|
return {
|
||||||
|
'apikey': instance_token or self.api_token,
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
|
||||||
|
def _get_full_url(self, endpoint):
|
||||||
|
return f'{self.base_url}/{endpoint}'
|
||||||
|
|
||||||
|
def _handle_response(self, response):
|
||||||
|
if response.status_code == 401:
|
||||||
|
raise EvolutionAuthenticationError('Falha na autenticação.')
|
||||||
|
elif response.status_code == 404:
|
||||||
|
raise EvolutionNotFoundError('Recurso não encontrado.')
|
||||||
|
elif response.ok:
|
||||||
|
try:
|
||||||
|
return response.json()
|
||||||
|
except ValueError:
|
||||||
|
return response.content
|
||||||
|
else:
|
||||||
|
error_detail = ''
|
||||||
|
try:
|
||||||
|
error_detail = f' - {response.json()}'
|
||||||
|
except:
|
||||||
|
error_detail = f' - {response.text}'
|
||||||
|
raise EvolutionAPIError(f'Erro na requisição: {response.status_code}{error_detail}')
|
||||||
|
|
||||||
|
def get(self, endpoint: str, instance_token: str = None):
|
||||||
|
"""Faz uma requisição GET."""
|
||||||
|
url = self._get_full_url(endpoint)
|
||||||
|
response = requests.get(url, headers=self._get_headers(instance_token))
|
||||||
|
return self._handle_response(response)
|
||||||
|
|
||||||
|
def post(self, endpoint: str, data: dict = None, instance_token: str = None):
|
||||||
|
"""Faz uma requisição POST."""
|
||||||
|
url = self._get_full_url(endpoint)
|
||||||
|
response = requests.post(url, headers=self._get_headers(instance_token), json=data)
|
||||||
|
return self._handle_response(response)
|
||||||
|
|
||||||
|
def put(self, endpoint, data=None):
|
||||||
|
"""Faz uma requisição PUT."""
|
||||||
|
url = self._get_full_url(endpoint)
|
||||||
|
response = requests.put(url, headers=self.headers, json=data)
|
||||||
|
return self._handle_response(response)
|
||||||
|
|
||||||
|
def delete(self, endpoint: str, instance_token: str = None):
|
||||||
|
"""Faz uma requisição DELETE."""
|
||||||
|
url = self._get_full_url(endpoint)
|
||||||
|
response = requests.delete(url, headers=self._get_headers(instance_token))
|
||||||
|
return self._handle_response(response)
|
11
build/lib/evolution/exceptions.py
Normal file
11
build/lib/evolution/exceptions.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
class EvolutionAPIError(Exception):
|
||||||
|
"""Erro genérico da API Evolution."""
|
||||||
|
pass
|
||||||
|
|
||||||
|
class EvolutionAuthenticationError(EvolutionAPIError):
|
||||||
|
"""Erro de autenticação com a API Evolution."""
|
||||||
|
pass
|
||||||
|
|
||||||
|
class EvolutionNotFoundError(EvolutionAPIError):
|
||||||
|
"""Recurso não encontrado na API Evolution."""
|
||||||
|
pass
|
BIN
dist/evolution-client-0.0.1.tar.gz
vendored
Normal file
BIN
dist/evolution-client-0.0.1.tar.gz
vendored
Normal file
Binary file not shown.
BIN
dist/evolution_client-0.0.1-py3-none-any.whl
vendored
Normal file
BIN
dist/evolution_client-0.0.1-py3-none-any.whl
vendored
Normal file
Binary file not shown.
247
env/bin/Activate.ps1
vendored
Normal file
247
env/bin/Activate.ps1
vendored
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
<#
|
||||||
|
.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"
|
69
env/bin/activate
vendored
Normal file
69
env/bin/activate
vendored
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
# 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
|
||||||
|
|
||||||
|
# This should detect bash and zsh, which have a hash command that must
|
||||||
|
# be called to get it to forget past commands. Without forgetting
|
||||||
|
# past commands the $PATH changes we made may not be respected
|
||||||
|
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
|
||||||
|
hash -r 2> /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
VIRTUAL_ENV="/home/davidson/Projects/evolution_client/python/env"
|
||||||
|
export VIRTUAL_ENV
|
||||||
|
|
||||||
|
_OLD_VIRTUAL_PATH="$PATH"
|
||||||
|
PATH="$VIRTUAL_ENV/bin:$PATH"
|
||||||
|
export PATH
|
||||||
|
|
||||||
|
# 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="(env) ${PS1:-}"
|
||||||
|
export PS1
|
||||||
|
VIRTUAL_ENV_PROMPT="(env) "
|
||||||
|
export VIRTUAL_ENV_PROMPT
|
||||||
|
fi
|
||||||
|
|
||||||
|
# This should detect bash and zsh, which have a hash command that must
|
||||||
|
# be called to get it to forget past commands. Without forgetting
|
||||||
|
# past commands the $PATH changes we made may not be respected
|
||||||
|
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
|
||||||
|
hash -r 2> /dev/null
|
||||||
|
fi
|
26
env/bin/activate.csh
vendored
Normal file
26
env/bin/activate.csh
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# This file must be used with "source bin/activate.csh" *from csh*.
|
||||||
|
# You cannot run it directly.
|
||||||
|
# Created by Davide Di Blasi <davidedb@gmail.com>.
|
||||||
|
# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com>
|
||||||
|
|
||||||
|
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/davidson/Projects/evolution_client/python/env"
|
||||||
|
|
||||||
|
set _OLD_VIRTUAL_PATH="$PATH"
|
||||||
|
setenv PATH "$VIRTUAL_ENV/bin:$PATH"
|
||||||
|
|
||||||
|
|
||||||
|
set _OLD_VIRTUAL_PROMPT="$prompt"
|
||||||
|
|
||||||
|
if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
|
||||||
|
set prompt = "(env) $prompt"
|
||||||
|
setenv VIRTUAL_ENV_PROMPT "(env) "
|
||||||
|
endif
|
||||||
|
|
||||||
|
alias pydoc python -m pydoc
|
||||||
|
|
||||||
|
rehash
|
69
env/bin/activate.fish
vendored
Normal file
69
env/bin/activate.fish
vendored
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
# This file must be used with "source <venv>/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/davidson/Projects/evolution_client/python/env"
|
||||||
|
|
||||||
|
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) "(env) " (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 "(env) "
|
||||||
|
end
|
8
env/bin/docutils
vendored
Executable file
8
env/bin/docutils
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from docutils.__main__ import main
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(main())
|
8
env/bin/keyring
vendored
Executable file
8
env/bin/keyring
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from keyring.cli import main
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(main())
|
8
env/bin/markdown-it
vendored
Executable file
8
env/bin/markdown-it
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from markdown_it.cli.parse import main
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(main())
|
8
env/bin/normalizer
vendored
Executable file
8
env/bin/normalizer
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- 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())
|
8
env/bin/pip
vendored
Executable file
8
env/bin/pip
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- 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())
|
8
env/bin/pip3
vendored
Executable file
8
env/bin/pip3
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- 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())
|
8
env/bin/pip3.10
vendored
Executable file
8
env/bin/pip3.10
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- 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())
|
8
env/bin/pkginfo
vendored
Executable file
8
env/bin/pkginfo
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from pkginfo.commandline import main
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(main())
|
8
env/bin/pygmentize
vendored
Executable file
8
env/bin/pygmentize
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from pygments.cmdline import main
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(main())
|
1
env/bin/python
vendored
Symbolic link
1
env/bin/python
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
/usr/bin/python
|
1
env/bin/python3
vendored
Symbolic link
1
env/bin/python3
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
python
|
1
env/bin/python3.10
vendored
Symbolic link
1
env/bin/python3.10
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
python
|
8
env/bin/rst2html
vendored
Executable file
8
env/bin/rst2html
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from docutils.core import rst2html
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(rst2html())
|
8
env/bin/rst2html4
vendored
Executable file
8
env/bin/rst2html4
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from docutils.core import rst2html4
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(rst2html4())
|
8
env/bin/rst2html5
vendored
Executable file
8
env/bin/rst2html5
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from docutils.core import rst2html5
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(rst2html5())
|
8
env/bin/rst2latex
vendored
Executable file
8
env/bin/rst2latex
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from docutils.core import rst2latex
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(rst2latex())
|
8
env/bin/rst2man
vendored
Executable file
8
env/bin/rst2man
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from docutils.core import rst2man
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(rst2man())
|
8
env/bin/rst2odt
vendored
Executable file
8
env/bin/rst2odt
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from docutils.core import rst2odt
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(rst2odt())
|
8
env/bin/rst2pseudoxml
vendored
Executable file
8
env/bin/rst2pseudoxml
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from docutils.core import rst2pseudoxml
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(rst2pseudoxml())
|
8
env/bin/rst2s5
vendored
Executable file
8
env/bin/rst2s5
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from docutils.core import rst2s5
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(rst2s5())
|
8
env/bin/rst2xetex
vendored
Executable file
8
env/bin/rst2xetex
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from docutils.core import rst2xetex
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(rst2xetex())
|
8
env/bin/rst2xml
vendored
Executable file
8
env/bin/rst2xml
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from docutils.core import rst2xml
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(rst2xml())
|
8
env/bin/twine
vendored
Executable file
8
env/bin/twine
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from twine.__main__ import main
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(main())
|
8
env/bin/wheel
vendored
Executable file
8
env/bin/wheel
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/home/davidson/Projects/evolution_client/python/env/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from wheel.cli import main
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||||
|
sys.exit(main())
|
1
env/lib/python3.10/site-packages/SecretStorage-3.3.3.dist-info/INSTALLER
vendored
Normal file
1
env/lib/python3.10/site-packages/SecretStorage-3.3.3.dist-info/INSTALLER
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
pip
|
25
env/lib/python3.10/site-packages/SecretStorage-3.3.3.dist-info/LICENSE
vendored
Normal file
25
env/lib/python3.10/site-packages/SecretStorage-3.3.3.dist-info/LICENSE
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
Copyright 2012-2018 Dmitry Shachnev <mitya57@gmail.com>
|
||||||
|
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 University 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 REGENTS 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.
|
114
env/lib/python3.10/site-packages/SecretStorage-3.3.3.dist-info/METADATA
vendored
Normal file
114
env/lib/python3.10/site-packages/SecretStorage-3.3.3.dist-info/METADATA
vendored
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
Metadata-Version: 2.1
|
||||||
|
Name: SecretStorage
|
||||||
|
Version: 3.3.3
|
||||||
|
Summary: Python bindings to FreeDesktop.org Secret Service API
|
||||||
|
Home-page: https://github.com/mitya57/secretstorage
|
||||||
|
Author: Dmitry Shachnev
|
||||||
|
Author-email: mitya57@gmail.com
|
||||||
|
License: BSD 3-Clause License
|
||||||
|
Platform: Linux
|
||||||
|
Classifier: Development Status :: 5 - Production/Stable
|
||||||
|
Classifier: License :: OSI Approved :: BSD License
|
||||||
|
Classifier: Operating System :: POSIX
|
||||||
|
Classifier: Programming Language :: Python
|
||||||
|
Classifier: Programming Language :: Python :: 3 :: Only
|
||||||
|
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: Topic :: Security
|
||||||
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
||||||
|
Requires-Python: >=3.6
|
||||||
|
Description-Content-Type: text/x-rst
|
||||||
|
License-File: LICENSE
|
||||||
|
Requires-Dist: cryptography (>=2.0)
|
||||||
|
Requires-Dist: jeepney (>=0.6)
|
||||||
|
|
||||||
|
.. image:: https://github.com/mitya57/secretstorage/workflows/tests/badge.svg
|
||||||
|
:target: https://github.com/mitya57/secretstorage/actions
|
||||||
|
:alt: GitHub Actions status
|
||||||
|
.. image:: https://codecov.io/gh/mitya57/secretstorage/branch/master/graph/badge.svg
|
||||||
|
:target: https://codecov.io/gh/mitya57/secretstorage
|
||||||
|
:alt: Coverage status
|
||||||
|
.. image:: https://readthedocs.org/projects/secretstorage/badge/?version=latest
|
||||||
|
:target: https://secretstorage.readthedocs.io/en/latest/
|
||||||
|
:alt: ReadTheDocs status
|
||||||
|
|
||||||
|
Module description
|
||||||
|
==================
|
||||||
|
|
||||||
|
This module provides a way for securely storing passwords and other secrets.
|
||||||
|
|
||||||
|
It uses D-Bus `Secret Service`_ API that is supported by GNOME Keyring,
|
||||||
|
KWallet (since version 5.97) and KeePassXC.
|
||||||
|
|
||||||
|
The main classes provided are ``secretstorage.Item``, representing a secret
|
||||||
|
item (that has a *label*, a *secret* and some *attributes*) and
|
||||||
|
``secretstorage.Collection``, a place items are stored in.
|
||||||
|
|
||||||
|
SecretStorage supports most of the functions provided by Secret Service,
|
||||||
|
including creating and deleting items and collections, editing items,
|
||||||
|
locking and unlocking collections (asynchronous unlocking is also supported).
|
||||||
|
|
||||||
|
The documentation can be found on `secretstorage.readthedocs.io`_.
|
||||||
|
|
||||||
|
.. _`Secret Service`: https://specifications.freedesktop.org/secret-service/
|
||||||
|
.. _`secretstorage.readthedocs.io`: https://secretstorage.readthedocs.io/en/latest/
|
||||||
|
|
||||||
|
Building the module
|
||||||
|
===================
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
SecretStorage 3.x supports Python 3.6 and newer versions.
|
||||||
|
If you have an older version of Python, install SecretStorage 2.x::
|
||||||
|
|
||||||
|
pip install "SecretStorage < 3"
|
||||||
|
|
||||||
|
SecretStorage requires these packages to work:
|
||||||
|
|
||||||
|
* Jeepney_
|
||||||
|
* `python-cryptography`_
|
||||||
|
|
||||||
|
To build SecretStorage, use this command::
|
||||||
|
|
||||||
|
python3 setup.py build
|
||||||
|
|
||||||
|
If you have Sphinx_ installed, you can also build the documentation::
|
||||||
|
|
||||||
|
python3 setup.py build_sphinx
|
||||||
|
|
||||||
|
.. _Jeepney: https://pypi.org/project/jeepney/
|
||||||
|
.. _`python-cryptography`: https://pypi.org/project/cryptography/
|
||||||
|
.. _Sphinx: http://sphinx-doc.org/
|
||||||
|
|
||||||
|
Testing the module
|
||||||
|
==================
|
||||||
|
|
||||||
|
First, make sure that you have the Secret Service daemon installed.
|
||||||
|
The `GNOME Keyring`_ is the reference server-side implementation for the
|
||||||
|
Secret Service specification.
|
||||||
|
|
||||||
|
.. _`GNOME Keyring`: https://download.gnome.org/sources/gnome-keyring/
|
||||||
|
|
||||||
|
Then, start the daemon and unlock the ``default`` collection, if needed.
|
||||||
|
The testsuite will fail to run if the ``default`` collection exists and is
|
||||||
|
locked. If it does not exist, the testsuite can also use the temporary
|
||||||
|
``session`` collection, as provided by the GNOME Keyring.
|
||||||
|
|
||||||
|
Then, run the Python unittest module::
|
||||||
|
|
||||||
|
python3 -m unittest discover -s tests
|
||||||
|
|
||||||
|
If you want to run the tests in an isolated or headless environment, run
|
||||||
|
this command in a D-Bus session::
|
||||||
|
|
||||||
|
dbus-run-session -- python3 -m unittest discover -s tests
|
||||||
|
|
||||||
|
Get the code
|
||||||
|
============
|
||||||
|
|
||||||
|
SecretStorage is available under BSD license. The source code can be found
|
||||||
|
on GitHub_.
|
||||||
|
|
||||||
|
.. _GitHub: https://github.com/mitya57/secretstorage
|
21
env/lib/python3.10/site-packages/SecretStorage-3.3.3.dist-info/RECORD
vendored
Normal file
21
env/lib/python3.10/site-packages/SecretStorage-3.3.3.dist-info/RECORD
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
SecretStorage-3.3.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||||
|
SecretStorage-3.3.3.dist-info/LICENSE,sha256=cPa_yndjPDXvohgyjtpUhtcFTCkU1hggmA43h5dSCiU,1504
|
||||||
|
SecretStorage-3.3.3.dist-info/METADATA,sha256=ZScD5voEgjme04wlw9OZigESMxLa2xG_eaIeZ_IMqJI,4027
|
||||||
|
SecretStorage-3.3.3.dist-info/RECORD,,
|
||||||
|
SecretStorage-3.3.3.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
||||||
|
SecretStorage-3.3.3.dist-info/top_level.txt,sha256=hveSi1OWGaEt3kEVbjmZ0M-ASPxi6y-nTPVa-d3c0B4,14
|
||||||
|
secretstorage/__init__.py,sha256=W1p-HB1Qh12Dv6K8ml0Wj_MzN09_dEeezJjQZAHf-O4,3364
|
||||||
|
secretstorage/__pycache__/__init__.cpython-310.pyc,,
|
||||||
|
secretstorage/__pycache__/collection.cpython-310.pyc,,
|
||||||
|
secretstorage/__pycache__/defines.cpython-310.pyc,,
|
||||||
|
secretstorage/__pycache__/dhcrypto.cpython-310.pyc,,
|
||||||
|
secretstorage/__pycache__/exceptions.cpython-310.pyc,,
|
||||||
|
secretstorage/__pycache__/item.cpython-310.pyc,,
|
||||||
|
secretstorage/__pycache__/util.cpython-310.pyc,,
|
||||||
|
secretstorage/collection.py,sha256=lHwSOkFO5sRspgcUBoBI8ZG2au2bcUSO6X64ksVdnsQ,9436
|
||||||
|
secretstorage/defines.py,sha256=DzUrEWzSvBlN8kK2nVXnLGlCZv7HWNyfN1AYqRmjKGE,807
|
||||||
|
secretstorage/dhcrypto.py,sha256=BiuDoNvNmd8i7Ul4ENouRnbqFE3SUmTUSAn6RVvn7Tg,2578
|
||||||
|
secretstorage/exceptions.py,sha256=1uUZXTua4jRZf4PKDIT2SVWcSKP2lP97s8r3eJZudio,1655
|
||||||
|
secretstorage/item.py,sha256=3niFSjOzwrB2hV1jrg78RXgBsTrpw44852VpZHXUpeE,5813
|
||||||
|
secretstorage/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||||
|
secretstorage/util.py,sha256=vHu01QaooMQ5sRdRDFX9pg7rrzfJWF9vg0plm3Zg0Po,6755
|
5
env/lib/python3.10/site-packages/SecretStorage-3.3.3.dist-info/WHEEL
vendored
Normal file
5
env/lib/python3.10/site-packages/SecretStorage-3.3.3.dist-info/WHEEL
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Wheel-Version: 1.0
|
||||||
|
Generator: bdist_wheel (0.37.1)
|
||||||
|
Root-Is-Purelib: true
|
||||||
|
Tag: py3-none-any
|
||||||
|
|
1
env/lib/python3.10/site-packages/SecretStorage-3.3.3.dist-info/top_level.txt
vendored
Normal file
1
env/lib/python3.10/site-packages/SecretStorage-3.3.3.dist-info/top_level.txt
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
secretstorage
|
BIN
env/lib/python3.10/site-packages/__pycache__/typing_extensions.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/__pycache__/typing_extensions.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/_cffi_backend.cpython-310-x86_64-linux-gnu.so
vendored
Executable file
BIN
env/lib/python3.10/site-packages/_cffi_backend.cpython-310-x86_64-linux-gnu.so
vendored
Executable file
Binary file not shown.
132
env/lib/python3.10/site-packages/_distutils_hack/__init__.py
vendored
Normal file
132
env/lib/python3.10/site-packages/_distutils_hack/__init__.py
vendored
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import importlib
|
||||||
|
import warnings
|
||||||
|
|
||||||
|
|
||||||
|
is_pypy = '__pypy__' in sys.builtin_module_names
|
||||||
|
|
||||||
|
|
||||||
|
warnings.filterwarnings('ignore',
|
||||||
|
r'.+ distutils\b.+ deprecated',
|
||||||
|
DeprecationWarning)
|
||||||
|
|
||||||
|
|
||||||
|
def warn_distutils_present():
|
||||||
|
if 'distutils' not in sys.modules:
|
||||||
|
return
|
||||||
|
if is_pypy and sys.version_info < (3, 7):
|
||||||
|
# PyPy for 3.6 unconditionally imports distutils, so bypass the warning
|
||||||
|
# https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250
|
||||||
|
return
|
||||||
|
warnings.warn(
|
||||||
|
"Distutils was imported before Setuptools, but importing Setuptools "
|
||||||
|
"also replaces the `distutils` module in `sys.modules`. This may lead "
|
||||||
|
"to undesirable behaviors or errors. To avoid these issues, avoid "
|
||||||
|
"using distutils directly, ensure that setuptools is installed in the "
|
||||||
|
"traditional way (e.g. not an editable install), and/or make sure "
|
||||||
|
"that setuptools is always imported before distutils.")
|
||||||
|
|
||||||
|
|
||||||
|
def clear_distutils():
|
||||||
|
if 'distutils' not in sys.modules:
|
||||||
|
return
|
||||||
|
warnings.warn("Setuptools is replacing distutils.")
|
||||||
|
mods = [name for name in sys.modules if re.match(r'distutils\b', name)]
|
||||||
|
for name in mods:
|
||||||
|
del sys.modules[name]
|
||||||
|
|
||||||
|
|
||||||
|
def enabled():
|
||||||
|
"""
|
||||||
|
Allow selection of distutils by environment variable.
|
||||||
|
"""
|
||||||
|
which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'stdlib')
|
||||||
|
return which == 'local'
|
||||||
|
|
||||||
|
|
||||||
|
def ensure_local_distutils():
|
||||||
|
clear_distutils()
|
||||||
|
|
||||||
|
# With the DistutilsMetaFinder in place,
|
||||||
|
# perform an import to cause distutils to be
|
||||||
|
# loaded from setuptools._distutils. Ref #2906.
|
||||||
|
add_shim()
|
||||||
|
importlib.import_module('distutils')
|
||||||
|
remove_shim()
|
||||||
|
|
||||||
|
# check that submodules load as expected
|
||||||
|
core = importlib.import_module('distutils.core')
|
||||||
|
assert '_distutils' in core.__file__, core.__file__
|
||||||
|
|
||||||
|
|
||||||
|
def do_override():
|
||||||
|
"""
|
||||||
|
Ensure that the local copy of distutils is preferred over stdlib.
|
||||||
|
|
||||||
|
See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401
|
||||||
|
for more motivation.
|
||||||
|
"""
|
||||||
|
if enabled():
|
||||||
|
warn_distutils_present()
|
||||||
|
ensure_local_distutils()
|
||||||
|
|
||||||
|
|
||||||
|
class DistutilsMetaFinder:
|
||||||
|
def find_spec(self, fullname, path, target=None):
|
||||||
|
if path is not None:
|
||||||
|
return
|
||||||
|
|
||||||
|
method_name = 'spec_for_{fullname}'.format(**locals())
|
||||||
|
method = getattr(self, method_name, lambda: None)
|
||||||
|
return method()
|
||||||
|
|
||||||
|
def spec_for_distutils(self):
|
||||||
|
import importlib.abc
|
||||||
|
import importlib.util
|
||||||
|
|
||||||
|
class DistutilsLoader(importlib.abc.Loader):
|
||||||
|
|
||||||
|
def create_module(self, spec):
|
||||||
|
return importlib.import_module('setuptools._distutils')
|
||||||
|
|
||||||
|
def exec_module(self, module):
|
||||||
|
pass
|
||||||
|
|
||||||
|
return importlib.util.spec_from_loader('distutils', DistutilsLoader())
|
||||||
|
|
||||||
|
def spec_for_pip(self):
|
||||||
|
"""
|
||||||
|
Ensure stdlib distutils when running under pip.
|
||||||
|
See pypa/pip#8761 for rationale.
|
||||||
|
"""
|
||||||
|
if self.pip_imported_during_build():
|
||||||
|
return
|
||||||
|
clear_distutils()
|
||||||
|
self.spec_for_distutils = lambda: None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def pip_imported_during_build():
|
||||||
|
"""
|
||||||
|
Detect if pip is being imported in a build script. Ref #2355.
|
||||||
|
"""
|
||||||
|
import traceback
|
||||||
|
return any(
|
||||||
|
frame.f_globals['__file__'].endswith('setup.py')
|
||||||
|
for frame, line in traceback.walk_stack(None)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
DISTUTILS_FINDER = DistutilsMetaFinder()
|
||||||
|
|
||||||
|
|
||||||
|
def add_shim():
|
||||||
|
sys.meta_path.insert(0, DISTUTILS_FINDER)
|
||||||
|
|
||||||
|
|
||||||
|
def remove_shim():
|
||||||
|
try:
|
||||||
|
sys.meta_path.remove(DISTUTILS_FINDER)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
BIN
env/lib/python3.10/site-packages/_distutils_hack/__pycache__/__init__.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/_distutils_hack/__pycache__/__init__.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/_distutils_hack/__pycache__/override.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/_distutils_hack/__pycache__/override.cpython-310.pyc
vendored
Normal file
Binary file not shown.
1
env/lib/python3.10/site-packages/_distutils_hack/override.py
vendored
Normal file
1
env/lib/python3.10/site-packages/_distutils_hack/override.py
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
__import__('_distutils_hack').do_override()
|
1
env/lib/python3.10/site-packages/backports.tarfile-1.2.0.dist-info/INSTALLER
vendored
Normal file
1
env/lib/python3.10/site-packages/backports.tarfile-1.2.0.dist-info/INSTALLER
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
pip
|
17
env/lib/python3.10/site-packages/backports.tarfile-1.2.0.dist-info/LICENSE
vendored
Normal file
17
env/lib/python3.10/site-packages/backports.tarfile-1.2.0.dist-info/LICENSE
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
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.
|
46
env/lib/python3.10/site-packages/backports.tarfile-1.2.0.dist-info/METADATA
vendored
Normal file
46
env/lib/python3.10/site-packages/backports.tarfile-1.2.0.dist-info/METADATA
vendored
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
Metadata-Version: 2.1
|
||||||
|
Name: backports.tarfile
|
||||||
|
Version: 1.2.0
|
||||||
|
Summary: Backport of CPython tarfile module
|
||||||
|
Author-email: "Jason R. Coombs" <jaraco@jaraco.com>
|
||||||
|
Project-URL: Homepage, https://github.com/jaraco/backports.tarfile
|
||||||
|
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 :: Only
|
||||||
|
Requires-Python: >=3.8
|
||||||
|
Description-Content-Type: text/x-rst
|
||||||
|
License-File: LICENSE
|
||||||
|
Provides-Extra: docs
|
||||||
|
Requires-Dist: sphinx >=3.5 ; extra == 'docs'
|
||||||
|
Requires-Dist: jaraco.packaging >=9.3 ; extra == 'docs'
|
||||||
|
Requires-Dist: rst.linker >=1.9 ; extra == 'docs'
|
||||||
|
Requires-Dist: furo ; extra == 'docs'
|
||||||
|
Requires-Dist: sphinx-lint ; extra == 'docs'
|
||||||
|
Provides-Extra: testing
|
||||||
|
Requires-Dist: pytest !=8.1.*,>=6 ; extra == 'testing'
|
||||||
|
Requires-Dist: pytest-checkdocs >=2.4 ; extra == 'testing'
|
||||||
|
Requires-Dist: pytest-cov ; extra == 'testing'
|
||||||
|
Requires-Dist: pytest-enabler >=2.2 ; extra == 'testing'
|
||||||
|
Requires-Dist: jaraco.test ; extra == 'testing'
|
||||||
|
Requires-Dist: pytest !=8.0.* ; extra == 'testing'
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/pypi/v/backports.tarfile.svg
|
||||||
|
:target: https://pypi.org/project/backports.tarfile
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/pypi/pyversions/backports.tarfile.svg
|
||||||
|
|
||||||
|
.. image:: https://github.com/jaraco/backports.tarfile/actions/workflows/main.yml/badge.svg
|
||||||
|
:target: https://github.com/jaraco/backports.tarfile/actions?query=workflow%3A%22tests%22
|
||||||
|
:alt: tests
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json
|
||||||
|
:target: https://github.com/astral-sh/ruff
|
||||||
|
:alt: Ruff
|
||||||
|
|
||||||
|
.. .. image:: https://readthedocs.org/projects/backportstarfile/badge/?version=latest
|
||||||
|
.. :target: https://backportstarfile.readthedocs.io/en/latest/?badge=latest
|
||||||
|
|
||||||
|
.. image:: https://img.shields.io/badge/skeleton-2024-informational
|
||||||
|
:target: https://blog.jaraco.com/skeleton
|
16
env/lib/python3.10/site-packages/backports.tarfile-1.2.0.dist-info/RECORD
vendored
Normal file
16
env/lib/python3.10/site-packages/backports.tarfile-1.2.0.dist-info/RECORD
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
backports.tarfile-1.2.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||||
|
backports.tarfile-1.2.0.dist-info/LICENSE,sha256=htoPAa6uRjSKPD1GUZXcHOzN55956HdppkuNoEsqR0E,1023
|
||||||
|
backports.tarfile-1.2.0.dist-info/METADATA,sha256=ghXFTq132dxaEIolxr3HK1mZqm9iyUmaRANZQSr6WlE,2020
|
||||||
|
backports.tarfile-1.2.0.dist-info/RECORD,,
|
||||||
|
backports.tarfile-1.2.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
||||||
|
backports.tarfile-1.2.0.dist-info/top_level.txt,sha256=cGjaLMOoBR1FK0ApojtzWVmViTtJ7JGIK_HwXiEsvtU,10
|
||||||
|
backports/__init__.py,sha256=iOEMwnlORWezdO8-2vxBIPSR37D7JGjluZ8f55vzxls,81
|
||||||
|
backports/__pycache__/__init__.cpython-310.pyc,,
|
||||||
|
backports/tarfile/__init__.py,sha256=Pwf2qUIfB0SolJPCKcx3vz3UEu_aids4g4sAfxy94qg,108491
|
||||||
|
backports/tarfile/__main__.py,sha256=Yw2oGT1afrz2eBskzdPYL8ReB_3liApmhFkN2EbDmc4,59
|
||||||
|
backports/tarfile/__pycache__/__init__.cpython-310.pyc,,
|
||||||
|
backports/tarfile/__pycache__/__main__.cpython-310.pyc,,
|
||||||
|
backports/tarfile/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||||
|
backports/tarfile/compat/__pycache__/__init__.cpython-310.pyc,,
|
||||||
|
backports/tarfile/compat/__pycache__/py38.cpython-310.pyc,,
|
||||||
|
backports/tarfile/compat/py38.py,sha256=iYkyt_gvWjLzGUTJD9TuTfMMjOk-ersXZmRlvQYN2qE,568
|
5
env/lib/python3.10/site-packages/backports.tarfile-1.2.0.dist-info/WHEEL
vendored
Normal file
5
env/lib/python3.10/site-packages/backports.tarfile-1.2.0.dist-info/WHEEL
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Wheel-Version: 1.0
|
||||||
|
Generator: bdist_wheel (0.43.0)
|
||||||
|
Root-Is-Purelib: true
|
||||||
|
Tag: py3-none-any
|
||||||
|
|
1
env/lib/python3.10/site-packages/backports.tarfile-1.2.0.dist-info/top_level.txt
vendored
Normal file
1
env/lib/python3.10/site-packages/backports.tarfile-1.2.0.dist-info/top_level.txt
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
backports
|
1
env/lib/python3.10/site-packages/backports/__init__.py
vendored
Normal file
1
env/lib/python3.10/site-packages/backports/__init__.py
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
__path__ = __import__('pkgutil').extend_path(__path__, __name__) # type: ignore
|
BIN
env/lib/python3.10/site-packages/backports/__pycache__/__init__.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/backports/__pycache__/__init__.cpython-310.pyc
vendored
Normal file
Binary file not shown.
2937
env/lib/python3.10/site-packages/backports/tarfile/__init__.py
vendored
Normal file
2937
env/lib/python3.10/site-packages/backports/tarfile/__init__.py
vendored
Normal file
File diff suppressed because it is too large
Load Diff
5
env/lib/python3.10/site-packages/backports/tarfile/__main__.py
vendored
Normal file
5
env/lib/python3.10/site-packages/backports/tarfile/__main__.py
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from . import main
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
BIN
env/lib/python3.10/site-packages/backports/tarfile/__pycache__/__init__.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/backports/tarfile/__pycache__/__init__.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/backports/tarfile/__pycache__/__main__.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/backports/tarfile/__pycache__/__main__.cpython-310.pyc
vendored
Normal file
Binary file not shown.
0
env/lib/python3.10/site-packages/backports/tarfile/compat/__init__.py
vendored
Normal file
0
env/lib/python3.10/site-packages/backports/tarfile/compat/__init__.py
vendored
Normal file
BIN
env/lib/python3.10/site-packages/backports/tarfile/compat/__pycache__/__init__.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/backports/tarfile/compat/__pycache__/__init__.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/backports/tarfile/compat/__pycache__/py38.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/backports/tarfile/compat/__pycache__/py38.cpython-310.pyc
vendored
Normal file
Binary file not shown.
24
env/lib/python3.10/site-packages/backports/tarfile/compat/py38.py
vendored
Normal file
24
env/lib/python3.10/site-packages/backports/tarfile/compat/py38.py
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
if sys.version_info < (3, 9):
|
||||||
|
|
||||||
|
def removesuffix(self, suffix):
|
||||||
|
# suffix='' should not call self[:-0].
|
||||||
|
if suffix and self.endswith(suffix):
|
||||||
|
return self[: -len(suffix)]
|
||||||
|
else:
|
||||||
|
return self[:]
|
||||||
|
|
||||||
|
def removeprefix(self, prefix):
|
||||||
|
if self.startswith(prefix):
|
||||||
|
return self[len(prefix) :]
|
||||||
|
else:
|
||||||
|
return self[:]
|
||||||
|
else:
|
||||||
|
|
||||||
|
def removesuffix(self, suffix):
|
||||||
|
return self.removesuffix(suffix)
|
||||||
|
|
||||||
|
def removeprefix(self, prefix):
|
||||||
|
return self.removeprefix(prefix)
|
1
env/lib/python3.10/site-packages/certifi-2024.8.30.dist-info/INSTALLER
vendored
Normal file
1
env/lib/python3.10/site-packages/certifi-2024.8.30.dist-info/INSTALLER
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
pip
|
20
env/lib/python3.10/site-packages/certifi-2024.8.30.dist-info/LICENSE
vendored
Normal file
20
env/lib/python3.10/site-packages/certifi-2024.8.30.dist-info/LICENSE
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
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 $
|
67
env/lib/python3.10/site-packages/certifi-2024.8.30.dist-info/METADATA
vendored
Normal file
67
env/lib/python3.10/site-packages/certifi-2024.8.30.dist-info/METADATA
vendored
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
Metadata-Version: 2.1
|
||||||
|
Name: certifi
|
||||||
|
Version: 2024.8.30
|
||||||
|
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.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
|
||||||
|
Requires-Python: >=3.6
|
||||||
|
License-File: LICENSE
|
||||||
|
|
||||||
|
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.
|
14
env/lib/python3.10/site-packages/certifi-2024.8.30.dist-info/RECORD
vendored
Normal file
14
env/lib/python3.10/site-packages/certifi-2024.8.30.dist-info/RECORD
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
certifi-2024.8.30.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||||
|
certifi-2024.8.30.dist-info/LICENSE,sha256=6TcW2mucDVpKHfYP5pWzcPBpVgPSH2-D8FPkLPwQyvc,989
|
||||||
|
certifi-2024.8.30.dist-info/METADATA,sha256=GhBHRVUN6a4ZdUgE_N5wmukJfyuoE-QyIl8Y3ifNQBM,2222
|
||||||
|
certifi-2024.8.30.dist-info/RECORD,,
|
||||||
|
certifi-2024.8.30.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
|
||||||
|
certifi-2024.8.30.dist-info/top_level.txt,sha256=KMu4vUCfsjLrkPbSNdgdekS-pVJzBAJFO__nI8NF6-U,8
|
||||||
|
certifi/__init__.py,sha256=p_GYZrjUwPBUhpLlCZoGb0miKBKSqDAyZC5DvIuqbHQ,94
|
||||||
|
certifi/__main__.py,sha256=xBBoj905TUWBLRGANOcf7oi6e-3dMP4cEoG9OyMs11g,243
|
||||||
|
certifi/__pycache__/__init__.cpython-310.pyc,,
|
||||||
|
certifi/__pycache__/__main__.cpython-310.pyc,,
|
||||||
|
certifi/__pycache__/core.cpython-310.pyc,,
|
||||||
|
certifi/cacert.pem,sha256=lO3rZukXdPyuk6BWUJFOKQliWaXH6HGh9l1GGrUgG0c,299427
|
||||||
|
certifi/core.py,sha256=qRDDFyXVJwTB_EmoGppaXU_R9qCZvhl-EzxPMuV3nTA,4426
|
||||||
|
certifi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
env/lib/python3.10/site-packages/certifi-2024.8.30.dist-info/WHEEL
vendored
Normal file
5
env/lib/python3.10/site-packages/certifi-2024.8.30.dist-info/WHEEL
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Wheel-Version: 1.0
|
||||||
|
Generator: setuptools (74.0.0)
|
||||||
|
Root-Is-Purelib: true
|
||||||
|
Tag: py3-none-any
|
||||||
|
|
1
env/lib/python3.10/site-packages/certifi-2024.8.30.dist-info/top_level.txt
vendored
Normal file
1
env/lib/python3.10/site-packages/certifi-2024.8.30.dist-info/top_level.txt
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
certifi
|
4
env/lib/python3.10/site-packages/certifi/__init__.py
vendored
Normal file
4
env/lib/python3.10/site-packages/certifi/__init__.py
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
from .core import contents, where
|
||||||
|
|
||||||
|
__all__ = ["contents", "where"]
|
||||||
|
__version__ = "2024.08.30"
|
12
env/lib/python3.10/site-packages/certifi/__main__.py
vendored
Normal file
12
env/lib/python3.10/site-packages/certifi/__main__.py
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
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())
|
BIN
env/lib/python3.10/site-packages/certifi/__pycache__/__init__.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/certifi/__pycache__/__init__.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/certifi/__pycache__/__main__.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/certifi/__pycache__/__main__.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/certifi/__pycache__/core.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/certifi/__pycache__/core.cpython-310.pyc
vendored
Normal file
Binary file not shown.
4929
env/lib/python3.10/site-packages/certifi/cacert.pem
vendored
Normal file
4929
env/lib/python3.10/site-packages/certifi/cacert.pem
vendored
Normal file
File diff suppressed because it is too large
Load Diff
114
env/lib/python3.10/site-packages/certifi/core.py
vendored
Normal file
114
env/lib/python3.10/site-packages/certifi/core.py
vendored
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
"""
|
||||||
|
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")
|
||||||
|
|
||||||
|
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("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")
|
||||||
|
|
||||||
|
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("certifi", "cacert.pem", encoding="ascii")
|
0
env/lib/python3.10/site-packages/certifi/py.typed
vendored
Normal file
0
env/lib/python3.10/site-packages/certifi/py.typed
vendored
Normal file
1
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/INSTALLER
vendored
Normal file
1
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/INSTALLER
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
pip
|
26
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/LICENSE
vendored
Normal file
26
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/LICENSE
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
The MIT License
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
40
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/METADATA
vendored
Normal file
40
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/METADATA
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
Metadata-Version: 2.1
|
||||||
|
Name: cffi
|
||||||
|
Version: 1.17.1
|
||||||
|
Summary: Foreign Function Interface for Python calling C code.
|
||||||
|
Home-page: http://cffi.readthedocs.org
|
||||||
|
Author: Armin Rigo, Maciej Fijalkowski
|
||||||
|
Author-email: python-cffi@googlegroups.com
|
||||||
|
License: MIT
|
||||||
|
Project-URL: Documentation, http://cffi.readthedocs.org/
|
||||||
|
Project-URL: Source Code, https://github.com/python-cffi/cffi
|
||||||
|
Project-URL: Issue Tracker, https://github.com/python-cffi/cffi/issues
|
||||||
|
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
|
||||||
|
Classifier: Programming Language :: Python
|
||||||
|
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: Programming Language :: Python :: Implementation :: CPython
|
||||||
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
||||||
|
Classifier: License :: OSI Approved :: MIT License
|
||||||
|
Requires-Python: >=3.8
|
||||||
|
License-File: LICENSE
|
||||||
|
Requires-Dist: pycparser
|
||||||
|
|
||||||
|
|
||||||
|
CFFI
|
||||||
|
====
|
||||||
|
|
||||||
|
Foreign Function Interface for Python calling C code.
|
||||||
|
Please see the `Documentation <http://cffi.readthedocs.org/>`_.
|
||||||
|
|
||||||
|
Contact
|
||||||
|
-------
|
||||||
|
|
||||||
|
`Mailing list <https://groups.google.com/forum/#!forum/python-cffi>`_
|
48
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/RECORD
vendored
Normal file
48
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/RECORD
vendored
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
_cffi_backend.cpython-310-x86_64-linux-gnu.so,sha256=pciUVwDoiYkGtuoos7gi5U2TSTeBHVoDkneECMzaObI,985520
|
||||||
|
cffi-1.17.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||||
|
cffi-1.17.1.dist-info/LICENSE,sha256=BLgPWwd7vtaICM_rreteNSPyqMmpZJXFh72W3x6sKjM,1294
|
||||||
|
cffi-1.17.1.dist-info/METADATA,sha256=u6nuvP_qPJKu2zvIbi2zkGzVu7KjnnRIYUFyIrOY3j4,1531
|
||||||
|
cffi-1.17.1.dist-info/RECORD,,
|
||||||
|
cffi-1.17.1.dist-info/WHEEL,sha256=AxiTY2sz_GcPOsKDeggQV_FGgAhpyJSKs70WYTq6kog,151
|
||||||
|
cffi-1.17.1.dist-info/entry_points.txt,sha256=y6jTxnyeuLnL-XJcDv8uML3n6wyYiGRg8MTp_QGJ9Ho,75
|
||||||
|
cffi-1.17.1.dist-info/top_level.txt,sha256=rE7WR3rZfNKxWI9-jn6hsHCAl7MDkB-FmuQbxWjFehQ,19
|
||||||
|
cffi/__init__.py,sha256=H6t_ebva6EeHpUuItFLW1gbRp94eZRNJODLaWKdbx1I,513
|
||||||
|
cffi/__pycache__/__init__.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/_imp_emulation.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/_shimmed_dist_utils.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/api.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/backend_ctypes.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/cffi_opcode.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/commontypes.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/cparser.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/error.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/ffiplatform.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/lock.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/model.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/pkgconfig.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/recompiler.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/setuptools_ext.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/vengine_cpy.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/vengine_gen.cpython-310.pyc,,
|
||||||
|
cffi/__pycache__/verifier.cpython-310.pyc,,
|
||||||
|
cffi/_cffi_errors.h,sha256=zQXt7uR_m8gUW-fI2hJg0KoSkJFwXv8RGUkEDZ177dQ,3908
|
||||||
|
cffi/_cffi_include.h,sha256=Exhmgm9qzHWzWivjfTe0D7Xp4rPUkVxdNuwGhMTMzbw,15055
|
||||||
|
cffi/_embedding.h,sha256=EDKw5QrLvQoe3uosXB3H1xPVTYxsn33eV3A43zsA_Fw,18787
|
||||||
|
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=0qI3mEzZSNVcCangoyXOoAcL-RhpQL08eG8798T024s,44789
|
||||||
|
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=sim4Tm7lamt2Jn8uzKN0wMYp6ODByk3g7of47-h9LD4,65367
|
||||||
|
cffi/setuptools_ext.py,sha256=-ebj79lO2_AUH-kRcaja2pKY1Z_5tloGwsJgzK8P3Cc,8871
|
||||||
|
cffi/vengine_cpy.py,sha256=8UagT6ZEOZf6Dju7_CfNulue8CnsHLEzJYhnqUhoF04,43752
|
||||||
|
cffi/vengine_gen.py,sha256=DUlEIrDiVin1Pnhn1sfoamnS5NLqfJcOdhRoeSNeJRg,26939
|
||||||
|
cffi/verifier.py,sha256=oX8jpaohg2Qm3aHcznidAdvrVm5N4sQYG0a3Eo5mIl4,11182
|
6
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/WHEEL
vendored
Normal file
6
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/WHEEL
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Wheel-Version: 1.0
|
||||||
|
Generator: setuptools (74.1.1)
|
||||||
|
Root-Is-Purelib: false
|
||||||
|
Tag: cp310-cp310-manylinux_2_17_x86_64
|
||||||
|
Tag: cp310-cp310-manylinux2014_x86_64
|
||||||
|
|
2
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/entry_points.txt
vendored
Normal file
2
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/entry_points.txt
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[distutils.setup_keywords]
|
||||||
|
cffi_modules = cffi.setuptools_ext:cffi_modules
|
2
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/top_level.txt
vendored
Normal file
2
env/lib/python3.10/site-packages/cffi-1.17.1.dist-info/top_level.txt
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
_cffi_backend
|
||||||
|
cffi
|
14
env/lib/python3.10/site-packages/cffi/__init__.py
vendored
Normal file
14
env/lib/python3.10/site-packages/cffi/__init__.py
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
__all__ = ['FFI', 'VerificationError', 'VerificationMissing', 'CDefError',
|
||||||
|
'FFIError']
|
||||||
|
|
||||||
|
from .api import FFI
|
||||||
|
from .error import CDefError, FFIError, VerificationError, VerificationMissing
|
||||||
|
from .error import PkgConfigError
|
||||||
|
|
||||||
|
__version__ = "1.17.1"
|
||||||
|
__version_info__ = (1, 17, 1)
|
||||||
|
|
||||||
|
# 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"
|
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/__init__.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/__init__.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/_imp_emulation.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/_imp_emulation.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/_shimmed_dist_utils.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/_shimmed_dist_utils.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/api.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/api.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/backend_ctypes.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/backend_ctypes.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/cffi_opcode.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/cffi_opcode.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/commontypes.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/commontypes.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/cparser.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/cparser.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/error.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/error.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/ffiplatform.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/ffiplatform.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/lock.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/lock.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/model.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/model.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/pkgconfig.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/pkgconfig.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/recompiler.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/recompiler.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/setuptools_ext.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/setuptools_ext.cpython-310.pyc
vendored
Normal file
Binary file not shown.
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/vengine_cpy.cpython-310.pyc
vendored
Normal file
BIN
env/lib/python3.10/site-packages/cffi/__pycache__/vengine_cpy.cpython-310.pyc
vendored
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user