Initial commit (Clean history)
This commit is contained in:
247
path/to/venv/bin/Activate.ps1
Normal file
247
path/to/venv/bin/Activate.ps1
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"
|
||||
Binary file not shown.
Binary file not shown.
70
path/to/venv/bin/activate
Normal file
70
path/to/venv/bin/activate
Normal file
@@ -0,0 +1,70 @@
|
||||
# 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 commands. Without forgetting
|
||||
# past commands the $PATH changes we made may not be respected
|
||||
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:
|
||||
if [ "${OSTYPE:-}" = "cygwin" ] || [ "${OSTYPE:-}" = "msys" ] ; then
|
||||
# transform D:\path\to\venv to /d/path/to/venv on MSYS
|
||||
# and to /cygdrive/d/path/to/venv on Cygwin
|
||||
export VIRTUAL_ENV=$(cygpath /home/loitx/dev/utopia/api/path/to/venv)
|
||||
else
|
||||
# use the path as-is
|
||||
export VIRTUAL_ENV=/home/loitx/dev/utopia/api/path/to/venv
|
||||
fi
|
||||
|
||||
_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='(venv) '"${PS1:-}"
|
||||
export PS1
|
||||
VIRTUAL_ENV_PROMPT='(venv) '
|
||||
export VIRTUAL_ENV_PROMPT
|
||||
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
|
||||
27
path/to/venv/bin/activate.csh
Normal file
27
path/to/venv/bin/activate.csh
Normal file
@@ -0,0 +1,27 @@
|
||||
# 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/loitx/dev/utopia/api/path/to/venv
|
||||
|
||||
set _OLD_VIRTUAL_PATH="$PATH"
|
||||
setenv PATH "$VIRTUAL_ENV/"bin":$PATH"
|
||||
|
||||
|
||||
set _OLD_VIRTUAL_PROMPT="$prompt"
|
||||
|
||||
if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
|
||||
set prompt = '(venv) '"$prompt"
|
||||
setenv VIRTUAL_ENV_PROMPT '(venv) '
|
||||
endif
|
||||
|
||||
alias pydoc python -m pydoc
|
||||
|
||||
rehash
|
||||
69
path/to/venv/bin/activate.fish
Normal file
69
path/to/venv/bin/activate.fish
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/loitx/dev/utopia/api/path/to/venv
|
||||
|
||||
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) '(venv) ' (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 '(venv) '
|
||||
end
|
||||
8
path/to/venv/bin/django-admin
Executable file
8
path/to/venv/bin/django-admin
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from django.core.management import execute_from_command_line
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(execute_from_command_line())
|
||||
8
path/to/venv/bin/doesitcache
Executable file
8
path/to/venv/bin/doesitcache
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from cachecontrol._cmd import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
8
path/to/venv/bin/f2py
Executable file
8
path/to/venv/bin/f2py
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from numpy.f2py.f2py2e import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
212
path/to/venv/bin/fixup_firestore_admin_v1_keywords.py
Executable file
212
path/to/venv/bin/fixup_firestore_admin_v1_keywords.py
Executable file
@@ -0,0 +1,212 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2025 Google LLC
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
import argparse
|
||||
import os
|
||||
try:
|
||||
import libcst as cst
|
||||
except ImportError:
|
||||
raise ImportError('Run `python -m pip install "libcst >= 0.2.5"` to install libcst.')
|
||||
|
||||
|
||||
|
||||
import pathlib
|
||||
import sys
|
||||
from typing import (Any, Callable, Dict, List, Sequence, Tuple)
|
||||
|
||||
|
||||
def partition(
|
||||
predicate: Callable[[Any], bool],
|
||||
iterator: Sequence[Any]
|
||||
) -> Tuple[List[Any], List[Any]]:
|
||||
"""A stable, out-of-place partition."""
|
||||
results = ([], [])
|
||||
|
||||
for i in iterator:
|
||||
results[int(predicate(i))].append(i)
|
||||
|
||||
# Returns trueList, falseList
|
||||
return results[1], results[0]
|
||||
|
||||
|
||||
class firestore_adminCallTransformer(cst.CSTTransformer):
|
||||
CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata')
|
||||
METHOD_TO_PARAMS: Dict[str, Tuple[str]] = {
|
||||
'bulk_delete_documents': ('name', 'collection_ids', 'namespace_ids', ),
|
||||
'create_backup_schedule': ('parent', 'backup_schedule', ),
|
||||
'create_database': ('parent', 'database', 'database_id', ),
|
||||
'create_index': ('parent', 'index', ),
|
||||
'create_user_creds': ('parent', 'user_creds', 'user_creds_id', ),
|
||||
'delete_backup': ('name', ),
|
||||
'delete_backup_schedule': ('name', ),
|
||||
'delete_database': ('name', 'etag', ),
|
||||
'delete_index': ('name', ),
|
||||
'delete_user_creds': ('name', ),
|
||||
'disable_user_creds': ('name', ),
|
||||
'enable_user_creds': ('name', ),
|
||||
'export_documents': ('name', 'collection_ids', 'output_uri_prefix', 'namespace_ids', 'snapshot_time', ),
|
||||
'get_backup': ('name', ),
|
||||
'get_backup_schedule': ('name', ),
|
||||
'get_database': ('name', ),
|
||||
'get_field': ('name', ),
|
||||
'get_index': ('name', ),
|
||||
'get_user_creds': ('name', ),
|
||||
'import_documents': ('name', 'collection_ids', 'input_uri_prefix', 'namespace_ids', ),
|
||||
'list_backups': ('parent', 'filter', ),
|
||||
'list_backup_schedules': ('parent', ),
|
||||
'list_databases': ('parent', 'show_deleted', ),
|
||||
'list_fields': ('parent', 'filter', 'page_size', 'page_token', ),
|
||||
'list_indexes': ('parent', 'filter', 'page_size', 'page_token', ),
|
||||
'list_user_creds': ('parent', ),
|
||||
'reset_user_password': ('name', ),
|
||||
'restore_database': ('parent', 'database_id', 'backup', 'encryption_config', ),
|
||||
'update_backup_schedule': ('backup_schedule', 'update_mask', ),
|
||||
'update_database': ('database', 'update_mask', ),
|
||||
'update_field': ('field', 'update_mask', ),
|
||||
}
|
||||
|
||||
def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode:
|
||||
try:
|
||||
key = original.func.attr.value
|
||||
kword_params = self.METHOD_TO_PARAMS[key]
|
||||
except (AttributeError, KeyError):
|
||||
# Either not a method from the API or too convoluted to be sure.
|
||||
return updated
|
||||
|
||||
# If the existing code is valid, keyword args come after positional args.
|
||||
# Therefore, all positional args must map to the first parameters.
|
||||
args, kwargs = partition(lambda a: not bool(a.keyword), updated.args)
|
||||
if any(k.keyword.value == "request" for k in kwargs):
|
||||
# We've already fixed this file, don't fix it again.
|
||||
return updated
|
||||
|
||||
kwargs, ctrl_kwargs = partition(
|
||||
lambda a: a.keyword.value not in self.CTRL_PARAMS,
|
||||
kwargs
|
||||
)
|
||||
|
||||
args, ctrl_args = args[:len(kword_params)], args[len(kword_params):]
|
||||
ctrl_kwargs.extend(cst.Arg(value=a.value, keyword=cst.Name(value=ctrl))
|
||||
for a, ctrl in zip(ctrl_args, self.CTRL_PARAMS))
|
||||
|
||||
request_arg = cst.Arg(
|
||||
value=cst.Dict([
|
||||
cst.DictElement(
|
||||
cst.SimpleString("'{}'".format(name)),
|
||||
cst.Element(value=arg.value)
|
||||
)
|
||||
# Note: the args + kwargs looks silly, but keep in mind that
|
||||
# the control parameters had to be stripped out, and that
|
||||
# those could have been passed positionally or by keyword.
|
||||
for name, arg in zip(kword_params, args + kwargs)]),
|
||||
keyword=cst.Name("request")
|
||||
)
|
||||
|
||||
return updated.with_changes(
|
||||
args=[request_arg] + ctrl_kwargs
|
||||
)
|
||||
|
||||
|
||||
def fix_files(
|
||||
in_dir: pathlib.Path,
|
||||
out_dir: pathlib.Path,
|
||||
*,
|
||||
transformer=firestore_adminCallTransformer(),
|
||||
):
|
||||
"""Duplicate the input dir to the output dir, fixing file method calls.
|
||||
|
||||
Preconditions:
|
||||
* in_dir is a real directory
|
||||
* out_dir is a real, empty directory
|
||||
"""
|
||||
pyfile_gen = (
|
||||
pathlib.Path(os.path.join(root, f))
|
||||
for root, _, files in os.walk(in_dir)
|
||||
for f in files if os.path.splitext(f)[1] == ".py"
|
||||
)
|
||||
|
||||
for fpath in pyfile_gen:
|
||||
with open(fpath, 'r') as f:
|
||||
src = f.read()
|
||||
|
||||
# Parse the code and insert method call fixes.
|
||||
tree = cst.parse_module(src)
|
||||
updated = tree.visit(transformer)
|
||||
|
||||
# Create the path and directory structure for the new file.
|
||||
updated_path = out_dir.joinpath(fpath.relative_to(in_dir))
|
||||
updated_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# Generate the updated source file at the corresponding path.
|
||||
with open(updated_path, 'w') as f:
|
||||
f.write(updated.code)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser(
|
||||
description="""Fix up source that uses the firestore_admin client library.
|
||||
|
||||
The existing sources are NOT overwritten but are copied to output_dir with changes made.
|
||||
|
||||
Note: This tool operates at a best-effort level at converting positional
|
||||
parameters in client method calls to keyword based parameters.
|
||||
Cases where it WILL FAIL include
|
||||
A) * or ** expansion in a method call.
|
||||
B) Calls via function or method alias (includes free function calls)
|
||||
C) Indirect or dispatched calls (e.g. the method is looked up dynamically)
|
||||
|
||||
These all constitute false negatives. The tool will also detect false
|
||||
positives when an API method shares a name with another method.
|
||||
""")
|
||||
parser.add_argument(
|
||||
'-d',
|
||||
'--input-directory',
|
||||
required=True,
|
||||
dest='input_dir',
|
||||
help='the input directory to walk for python files to fix up',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-o',
|
||||
'--output-directory',
|
||||
required=True,
|
||||
dest='output_dir',
|
||||
help='the directory to output files fixed via un-flattening',
|
||||
)
|
||||
args = parser.parse_args()
|
||||
input_dir = pathlib.Path(args.input_dir)
|
||||
output_dir = pathlib.Path(args.output_dir)
|
||||
if not input_dir.is_dir():
|
||||
print(
|
||||
f"input directory '{input_dir}' does not exist or is not a directory",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(-1)
|
||||
|
||||
if not output_dir.is_dir():
|
||||
print(
|
||||
f"output directory '{output_dir}' does not exist or is not a directory",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(-1)
|
||||
|
||||
if os.listdir(output_dir):
|
||||
print(
|
||||
f"output directory '{output_dir}' is not empty",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(-1)
|
||||
|
||||
fix_files(input_dir, output_dir)
|
||||
197
path/to/venv/bin/fixup_firestore_v1_keywords.py
Executable file
197
path/to/venv/bin/fixup_firestore_v1_keywords.py
Executable file
@@ -0,0 +1,197 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2025 Google LLC
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
import argparse
|
||||
import os
|
||||
try:
|
||||
import libcst as cst
|
||||
except ImportError:
|
||||
raise ImportError('Run `python -m pip install "libcst >= 0.2.5"` to install libcst.')
|
||||
|
||||
|
||||
|
||||
import pathlib
|
||||
import sys
|
||||
from typing import (Any, Callable, Dict, List, Sequence, Tuple)
|
||||
|
||||
|
||||
def partition(
|
||||
predicate: Callable[[Any], bool],
|
||||
iterator: Sequence[Any]
|
||||
) -> Tuple[List[Any], List[Any]]:
|
||||
"""A stable, out-of-place partition."""
|
||||
results = ([], [])
|
||||
|
||||
for i in iterator:
|
||||
results[int(predicate(i))].append(i)
|
||||
|
||||
# Returns trueList, falseList
|
||||
return results[1], results[0]
|
||||
|
||||
|
||||
class firestoreCallTransformer(cst.CSTTransformer):
|
||||
CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata')
|
||||
METHOD_TO_PARAMS: Dict[str, Tuple[str]] = {
|
||||
'batch_get_documents': ('database', 'documents', 'mask', 'transaction', 'new_transaction', 'read_time', ),
|
||||
'batch_write': ('database', 'writes', 'labels', ),
|
||||
'begin_transaction': ('database', 'options', ),
|
||||
'commit': ('database', 'writes', 'transaction', ),
|
||||
'create_document': ('parent', 'collection_id', 'document', 'document_id', 'mask', ),
|
||||
'delete_document': ('name', 'current_document', ),
|
||||
'get_document': ('name', 'mask', 'transaction', 'read_time', ),
|
||||
'list_collection_ids': ('parent', 'page_size', 'page_token', 'read_time', ),
|
||||
'list_documents': ('parent', 'collection_id', 'page_size', 'page_token', 'order_by', 'mask', 'transaction', 'read_time', 'show_missing', ),
|
||||
'listen': ('database', 'add_target', 'remove_target', 'labels', ),
|
||||
'partition_query': ('parent', 'structured_query', 'partition_count', 'page_token', 'page_size', 'read_time', ),
|
||||
'rollback': ('database', 'transaction', ),
|
||||
'run_aggregation_query': ('parent', 'structured_aggregation_query', 'transaction', 'new_transaction', 'read_time', 'explain_options', ),
|
||||
'run_query': ('parent', 'structured_query', 'transaction', 'new_transaction', 'read_time', 'explain_options', ),
|
||||
'update_document': ('document', 'update_mask', 'mask', 'current_document', ),
|
||||
'write': ('database', 'stream_id', 'writes', 'stream_token', 'labels', ),
|
||||
}
|
||||
|
||||
def leave_Call(self, original: cst.Call, updated: cst.Call) -> cst.CSTNode:
|
||||
try:
|
||||
key = original.func.attr.value
|
||||
kword_params = self.METHOD_TO_PARAMS[key]
|
||||
except (AttributeError, KeyError):
|
||||
# Either not a method from the API or too convoluted to be sure.
|
||||
return updated
|
||||
|
||||
# If the existing code is valid, keyword args come after positional args.
|
||||
# Therefore, all positional args must map to the first parameters.
|
||||
args, kwargs = partition(lambda a: not bool(a.keyword), updated.args)
|
||||
if any(k.keyword.value == "request" for k in kwargs):
|
||||
# We've already fixed this file, don't fix it again.
|
||||
return updated
|
||||
|
||||
kwargs, ctrl_kwargs = partition(
|
||||
lambda a: a.keyword.value not in self.CTRL_PARAMS,
|
||||
kwargs
|
||||
)
|
||||
|
||||
args, ctrl_args = args[:len(kword_params)], args[len(kword_params):]
|
||||
ctrl_kwargs.extend(cst.Arg(value=a.value, keyword=cst.Name(value=ctrl))
|
||||
for a, ctrl in zip(ctrl_args, self.CTRL_PARAMS))
|
||||
|
||||
request_arg = cst.Arg(
|
||||
value=cst.Dict([
|
||||
cst.DictElement(
|
||||
cst.SimpleString("'{}'".format(name)),
|
||||
cst.Element(value=arg.value)
|
||||
)
|
||||
# Note: the args + kwargs looks silly, but keep in mind that
|
||||
# the control parameters had to be stripped out, and that
|
||||
# those could have been passed positionally or by keyword.
|
||||
for name, arg in zip(kword_params, args + kwargs)]),
|
||||
keyword=cst.Name("request")
|
||||
)
|
||||
|
||||
return updated.with_changes(
|
||||
args=[request_arg] + ctrl_kwargs
|
||||
)
|
||||
|
||||
|
||||
def fix_files(
|
||||
in_dir: pathlib.Path,
|
||||
out_dir: pathlib.Path,
|
||||
*,
|
||||
transformer=firestoreCallTransformer(),
|
||||
):
|
||||
"""Duplicate the input dir to the output dir, fixing file method calls.
|
||||
|
||||
Preconditions:
|
||||
* in_dir is a real directory
|
||||
* out_dir is a real, empty directory
|
||||
"""
|
||||
pyfile_gen = (
|
||||
pathlib.Path(os.path.join(root, f))
|
||||
for root, _, files in os.walk(in_dir)
|
||||
for f in files if os.path.splitext(f)[1] == ".py"
|
||||
)
|
||||
|
||||
for fpath in pyfile_gen:
|
||||
with open(fpath, 'r') as f:
|
||||
src = f.read()
|
||||
|
||||
# Parse the code and insert method call fixes.
|
||||
tree = cst.parse_module(src)
|
||||
updated = tree.visit(transformer)
|
||||
|
||||
# Create the path and directory structure for the new file.
|
||||
updated_path = out_dir.joinpath(fpath.relative_to(in_dir))
|
||||
updated_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# Generate the updated source file at the corresponding path.
|
||||
with open(updated_path, 'w') as f:
|
||||
f.write(updated.code)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser(
|
||||
description="""Fix up source that uses the firestore client library.
|
||||
|
||||
The existing sources are NOT overwritten but are copied to output_dir with changes made.
|
||||
|
||||
Note: This tool operates at a best-effort level at converting positional
|
||||
parameters in client method calls to keyword based parameters.
|
||||
Cases where it WILL FAIL include
|
||||
A) * or ** expansion in a method call.
|
||||
B) Calls via function or method alias (includes free function calls)
|
||||
C) Indirect or dispatched calls (e.g. the method is looked up dynamically)
|
||||
|
||||
These all constitute false negatives. The tool will also detect false
|
||||
positives when an API method shares a name with another method.
|
||||
""")
|
||||
parser.add_argument(
|
||||
'-d',
|
||||
'--input-directory',
|
||||
required=True,
|
||||
dest='input_dir',
|
||||
help='the input directory to walk for python files to fix up',
|
||||
)
|
||||
parser.add_argument(
|
||||
'-o',
|
||||
'--output-directory',
|
||||
required=True,
|
||||
dest='output_dir',
|
||||
help='the directory to output files fixed via un-flattening',
|
||||
)
|
||||
args = parser.parse_args()
|
||||
input_dir = pathlib.Path(args.input_dir)
|
||||
output_dir = pathlib.Path(args.output_dir)
|
||||
if not input_dir.is_dir():
|
||||
print(
|
||||
f"input directory '{input_dir}' does not exist or is not a directory",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(-1)
|
||||
|
||||
if not output_dir.is_dir():
|
||||
print(
|
||||
f"output directory '{output_dir}' does not exist or is not a directory",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(-1)
|
||||
|
||||
if os.listdir(output_dir):
|
||||
print(
|
||||
f"output directory '{output_dir}' is not empty",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(-1)
|
||||
|
||||
fix_files(input_dir, output_dir)
|
||||
8
path/to/venv/bin/gunicorn
Executable file
8
path/to/venv/bin/gunicorn
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from gunicorn.app.wsgiapp import run
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(run())
|
||||
8
path/to/venv/bin/httpx
Executable file
8
path/to/venv/bin/httpx
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from httpx import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
8
path/to/venv/bin/inv
Executable file
8
path/to/venv/bin/inv
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from invoke.main import program
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(program.run())
|
||||
8
path/to/venv/bin/invoke
Executable file
8
path/to/venv/bin/invoke
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from invoke.main import program
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(program.run())
|
||||
8
path/to/venv/bin/mammoth
Executable file
8
path/to/venv/bin/mammoth
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from mammoth.cli import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
8
path/to/venv/bin/normalizer
Executable file
8
path/to/venv/bin/normalizer
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- 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())
|
||||
95
path/to/venv/bin/num2words
Executable file
95
path/to/venv/bin/num2words
Executable file
@@ -0,0 +1,95 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2003, Taro Ogawa. All Rights Reserved.
|
||||
# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved.
|
||||
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2.1 of the License, or (at your option) any later version.
|
||||
# This library 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
|
||||
# Lesser General Public License for more details.
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
# MA 02110-1301 USA
|
||||
|
||||
"""num2words: convert numbers into words.
|
||||
|
||||
Usage:
|
||||
num2words [options] <number>
|
||||
num2words --list-languages
|
||||
num2words --list-converters
|
||||
num2words --help
|
||||
|
||||
Arguments:
|
||||
<number> Number you want to convert into words
|
||||
|
||||
Options:
|
||||
-L --list-languages Show all languages.
|
||||
-C --list-converters Show all converters.
|
||||
-l --lang=<lang> Output language [default: en].
|
||||
-t --to=<to> Output converter [default: cardinal].
|
||||
-h --help Show this message.
|
||||
-v --version Show version.
|
||||
|
||||
Examples:
|
||||
$ num2words 10001
|
||||
ten thousand and one
|
||||
|
||||
$ num2words 24,120.10
|
||||
twenty-four thousand, one hundred and twenty point one
|
||||
|
||||
$ num2words 24,120.10 -l es
|
||||
veinticuatro mil ciento veinte punto uno
|
||||
|
||||
$num2words 2.14 -l es --to currency
|
||||
dos euros con catorce céntimos
|
||||
"""
|
||||
|
||||
from __future__ import print_function, unicode_literals
|
||||
import os
|
||||
import sys
|
||||
from docopt import docopt
|
||||
import num2words
|
||||
|
||||
__version__ = "0.5.14"
|
||||
__license__ = "LGPL"
|
||||
|
||||
|
||||
def get_languages():
|
||||
return sorted(list(num2words.CONVERTER_CLASSES.keys()))
|
||||
|
||||
|
||||
def get_converters():
|
||||
return sorted(list(num2words.CONVERTES_TYPES))
|
||||
|
||||
|
||||
def main():
|
||||
version = "{}=={}".format(os.path.basename(__file__), __version__)
|
||||
args = docopt(__doc__, argv=None, help=True, version=version, options_first=False)
|
||||
if args["--list-languages"]:
|
||||
for lang in get_languages():
|
||||
sys.stdout.write(lang)
|
||||
sys.stdout.write(os.linesep)
|
||||
sys.exit(0)
|
||||
if args["--list-converters"]:
|
||||
for cvt in get_converters():
|
||||
sys.stdout.write(cvt)
|
||||
sys.stdout.write(os.linesep)
|
||||
sys.exit(0)
|
||||
try:
|
||||
words = num2words.num2words(args['<number>'], lang=args['--lang'], to=args['--to'])
|
||||
sys.stdout.write(words + os.linesep)
|
||||
sys.exit(0)
|
||||
except Exception as err:
|
||||
sys.stderr.write(str(args['<number>']))
|
||||
sys.stderr.write(str(err) + os.linesep)
|
||||
sys.stderr.write(__doc__)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
8
path/to/venv/bin/numpy-config
Executable file
8
path/to/venv/bin/numpy-config
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from numpy._configtool import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
8
path/to/venv/bin/pip
Executable file
8
path/to/venv/bin/pip
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- 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
path/to/venv/bin/pip3
Executable file
8
path/to/venv/bin/pip3
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- 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
path/to/venv/bin/pip3.12
Executable file
8
path/to/venv/bin/pip3.12
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- 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
path/to/venv/bin/pyrsa-decrypt
Executable file
8
path/to/venv/bin/pyrsa-decrypt
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from rsa.cli import decrypt
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(decrypt())
|
||||
8
path/to/venv/bin/pyrsa-encrypt
Executable file
8
path/to/venv/bin/pyrsa-encrypt
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from rsa.cli import encrypt
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(encrypt())
|
||||
8
path/to/venv/bin/pyrsa-keygen
Executable file
8
path/to/venv/bin/pyrsa-keygen
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from rsa.cli import keygen
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(keygen())
|
||||
8
path/to/venv/bin/pyrsa-priv2pub
Executable file
8
path/to/venv/bin/pyrsa-priv2pub
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from rsa.util import private_to_public
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(private_to_public())
|
||||
8
path/to/venv/bin/pyrsa-sign
Executable file
8
path/to/venv/bin/pyrsa-sign
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from rsa.cli import sign
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(sign())
|
||||
8
path/to/venv/bin/pyrsa-verify
Executable file
8
path/to/venv/bin/pyrsa-verify
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from rsa.cli import verify
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(verify())
|
||||
1
path/to/venv/bin/python
Symbolic link
1
path/to/venv/bin/python
Symbolic link
@@ -0,0 +1 @@
|
||||
python3
|
||||
1
path/to/venv/bin/python3
Symbolic link
1
path/to/venv/bin/python3
Symbolic link
@@ -0,0 +1 @@
|
||||
/usr/bin/python3
|
||||
1
path/to/venv/bin/python3.12
Symbolic link
1
path/to/venv/bin/python3.12
Symbolic link
@@ -0,0 +1 @@
|
||||
python3
|
||||
8
path/to/venv/bin/sqlformat
Executable file
8
path/to/venv/bin/sqlformat
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from sqlparse.__main__ import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
8
path/to/venv/bin/wsdump
Executable file
8
path/to/venv/bin/wsdump
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/home/loitx/dev/utopia/api/path/to/venv/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from websocket._wsdump import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user