mirror of
https://github.com/thegeeklab/ansible-later.git
synced 2024-11-22 21:00:44 +00:00
commit
28302701c5
2
.gitignore
vendored
2
.gitignore
vendored
@ -86,7 +86,7 @@ celerybeat-schedule
|
|||||||
venv/
|
venv/
|
||||||
ENV/
|
ENV/
|
||||||
env/
|
env/
|
||||||
env27/
|
env*/
|
||||||
|
|
||||||
# Spyder project settings
|
# Spyder project settings
|
||||||
.spyderproject
|
.spyderproject
|
||||||
|
@ -7,6 +7,7 @@ with old releases.
|
|||||||
- Switch configuration files to YAML
|
- Switch configuration files to YAML
|
||||||
- Enable multi location configuration files [#14](https://github.com/xoxys/ansible-later/issues/14)
|
- Enable multi location configuration files [#14](https://github.com/xoxys/ansible-later/issues/14)
|
||||||
- ID's used in standards have to be unique (or not set)
|
- ID's used in standards have to be unique (or not set)
|
||||||
|
- `ansible_review_min_version` was renamed to `ansible_later_min_version`
|
||||||
|
|
||||||
- FEATURE
|
- FEATURE
|
||||||
- Add optional JSON logging [#13](https://github.com/xoxys/ansible-later/issues/13)
|
- Add optional JSON logging [#13](https://github.com/xoxys/ansible-later/issues/13)
|
||||||
|
@ -172,7 +172,10 @@ optional arguments:
|
|||||||
ansible-later FILES
|
ansible-later FILES
|
||||||
```
|
```
|
||||||
|
|
||||||
Where FILES is a space delimited list of files to review. You can also pass glob
|
If you don't pass any file to ansible-later it will review all files including subdirs in
|
||||||
|
the current working directory (hidden files and folders are excluded by default).
|
||||||
|
|
||||||
|
Otherwise you can pass a space delimited list of files to review. You can also pass glob
|
||||||
patterns to ansible-later:
|
patterns to ansible-later:
|
||||||
|
|
||||||
```Shell
|
```Shell
|
||||||
@ -183,7 +186,7 @@ ansible-later meta/main.yml tasks/install.yml
|
|||||||
ansible-later **/*.yml
|
ansible-later **/*.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
ansible-later will review inventory files, role f0iles, python code (modules, plugins)
|
ansible-later will review inventory files, role files, python code (modules, plugins)
|
||||||
and playbooks.
|
and playbooks.
|
||||||
|
|
||||||
- The goal is that each file that changes in a
|
- The goal is that each file that changes in a
|
||||||
|
@ -41,13 +41,13 @@ def get_standards(filepath):
|
|||||||
"Please upgrade ansible." %
|
"Please upgrade ansible." %
|
||||||
(standards.ansible_min_version, ansible.__version__))
|
(standards.ansible_min_version, ansible.__version__))
|
||||||
|
|
||||||
if getattr(standards, "ansible_review_min_version", None) and \
|
if getattr(standards, "ansible_later_min_version", None) and \
|
||||||
LooseVersion(standards.ansible_review_min_version) > LooseVersion(
|
LooseVersion(standards.ansible_later_min_version) > LooseVersion(
|
||||||
utils.get_property("__version__")):
|
utils.get_property("__version__")):
|
||||||
utils.sysexit_with_message(
|
utils.sysexit_with_message(
|
||||||
"Standards require ansible-later version %s (current version %s). "
|
"Standards require ansible-later version %s (current version %s). "
|
||||||
"Please upgrade ansible-later." %
|
"Please upgrade ansible-later." %
|
||||||
(standards.ansible_review_min_version, utils.get_property("__version__")))
|
(standards.ansible_later_min_version, utils.get_property("__version__")))
|
||||||
|
|
||||||
normalized_std = (list(toolz.remove(lambda x: x.id == "", standards.standards)))
|
normalized_std = (list(toolz.remove(lambda x: x.id == "", standards.standards)))
|
||||||
unique_std = len(list(toolz.unique(normalized_std, key=lambda x: x.id)))
|
unique_std = len(list(toolz.unique(normalized_std, key=lambda x: x.id)))
|
||||||
|
@ -226,7 +226,7 @@ use_yaml_rather_than_key_value = Standard(dict(
|
|||||||
|
|
||||||
|
|
||||||
ansible_min_version = "2.5"
|
ansible_min_version = "2.5"
|
||||||
ansible_review_min_version = "0.1.0"
|
ansible_later_min_version = "0.2.0"
|
||||||
|
|
||||||
|
|
||||||
standards = [
|
standards = [
|
||||||
|
@ -197,7 +197,7 @@ use_yaml_rather_than_key_value = Standard(dict(
|
|||||||
|
|
||||||
|
|
||||||
ansible_min_version = '2.1'
|
ansible_min_version = '2.1'
|
||||||
ansible_review_min_version = '0.1.0'
|
ansible_later_min_version = '0.1.0'
|
||||||
|
|
||||||
|
|
||||||
standards = [
|
standards = [
|
||||||
|
@ -1,78 +0,0 @@
|
|||||||
# This file must be used with "source bin/activate" *from bash*
|
|
||||||
# you cannot run it directly
|
|
||||||
|
|
||||||
deactivate () {
|
|
||||||
unset -f pydoc >/dev/null 2>&1
|
|
||||||
|
|
||||||
# reset old environment variables
|
|
||||||
# ! [ -z ${VAR+_} ] returns true if VAR is declared at all
|
|
||||||
if ! [ -z "${_OLD_VIRTUAL_PATH+_}" ] ; then
|
|
||||||
PATH="$_OLD_VIRTUAL_PATH"
|
|
||||||
export PATH
|
|
||||||
unset _OLD_VIRTUAL_PATH
|
|
||||||
fi
|
|
||||||
if ! [ -z "${_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-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
|
|
||||||
hash -r 2>/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then
|
|
||||||
PS1="$_OLD_VIRTUAL_PS1"
|
|
||||||
export PS1
|
|
||||||
unset _OLD_VIRTUAL_PS1
|
|
||||||
fi
|
|
||||||
|
|
||||||
unset VIRTUAL_ENV
|
|
||||||
if [ ! "${1-}" = "nondestructive" ] ; then
|
|
||||||
# Self destruct!
|
|
||||||
unset -f deactivate
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# unset irrelevant variables
|
|
||||||
deactivate nondestructive
|
|
||||||
|
|
||||||
VIRTUAL_ENV="/Users/rkau2905/Devel/python/private/ansible-later/env_27"
|
|
||||||
export VIRTUAL_ENV
|
|
||||||
|
|
||||||
_OLD_VIRTUAL_PATH="$PATH"
|
|
||||||
PATH="$VIRTUAL_ENV/bin:$PATH"
|
|
||||||
export PATH
|
|
||||||
|
|
||||||
# unset PYTHONHOME if set
|
|
||||||
if ! [ -z "${PYTHONHOME+_}" ] ; then
|
|
||||||
_OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
|
|
||||||
unset PYTHONHOME
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
|
|
||||||
_OLD_VIRTUAL_PS1="$PS1"
|
|
||||||
if [ "x" != x ] ; then
|
|
||||||
PS1="$PS1"
|
|
||||||
else
|
|
||||||
PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1"
|
|
||||||
fi
|
|
||||||
export PS1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Make sure to unalias pydoc if it's already there
|
|
||||||
alias pydoc 2>/dev/null >/dev/null && unalias pydoc
|
|
||||||
|
|
||||||
pydoc () {
|
|
||||||
python -m pydoc "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
# 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-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
|
|
||||||
hash -r 2>/dev/null
|
|
||||||
fi
|
|
@ -1,42 +0,0 @@
|
|||||||
# 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>.
|
|
||||||
|
|
||||||
set newline='\
|
|
||||||
'
|
|
||||||
|
|
||||||
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH:q" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT:q" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc'
|
|
||||||
|
|
||||||
# Unset irrelevant variables.
|
|
||||||
deactivate nondestructive
|
|
||||||
|
|
||||||
setenv VIRTUAL_ENV "/Users/rkau2905/Devel/python/private/ansible-later/env_27"
|
|
||||||
|
|
||||||
set _OLD_VIRTUAL_PATH="$PATH:q"
|
|
||||||
setenv PATH "$VIRTUAL_ENV:q/bin:$PATH:q"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ("" != "") then
|
|
||||||
set env_name = ""
|
|
||||||
else
|
|
||||||
set env_name = "$VIRTUAL_ENV:t:q"
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Could be in a non-interactive environment,
|
|
||||||
# in which case, $prompt is undefined and we wouldn't
|
|
||||||
# care about the prompt anyway.
|
|
||||||
if ( $?prompt ) then
|
|
||||||
set _OLD_VIRTUAL_PROMPT="$prompt:q"
|
|
||||||
if ( "$prompt:q" =~ *"$newline:q"* ) then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
set prompt = "[$env_name:q] $prompt:q"
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
unset env_name
|
|
||||||
|
|
||||||
alias pydoc python -m pydoc
|
|
||||||
|
|
||||||
rehash
|
|
@ -1,76 +0,0 @@
|
|||||||
# This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*.
|
|
||||||
# Do not run it directly.
|
|
||||||
|
|
||||||
function deactivate -d 'Exit virtualenv mode and return to the normal 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 an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`.
|
|
||||||
set -l fish_function_path
|
|
||||||
|
|
||||||
# Erase virtualenv's `fish_prompt` and restore the original.
|
|
||||||
functions -e fish_prompt
|
|
||||||
functions -c _old_fish_prompt fish_prompt
|
|
||||||
functions -e _old_fish_prompt
|
|
||||||
set -e _OLD_FISH_PROMPT_OVERRIDE
|
|
||||||
end
|
|
||||||
|
|
||||||
set -e VIRTUAL_ENV
|
|
||||||
|
|
||||||
if test "$argv[1]" != 'nondestructive'
|
|
||||||
# Self-destruct!
|
|
||||||
functions -e pydoc
|
|
||||||
functions -e deactivate
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Unset irrelevant variables.
|
|
||||||
deactivate nondestructive
|
|
||||||
|
|
||||||
set -gx VIRTUAL_ENV "/Users/rkau2905/Devel/python/private/ansible-later/env_27"
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
function pydoc
|
|
||||||
python -m pydoc $argv
|
|
||||||
end
|
|
||||||
|
|
||||||
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
|
|
||||||
# Copy the current `fish_prompt` function as `_old_fish_prompt`.
|
|
||||||
functions -c fish_prompt _old_fish_prompt
|
|
||||||
|
|
||||||
function fish_prompt
|
|
||||||
# Save the current $status, for fish_prompts that display it.
|
|
||||||
set -l old_status $status
|
|
||||||
|
|
||||||
# Prompt override provided?
|
|
||||||
# If not, just prepend the environment name.
|
|
||||||
if test -n ""
|
|
||||||
printf '%s%s' "" (set_color normal)
|
|
||||||
else
|
|
||||||
printf '%s(%s) ' (set_color normal) (basename "$VIRTUAL_ENV")
|
|
||||||
end
|
|
||||||
|
|
||||||
# Restore the original $status
|
|
||||||
echo "exit $old_status" | source
|
|
||||||
_old_fish_prompt
|
|
||||||
end
|
|
||||||
|
|
||||||
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
|
|
||||||
end
|
|
@ -1,150 +0,0 @@
|
|||||||
# This file must be dot sourced from PoSh; you cannot run it
|
|
||||||
# directly. Do this: . ./activate.ps1
|
|
||||||
|
|
||||||
# FIXME: clean up unused vars.
|
|
||||||
$script:THIS_PATH = $myinvocation.mycommand.path
|
|
||||||
$script:BASE_DIR = split-path (resolve-path "$THIS_PATH/..") -Parent
|
|
||||||
$script:DIR_NAME = split-path $BASE_DIR -Leaf
|
|
||||||
|
|
||||||
function global:deactivate ( [switch] $NonDestructive ){
|
|
||||||
|
|
||||||
if ( test-path variable:_OLD_VIRTUAL_PATH ) {
|
|
||||||
$env:PATH = $variable:_OLD_VIRTUAL_PATH
|
|
||||||
remove-variable "_OLD_VIRTUAL_PATH" -scope global
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( test-path function:_old_virtual_prompt ) {
|
|
||||||
$function:prompt = $function:_old_virtual_prompt
|
|
||||||
remove-item function:\_old_virtual_prompt
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($env:VIRTUAL_ENV) {
|
|
||||||
$old_env = split-path $env:VIRTUAL_ENV -leaf
|
|
||||||
remove-item env:VIRTUAL_ENV -erroraction silentlycontinue
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !$NonDestructive ) {
|
|
||||||
# Self destruct!
|
|
||||||
remove-item function:deactivate
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# unset irrelevant variables
|
|
||||||
deactivate -nondestructive
|
|
||||||
|
|
||||||
$VIRTUAL_ENV = $BASE_DIR
|
|
||||||
$env:VIRTUAL_ENV = $VIRTUAL_ENV
|
|
||||||
|
|
||||||
$global:_OLD_VIRTUAL_PATH = $env:PATH
|
|
||||||
$env:PATH = "$env:VIRTUAL_ENV/bin:" + $env:PATH
|
|
||||||
if (! $env:VIRTUAL_ENV_DISABLE_PROMPT) {
|
|
||||||
function global:_old_virtual_prompt { "" }
|
|
||||||
$function:_old_virtual_prompt = $function:prompt
|
|
||||||
function global:prompt {
|
|
||||||
# Add a prefix to the current prompt, but don't discard it.
|
|
||||||
write-host "($(split-path $env:VIRTUAL_ENV -leaf)) " -nonewline
|
|
||||||
& $function:_old_virtual_prompt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# SIG # Begin signature block
|
|
||||||
# MIISeAYJKoZIhvcNAQcCoIISaTCCEmUCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
|
|
||||||
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
|
|
||||||
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUS5reBwSg3zOUwhXf2jPChZzf
|
|
||||||
# yPmggg6tMIIGcDCCBFigAwIBAgIBJDANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQG
|
|
||||||
# EwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERp
|
|
||||||
# Z2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2Vy
|
|
||||||
# dGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDcxMDI0MjIwMTQ2WhcNMTcxMDI0MjIw
|
|
||||||
# MTQ2WjCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzAp
|
|
||||||
# BgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNV
|
|
||||||
# BAMTL1N0YXJ0Q29tIENsYXNzIDIgUHJpbWFyeSBJbnRlcm1lZGlhdGUgT2JqZWN0
|
|
||||||
# IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyiOLIjUemqAbPJ1J
|
|
||||||
# 0D8MlzgWKbr4fYlbRVjvhHDtfhFN6RQxq0PjTQxRgWzwFQNKJCdU5ftKoM5N4YSj
|
|
||||||
# Id6ZNavcSa6/McVnhDAQm+8H3HWoD030NVOxbjgD/Ih3HaV3/z9159nnvyxQEckR
|
|
||||||
# ZfpJB2Kfk6aHqW3JnSvRe+XVZSufDVCe/vtxGSEwKCaNrsLc9pboUoYIC3oyzWoU
|
|
||||||
# TZ65+c0H4paR8c8eK/mC914mBo6N0dQ512/bkSdaeY9YaQpGtW/h/W/FkbQRT3sC
|
|
||||||
# pttLVlIjnkuY4r9+zvqhToPjxcfDYEf+XD8VGkAqle8Aa8hQ+M1qGdQjAye8OzbV
|
|
||||||
# uUOw7wIDAQABo4IB6TCCAeUwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
|
|
||||||
# AQYwHQYDVR0OBBYEFNBOD0CZbLhLGW87KLjg44gHNKq3MB8GA1UdIwQYMBaAFE4L
|
|
||||||
# 7xqkQFulF2mHMMo0aEPQQa7yMD0GCCsGAQUFBwEBBDEwLzAtBggrBgEFBQcwAoYh
|
|
||||||
# aHR0cDovL3d3dy5zdGFydHNzbC5jb20vc2ZzY2EuY3J0MFsGA1UdHwRUMFIwJ6Al
|
|
||||||
# oCOGIWh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3Nmc2NhLmNybDAnoCWgI4YhaHR0
|
|
||||||
# cDovL2NybC5zdGFydHNzbC5jb20vc2ZzY2EuY3JsMIGABgNVHSAEeTB3MHUGCysG
|
|
||||||
# AQQBgbU3AQIBMGYwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
|
|
||||||
# L3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
|
|
||||||
# L2ludGVybWVkaWF0ZS5wZGYwEQYJYIZIAYb4QgEBBAQDAgABMFAGCWCGSAGG+EIB
|
|
||||||
# DQRDFkFTdGFydENvbSBDbGFzcyAyIFByaW1hcnkgSW50ZXJtZWRpYXRlIE9iamVj
|
|
||||||
# dCBTaWduaW5nIENlcnRpZmljYXRlczANBgkqhkiG9w0BAQUFAAOCAgEAcnMLA3Va
|
|
||||||
# N4OIE9l4QT5OEtZy5PByBit3oHiqQpgVEQo7DHRsjXD5H/IyTivpMikaaeRxIv95
|
|
||||||
# baRd4hoUcMwDj4JIjC3WA9FoNFV31SMljEZa66G8RQECdMSSufgfDYu1XQ+cUKxh
|
|
||||||
# D3EtLGGcFGjjML7EQv2Iol741rEsycXwIXcryxeiMbU2TPi7X3elbwQMc4JFlJ4B
|
|
||||||
# y9FhBzuZB1DV2sN2irGVbC3G/1+S2doPDjL1CaElwRa/T0qkq2vvPxUgryAoCppU
|
|
||||||
# FKViw5yoGYC+z1GaesWWiP1eFKAL0wI7IgSvLzU3y1Vp7vsYaxOVBqZtebFTWRHt
|
|
||||||
# XjCsFrrQBngt0d33QbQRI5mwgzEp7XJ9xu5d6RVWM4TPRUsd+DDZpBHm9mszvi9g
|
|
||||||
# VFb2ZG7qRRXCSqys4+u/NLBPbXi/m/lU00cODQTlC/euwjk9HQtRrXQ/zqsBJS6U
|
|
||||||
# J+eLGw1qOfj+HVBl/ZQpfoLk7IoWlRQvRL1s7oirEaqPZUIWY/grXq9r6jDKAp3L
|
|
||||||
# ZdKQpPOnnogtqlU4f7/kLjEJhrrc98mrOWmVMK/BuFRAfQ5oDUMnVmCzAzLMjKfG
|
|
||||||
# cVW/iMew41yfhgKbwpfzm3LBr1Zv+pEBgcgW6onRLSAn3XHM0eNtz+AkxH6rRf6B
|
|
||||||
# 2mYhLEEGLapH8R1AMAo4BbVFOZR5kXcMCwowggg1MIIHHaADAgECAgIEuDANBgkq
|
|
||||||
# hkiG9w0BAQUFADCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0
|
|
||||||
# ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcx
|
|
||||||
# ODA2BgNVBAMTL1N0YXJ0Q29tIENsYXNzIDIgUHJpbWFyeSBJbnRlcm1lZGlhdGUg
|
|
||||||
# T2JqZWN0IENBMB4XDTExMTIwMzE1MzQxOVoXDTEzMTIwMzE0NTgwN1owgYwxIDAe
|
|
||||||
# BgNVBA0TFzU4MTc5Ni1HaDd4Zkp4a3hRU0lPNEUwMQswCQYDVQQGEwJERTEPMA0G
|
|
||||||
# A1UECBMGQmVybGluMQ8wDQYDVQQHEwZCZXJsaW4xFjAUBgNVBAMTDUphbm5pcyBM
|
|
||||||
# ZWlkZWwxITAfBgkqhkiG9w0BCQEWEmphbm5pc0BsZWlkZWwuaW5mbzCCAiIwDQYJ
|
|
||||||
# KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMcPeABYdN7nPq/AkZ/EkyUBGx/l2Yui
|
|
||||||
# Lfm8ZdLG0ulMb/kQL3fRY7sUjYPyn9S6PhqqlFnNoGHJvbbReCdUC9SIQYmOEjEA
|
|
||||||
# raHfb7MZU10NjO4U2DdGucj2zuO5tYxKizizOJF0e4yRQZVxpUGdvkW/+GLjCNK5
|
|
||||||
# L7mIv3Z1dagxDKHYZT74HXiS4VFUwHF1k36CwfM2vsetdm46bdgSwV+BCMmZICYT
|
|
||||||
# IJAS9UQHD7kP4rik3bFWjUx08NtYYFAVOd/HwBnemUmJe4j3IhZHr0k1+eDG8hDH
|
|
||||||
# KVvPgLJIoEjC4iMFk5GWsg5z2ngk0LLu3JZMtckHsnnmBPHQK8a3opUNd8hdMNJx
|
|
||||||
# gOwKjQt2JZSGUdIEFCKVDqj0FmdnDMPfwy+FNRtpBMl1sz78dUFhSrnM0D8NXrqa
|
|
||||||
# 4rG+2FoOXlmm1rb6AFtpjAKksHRpYcPk2DPGWp/1sWB+dUQkS3gOmwFzyqeTuXpT
|
|
||||||
# 0juqd3iAxOGx1VRFQ1VHLLf3AzV4wljBau26I+tu7iXxesVucSdsdQu293jwc2kN
|
|
||||||
# xK2JyHCoZH+RyytrwS0qw8t7rMOukU9gwP8mn3X6mgWlVUODMcHTULjSiCEtvyZ/
|
|
||||||
# aafcwjUbt4ReEcnmuZtWIha86MTCX7U7e+cnpWG4sIHPnvVTaz9rm8RyBkIxtFCB
|
|
||||||
# nQ3FnoQgyxeJAgMBAAGjggOdMIIDmTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIH
|
|
||||||
# gDAuBgNVHSUBAf8EJDAiBggrBgEFBQcDAwYKKwYBBAGCNwIBFQYKKwYBBAGCNwoD
|
|
||||||
# DTAdBgNVHQ4EFgQUWyCgrIWo8Ifvvm1/YTQIeMU9nc8wHwYDVR0jBBgwFoAU0E4P
|
|
||||||
# QJlsuEsZbzsouODjiAc0qrcwggIhBgNVHSAEggIYMIICFDCCAhAGCysGAQQBgbU3
|
|
||||||
# AQICMIIB/zAuBggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9s
|
|
||||||
# aWN5LnBkZjA0BggrBgEFBQcCARYoaHR0cDovL3d3dy5zdGFydHNzbC5jb20vaW50
|
|
||||||
# ZXJtZWRpYXRlLnBkZjCB9wYIKwYBBQUHAgIwgeowJxYgU3RhcnRDb20gQ2VydGlm
|
|
||||||
# aWNhdGlvbiBBdXRob3JpdHkwAwIBARqBvlRoaXMgY2VydGlmaWNhdGUgd2FzIGlz
|
|
||||||
# c3VlZCBhY2NvcmRpbmcgdG8gdGhlIENsYXNzIDIgVmFsaWRhdGlvbiByZXF1aXJl
|
|
||||||
# bWVudHMgb2YgdGhlIFN0YXJ0Q29tIENBIHBvbGljeSwgcmVsaWFuY2Ugb25seSBm
|
|
||||||
# b3IgdGhlIGludGVuZGVkIHB1cnBvc2UgaW4gY29tcGxpYW5jZSBvZiB0aGUgcmVs
|
|
||||||
# eWluZyBwYXJ0eSBvYmxpZ2F0aW9ucy4wgZwGCCsGAQUFBwICMIGPMCcWIFN0YXJ0
|
|
||||||
# Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MAMCAQIaZExpYWJpbGl0eSBhbmQg
|
|
||||||
# d2FycmFudGllcyBhcmUgbGltaXRlZCEgU2VlIHNlY3Rpb24gIkxlZ2FsIGFuZCBM
|
|
||||||
# aW1pdGF0aW9ucyIgb2YgdGhlIFN0YXJ0Q29tIENBIHBvbGljeS4wNgYDVR0fBC8w
|
|
||||||
# LTAroCmgJ4YlaHR0cDovL2NybC5zdGFydHNzbC5jb20vY3J0YzItY3JsLmNybDCB
|
|
||||||
# iQYIKwYBBQUHAQEEfTB7MDcGCCsGAQUFBzABhitodHRwOi8vb2NzcC5zdGFydHNz
|
|
||||||
# bC5jb20vc3ViL2NsYXNzMi9jb2RlL2NhMEAGCCsGAQUFBzAChjRodHRwOi8vYWlh
|
|
||||||
# LnN0YXJ0c3NsLmNvbS9jZXJ0cy9zdWIuY2xhc3MyLmNvZGUuY2EuY3J0MCMGA1Ud
|
|
||||||
# EgQcMBqGGGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tLzANBgkqhkiG9w0BAQUFAAOC
|
|
||||||
# AQEAhrzEV6zwoEtKjnFRhCsjwiPykVpo5Eiye77Ve801rQDiRKgSCCiW6g3HqedL
|
|
||||||
# OtaSs65Sj2pm3Viea4KR0TECLcbCTgsdaHqw2x1yXwWBQWZEaV6EB05lIwfr94P1
|
|
||||||
# SFpV43zkuc+bbmA3+CRK45LOcCNH5Tqq7VGTCAK5iM7tvHwFlbQRl+I6VEL2mjpF
|
|
||||||
# NsuRjDOVrv/9qw/a22YJ9R7Y1D0vUSs3IqZx2KMUaYDP7H2mSRxJO2nADQZBtriF
|
|
||||||
# gTyfD3lYV12MlIi5CQwe3QC6DrrfSMP33i5Wa/OFJiQ27WPxmScYVhiqozpImFT4
|
|
||||||
# PU9goiBv9RKXdgTmZE1PN0NQ5jGCAzUwggMxAgEBMIGTMIGMMQswCQYDVQQGEwJJ
|
|
||||||
# TDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0
|
|
||||||
# YWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3Mg
|
|
||||||
# MiBQcmltYXJ5IEludGVybWVkaWF0ZSBPYmplY3QgQ0ECAgS4MAkGBSsOAwIaBQCg
|
|
||||||
# eDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEE
|
|
||||||
# AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJ
|
|
||||||
# BDEWBBRVGw0FDSiaIi38dWteRUAg/9Pr6DANBgkqhkiG9w0BAQEFAASCAgCInvOZ
|
|
||||||
# FdaNFzbf6trmFDZKMojyx3UjKMCqNjHVBbuKY0qXwFC/ElYDV1ShJ2CBZbdurydO
|
|
||||||
# OQ6cIQ0KREOCwmX/xB49IlLHHUxNhEkVv7HGU3EKAFf9IBt9Yr7jikiR9cjIsfHK
|
|
||||||
# 4cjkoKJL7g28yEpLLkHt1eo37f1Ga9lDWEa5Zq3U5yX+IwXhrUBm1h8Xr033FhTR
|
|
||||||
# VEpuSz6LHtbrL/zgJnCzJ2ahjtJoYevdcWiNXffosJHFaSfYDDbiNsPRDH/1avmb
|
|
||||||
# 5j/7BhP8BcBaR6Fp8tFbNGIcWHHGcjqLMnTc4w13b7b4pDhypqElBa4+lCmwdvv9
|
|
||||||
# GydYtRgPz8GHeoBoKj30YBlMzRIfFYaIFGIC4Ai3UEXkuH9TxYohVbGm/W0Kl4Lb
|
|
||||||
# RJ1FwiVcLcTOJdgNId2vQvKc+jtNrjcg5SP9h2v/C4aTx8tyc6tE3TOPh2f9b8DL
|
|
||||||
# S+SbVArJpuJqrPTxDDoO1QNjTgLcdVYeZDE+r/NjaGZ6cMSd8db3EaG3ijD/0bud
|
|
||||||
# SItbm/OlNVbQOFRR76D+ZNgPcU5iNZ3bmvQQIg6aSB9MHUpIE/SeCkNl9YeVk1/1
|
|
||||||
# GFULgNMRmIYP4KLvu9ylh5Gu3hvD5VNhH6+FlXANwFy07uXks5uF8mfZVxVCnodG
|
|
||||||
# xkNCx+6PsrA5Z7WP4pXcmYnMn97npP/Q9EHJWw==
|
|
||||||
# SIG # End signature block
|
|
@ -1,36 +0,0 @@
|
|||||||
"""By using execfile(this_file, dict(__file__=this_file)) you will
|
|
||||||
activate this virtualenv environment.
|
|
||||||
|
|
||||||
This can be used when you must use an existing Python interpreter, not
|
|
||||||
the virtualenv bin/python
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
__file__
|
|
||||||
except NameError:
|
|
||||||
raise AssertionError(
|
|
||||||
"You must run this like execfile('path/to/activate_this.py', dict(__file__='path/to/activate_this.py'))"
|
|
||||||
)
|
|
||||||
import os
|
|
||||||
import site
|
|
||||||
import sys
|
|
||||||
|
|
||||||
old_os_path = os.environ.get("PATH", "")
|
|
||||||
os.environ["PATH"] = os.path.dirname(os.path.abspath(__file__)) + os.pathsep + old_os_path
|
|
||||||
base = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
if sys.platform == "win32":
|
|
||||||
site_packages = os.path.join(base, "Lib", "site-packages")
|
|
||||||
else:
|
|
||||||
site_packages = os.path.join(base, "lib", "python%s" % sys.version[:3], "site-packages")
|
|
||||||
prev_sys_path = list(sys.path)
|
|
||||||
|
|
||||||
site.addsitedir(site_packages)
|
|
||||||
sys.real_prefix = sys.prefix
|
|
||||||
sys.prefix = base
|
|
||||||
# Move the added items to the front of the path:
|
|
||||||
new_sys_path = []
|
|
||||||
for item in list(sys.path):
|
|
||||||
if item not in prev_sys_path:
|
|
||||||
new_sys_path.append(item)
|
|
||||||
sys.path.remove(item)
|
|
||||||
sys.path[:0] = new_sys_path
|
|
@ -1,163 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
|
||||||
#
|
|
||||||
# This file is part of Ansible
|
|
||||||
#
|
|
||||||
# Ansible is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# Ansible is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
########################################################
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
__requires__ = ['ansible']
|
|
||||||
try:
|
|
||||||
import pkg_resources
|
|
||||||
except Exception:
|
|
||||||
# Use pkg_resources to find the correct versions of libraries and set
|
|
||||||
# sys.path appropriately when there are multiversion installs. But we
|
|
||||||
# have code that better expresses the errors in the places where the code
|
|
||||||
# is actually used (the deps are optional for many code paths) so we don't
|
|
||||||
# want to fail here.
|
|
||||||
pass
|
|
||||||
|
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
import sys
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError
|
|
||||||
from ansible.module_utils._text import to_text
|
|
||||||
|
|
||||||
|
|
||||||
# Used for determining if the system is running a new enough python version
|
|
||||||
# and should only restrict on our documented minimum versions
|
|
||||||
_PY3_MIN = sys.version_info[:2] >= (3, 5)
|
|
||||||
_PY2_MIN = (2, 6) <= sys.version_info[:2] < (3,)
|
|
||||||
_PY_MIN = _PY3_MIN or _PY2_MIN
|
|
||||||
if not _PY_MIN:
|
|
||||||
raise SystemExit('ERROR: Ansible requires a minimum of Python2 version 2.6 or Python3 version 3.5. Current version: %s' % ''.join(sys.version.splitlines()))
|
|
||||||
|
|
||||||
|
|
||||||
class LastResort(object):
|
|
||||||
# OUTPUT OF LAST RESORT
|
|
||||||
def display(self, msg, log_only=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
def error(self, msg, wrap_text=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
|
||||||
display = LastResort()
|
|
||||||
|
|
||||||
try: # bad ANSIBLE_CONFIG or config options can force ugly stacktrace
|
|
||||||
import ansible.constants as C
|
|
||||||
from ansible.utils.display import Display
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
sys.exit(5)
|
|
||||||
|
|
||||||
cli = None
|
|
||||||
me = os.path.basename(sys.argv[0])
|
|
||||||
|
|
||||||
try:
|
|
||||||
display = Display()
|
|
||||||
display.debug("starting run")
|
|
||||||
|
|
||||||
sub = None
|
|
||||||
target = me.split('-')
|
|
||||||
if target[-1][0].isdigit():
|
|
||||||
# Remove any version or python version info as downstreams
|
|
||||||
# sometimes add that
|
|
||||||
target = target[:-1]
|
|
||||||
|
|
||||||
if len(target) > 1:
|
|
||||||
sub = target[1]
|
|
||||||
myclass = "%sCLI" % sub.capitalize()
|
|
||||||
elif target[0] == 'ansible':
|
|
||||||
sub = 'adhoc'
|
|
||||||
myclass = 'AdHocCLI'
|
|
||||||
else:
|
|
||||||
raise AnsibleError("Unknown Ansible alias: %s" % me)
|
|
||||||
|
|
||||||
try:
|
|
||||||
mycli = getattr(__import__("ansible.cli.%s" % sub, fromlist=[myclass]), myclass)
|
|
||||||
except ImportError as e:
|
|
||||||
# ImportError members have changed in py3
|
|
||||||
if 'msg' in dir(e):
|
|
||||||
msg = e.msg
|
|
||||||
else:
|
|
||||||
msg = e.message
|
|
||||||
if msg.endswith(' %s' % sub):
|
|
||||||
raise AnsibleError("Ansible sub-program not implemented: %s" % me)
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
try:
|
|
||||||
args = [to_text(a, errors='surrogate_or_strict') for a in sys.argv]
|
|
||||||
except UnicodeError:
|
|
||||||
display.error('Command line args are not in utf-8, unable to continue. Ansible currently only understands utf-8')
|
|
||||||
display.display(u"The full traceback was:\n\n%s" % to_text(traceback.format_exc()))
|
|
||||||
exit_code = 6
|
|
||||||
else:
|
|
||||||
cli = mycli(args)
|
|
||||||
cli.parse()
|
|
||||||
exit_code = cli.run()
|
|
||||||
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
cli.parser.print_help()
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 5
|
|
||||||
except AnsibleParserError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 4
|
|
||||||
# TQM takes care of these, but leaving comment to reserve the exit codes
|
|
||||||
# except AnsibleHostUnreachable as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 3
|
|
||||||
# except AnsibleHostFailed as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 2
|
|
||||||
except AnsibleError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 1
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
display.error("User interrupted execution")
|
|
||||||
exit_code = 99
|
|
||||||
except Exception as e:
|
|
||||||
if C.DEFAULT_DEBUG:
|
|
||||||
# Show raw stacktraces in debug mode, It also allow pdb to
|
|
||||||
# enter post mortem mode.
|
|
||||||
raise
|
|
||||||
have_cli_options = cli is not None and cli.options is not None
|
|
||||||
display.error("Unexpected Exception, this is probably a bug: %s" % to_text(e), wrap_text=False)
|
|
||||||
if not have_cli_options or have_cli_options and cli.options.verbosity > 2:
|
|
||||||
log_only = False
|
|
||||||
if hasattr(e, 'orig_exc'):
|
|
||||||
display.vvv('\nexception type: %s' % to_text(type(e.orig_exc)))
|
|
||||||
why = to_text(e.orig_exc)
|
|
||||||
if to_text(e) != why:
|
|
||||||
display.vvv('\noriginal msg: %s' % why)
|
|
||||||
else:
|
|
||||||
display.display("to see the full traceback, use -vvv")
|
|
||||||
log_only = True
|
|
||||||
display.display(u"the full traceback was:\n\n%s" % to_text(traceback.format_exc()), log_only=log_only)
|
|
||||||
exit_code = 250
|
|
||||||
finally:
|
|
||||||
# Remove ansible tmpdir
|
|
||||||
shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)
|
|
||||||
|
|
||||||
sys.exit(exit_code)
|
|
@ -1,163 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
|
||||||
#
|
|
||||||
# This file is part of Ansible
|
|
||||||
#
|
|
||||||
# Ansible is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# Ansible is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
########################################################
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
__requires__ = ['ansible']
|
|
||||||
try:
|
|
||||||
import pkg_resources
|
|
||||||
except Exception:
|
|
||||||
# Use pkg_resources to find the correct versions of libraries and set
|
|
||||||
# sys.path appropriately when there are multiversion installs. But we
|
|
||||||
# have code that better expresses the errors in the places where the code
|
|
||||||
# is actually used (the deps are optional for many code paths) so we don't
|
|
||||||
# want to fail here.
|
|
||||||
pass
|
|
||||||
|
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
import sys
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError
|
|
||||||
from ansible.module_utils._text import to_text
|
|
||||||
|
|
||||||
|
|
||||||
# Used for determining if the system is running a new enough python version
|
|
||||||
# and should only restrict on our documented minimum versions
|
|
||||||
_PY3_MIN = sys.version_info[:2] >= (3, 5)
|
|
||||||
_PY2_MIN = (2, 6) <= sys.version_info[:2] < (3,)
|
|
||||||
_PY_MIN = _PY3_MIN or _PY2_MIN
|
|
||||||
if not _PY_MIN:
|
|
||||||
raise SystemExit('ERROR: Ansible requires a minimum of Python2 version 2.6 or Python3 version 3.5. Current version: %s' % ''.join(sys.version.splitlines()))
|
|
||||||
|
|
||||||
|
|
||||||
class LastResort(object):
|
|
||||||
# OUTPUT OF LAST RESORT
|
|
||||||
def display(self, msg, log_only=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
def error(self, msg, wrap_text=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
|
||||||
display = LastResort()
|
|
||||||
|
|
||||||
try: # bad ANSIBLE_CONFIG or config options can force ugly stacktrace
|
|
||||||
import ansible.constants as C
|
|
||||||
from ansible.utils.display import Display
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
sys.exit(5)
|
|
||||||
|
|
||||||
cli = None
|
|
||||||
me = os.path.basename(sys.argv[0])
|
|
||||||
|
|
||||||
try:
|
|
||||||
display = Display()
|
|
||||||
display.debug("starting run")
|
|
||||||
|
|
||||||
sub = None
|
|
||||||
target = me.split('-')
|
|
||||||
if target[-1][0].isdigit():
|
|
||||||
# Remove any version or python version info as downstreams
|
|
||||||
# sometimes add that
|
|
||||||
target = target[:-1]
|
|
||||||
|
|
||||||
if len(target) > 1:
|
|
||||||
sub = target[1]
|
|
||||||
myclass = "%sCLI" % sub.capitalize()
|
|
||||||
elif target[0] == 'ansible':
|
|
||||||
sub = 'adhoc'
|
|
||||||
myclass = 'AdHocCLI'
|
|
||||||
else:
|
|
||||||
raise AnsibleError("Unknown Ansible alias: %s" % me)
|
|
||||||
|
|
||||||
try:
|
|
||||||
mycli = getattr(__import__("ansible.cli.%s" % sub, fromlist=[myclass]), myclass)
|
|
||||||
except ImportError as e:
|
|
||||||
# ImportError members have changed in py3
|
|
||||||
if 'msg' in dir(e):
|
|
||||||
msg = e.msg
|
|
||||||
else:
|
|
||||||
msg = e.message
|
|
||||||
if msg.endswith(' %s' % sub):
|
|
||||||
raise AnsibleError("Ansible sub-program not implemented: %s" % me)
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
try:
|
|
||||||
args = [to_text(a, errors='surrogate_or_strict') for a in sys.argv]
|
|
||||||
except UnicodeError:
|
|
||||||
display.error('Command line args are not in utf-8, unable to continue. Ansible currently only understands utf-8')
|
|
||||||
display.display(u"The full traceback was:\n\n%s" % to_text(traceback.format_exc()))
|
|
||||||
exit_code = 6
|
|
||||||
else:
|
|
||||||
cli = mycli(args)
|
|
||||||
cli.parse()
|
|
||||||
exit_code = cli.run()
|
|
||||||
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
cli.parser.print_help()
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 5
|
|
||||||
except AnsibleParserError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 4
|
|
||||||
# TQM takes care of these, but leaving comment to reserve the exit codes
|
|
||||||
# except AnsibleHostUnreachable as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 3
|
|
||||||
# except AnsibleHostFailed as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 2
|
|
||||||
except AnsibleError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 1
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
display.error("User interrupted execution")
|
|
||||||
exit_code = 99
|
|
||||||
except Exception as e:
|
|
||||||
if C.DEFAULT_DEBUG:
|
|
||||||
# Show raw stacktraces in debug mode, It also allow pdb to
|
|
||||||
# enter post mortem mode.
|
|
||||||
raise
|
|
||||||
have_cli_options = cli is not None and cli.options is not None
|
|
||||||
display.error("Unexpected Exception, this is probably a bug: %s" % to_text(e), wrap_text=False)
|
|
||||||
if not have_cli_options or have_cli_options and cli.options.verbosity > 2:
|
|
||||||
log_only = False
|
|
||||||
if hasattr(e, 'orig_exc'):
|
|
||||||
display.vvv('\nexception type: %s' % to_text(type(e.orig_exc)))
|
|
||||||
why = to_text(e.orig_exc)
|
|
||||||
if to_text(e) != why:
|
|
||||||
display.vvv('\noriginal msg: %s' % why)
|
|
||||||
else:
|
|
||||||
display.display("to see the full traceback, use -vvv")
|
|
||||||
log_only = True
|
|
||||||
display.display(u"the full traceback was:\n\n%s" % to_text(traceback.format_exc()), log_only=log_only)
|
|
||||||
exit_code = 250
|
|
||||||
finally:
|
|
||||||
# Remove ansible tmpdir
|
|
||||||
shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)
|
|
||||||
|
|
||||||
sys.exit(exit_code)
|
|
@ -1,328 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# Copyright: (c) 2017, Ansible Project
|
|
||||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
|
|
||||||
__metaclass__ = type
|
|
||||||
__requires__ = ['ansible']
|
|
||||||
|
|
||||||
try:
|
|
||||||
import pkg_resources
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
import fcntl
|
|
||||||
import hashlib
|
|
||||||
import os
|
|
||||||
import signal
|
|
||||||
import socket
|
|
||||||
import sys
|
|
||||||
import time
|
|
||||||
import traceback
|
|
||||||
import errno
|
|
||||||
import json
|
|
||||||
|
|
||||||
from contextlib import contextmanager
|
|
||||||
|
|
||||||
from ansible import constants as C
|
|
||||||
from ansible.module_utils._text import to_bytes, to_text
|
|
||||||
from ansible.module_utils.six import PY3
|
|
||||||
from ansible.module_utils.six.moves import cPickle, StringIO
|
|
||||||
from ansible.module_utils.connection import Connection, ConnectionError, send_data, recv_data
|
|
||||||
from ansible.module_utils.service import fork_process
|
|
||||||
from ansible.playbook.play_context import PlayContext
|
|
||||||
from ansible.plugins.loader import connection_loader
|
|
||||||
from ansible.utils.path import unfrackpath, makedirs_safe
|
|
||||||
from ansible.utils.display import Display
|
|
||||||
from ansible.utils.jsonrpc import JsonRpcServer
|
|
||||||
|
|
||||||
|
|
||||||
def read_stream(byte_stream):
|
|
||||||
size = int(byte_stream.readline().strip())
|
|
||||||
|
|
||||||
data = byte_stream.read(size)
|
|
||||||
if len(data) < size:
|
|
||||||
raise Exception("EOF found before data was complete")
|
|
||||||
|
|
||||||
data_hash = to_text(byte_stream.readline().strip())
|
|
||||||
if data_hash != hashlib.sha1(data).hexdigest():
|
|
||||||
raise Exception("Read {0} bytes, but data did not match checksum".format(size))
|
|
||||||
|
|
||||||
# restore escaped loose \r characters
|
|
||||||
data = data.replace(br'\r', b'\r')
|
|
||||||
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def file_lock(lock_path):
|
|
||||||
"""
|
|
||||||
Uses contextmanager to create and release a file lock based on the
|
|
||||||
given path. This allows us to create locks using `with file_lock()`
|
|
||||||
to prevent deadlocks related to failure to unlock properly.
|
|
||||||
"""
|
|
||||||
|
|
||||||
lock_fd = os.open(lock_path, os.O_RDWR | os.O_CREAT, 0o600)
|
|
||||||
fcntl.lockf(lock_fd, fcntl.LOCK_EX)
|
|
||||||
yield
|
|
||||||
fcntl.lockf(lock_fd, fcntl.LOCK_UN)
|
|
||||||
os.close(lock_fd)
|
|
||||||
|
|
||||||
|
|
||||||
class ConnectionProcess(object):
|
|
||||||
'''
|
|
||||||
The connection process wraps around a Connection object that manages
|
|
||||||
the connection to a remote device that persists over the playbook
|
|
||||||
'''
|
|
||||||
def __init__(self, fd, play_context, socket_path, original_path, ansible_playbook_pid=None):
|
|
||||||
self.play_context = play_context
|
|
||||||
self.socket_path = socket_path
|
|
||||||
self.original_path = original_path
|
|
||||||
|
|
||||||
self.fd = fd
|
|
||||||
self.exception = None
|
|
||||||
|
|
||||||
self.srv = JsonRpcServer()
|
|
||||||
self.sock = None
|
|
||||||
|
|
||||||
self.connection = None
|
|
||||||
self._ansible_playbook_pid = ansible_playbook_pid
|
|
||||||
|
|
||||||
def start(self, variables):
|
|
||||||
try:
|
|
||||||
messages = list()
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
messages.append('control socket path is %s' % self.socket_path)
|
|
||||||
|
|
||||||
# If this is a relative path (~ gets expanded later) then plug the
|
|
||||||
# key's path on to the directory we originally came from, so we can
|
|
||||||
# find it now that our cwd is /
|
|
||||||
if self.play_context.private_key_file and self.play_context.private_key_file[0] not in '~/':
|
|
||||||
self.play_context.private_key_file = os.path.join(self.original_path, self.play_context.private_key_file)
|
|
||||||
self.connection = connection_loader.get(self.play_context.connection, self.play_context, '/dev/null',
|
|
||||||
ansible_playbook_pid=self._ansible_playbook_pid)
|
|
||||||
self.connection.set_options(var_options=variables)
|
|
||||||
self.connection._connect()
|
|
||||||
|
|
||||||
self.connection._socket_path = self.socket_path
|
|
||||||
self.srv.register(self.connection)
|
|
||||||
messages.extend(sys.stdout.getvalue().splitlines())
|
|
||||||
messages.append('connection to remote device started successfully')
|
|
||||||
|
|
||||||
self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
|
||||||
self.sock.bind(self.socket_path)
|
|
||||||
self.sock.listen(1)
|
|
||||||
messages.append('local domain socket listeners started successfully')
|
|
||||||
except Exception as exc:
|
|
||||||
result['error'] = to_text(exc)
|
|
||||||
result['exception'] = traceback.format_exc()
|
|
||||||
finally:
|
|
||||||
result['messages'] = messages
|
|
||||||
self.fd.write(json.dumps(result))
|
|
||||||
self.fd.close()
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
try:
|
|
||||||
while self.connection.connected:
|
|
||||||
signal.signal(signal.SIGALRM, self.connect_timeout)
|
|
||||||
signal.signal(signal.SIGTERM, self.handler)
|
|
||||||
signal.alarm(self.connection.get_option('persistent_connect_timeout'))
|
|
||||||
|
|
||||||
self.exception = None
|
|
||||||
(s, addr) = self.sock.accept()
|
|
||||||
signal.alarm(0)
|
|
||||||
|
|
||||||
signal.signal(signal.SIGALRM, self.command_timeout)
|
|
||||||
while True:
|
|
||||||
data = recv_data(s)
|
|
||||||
if not data:
|
|
||||||
break
|
|
||||||
|
|
||||||
signal.alarm(self.connection.get_option('persistent_command_timeout'))
|
|
||||||
resp = self.srv.handle_request(data)
|
|
||||||
signal.alarm(0)
|
|
||||||
|
|
||||||
send_data(s, to_bytes(resp))
|
|
||||||
|
|
||||||
s.close()
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
# socket.accept() will raise EINTR if the socket.close() is called
|
|
||||||
if hasattr(e, 'errno'):
|
|
||||||
if e.errno != errno.EINTR:
|
|
||||||
self.exception = traceback.format_exc()
|
|
||||||
else:
|
|
||||||
self.exception = traceback.format_exc()
|
|
||||||
|
|
||||||
finally:
|
|
||||||
# allow time for any exception msg send over socket to receive at other end before shutting down
|
|
||||||
time.sleep(0.1)
|
|
||||||
|
|
||||||
# when done, close the connection properly and cleanup the socket file so it can be recreated
|
|
||||||
self.shutdown()
|
|
||||||
|
|
||||||
def connect_timeout(self, signum, frame):
|
|
||||||
msg = 'persistent connection idle timeout triggered, timeout value is %s secs.\nSee the timeout setting options in the Network Debug and ' \
|
|
||||||
'Troubleshooting Guide.' % self.connection.get_option('persistent_connect_timeout')
|
|
||||||
display.display(msg, log_only=True)
|
|
||||||
raise Exception(msg)
|
|
||||||
|
|
||||||
def command_timeout(self, signum, frame):
|
|
||||||
msg = 'command timeout triggered, timeout value is %s secs.\nSee the timeout setting options in the Network Debug and Troubleshooting Guide.'\
|
|
||||||
% self.connection.get_option('persistent_command_timeout')
|
|
||||||
display.display(msg, log_only=True)
|
|
||||||
raise Exception(msg)
|
|
||||||
|
|
||||||
def handler(self, signum, frame):
|
|
||||||
msg = 'signal handler called with signal %s.' % signum
|
|
||||||
display.display(msg, log_only=True)
|
|
||||||
raise Exception(msg)
|
|
||||||
|
|
||||||
def shutdown(self):
|
|
||||||
""" Shuts down the local domain socket
|
|
||||||
"""
|
|
||||||
lock_path = unfrackpath("%s/.ansible_pc_lock_%s" % os.path.split(self.socket_path))
|
|
||||||
if os.path.exists(self.socket_path):
|
|
||||||
try:
|
|
||||||
if self.sock:
|
|
||||||
self.sock.close()
|
|
||||||
if self.connection:
|
|
||||||
self.connection.close()
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
finally:
|
|
||||||
if os.path.exists(self.socket_path):
|
|
||||||
os.remove(self.socket_path)
|
|
||||||
setattr(self.connection, '_socket_path', None)
|
|
||||||
setattr(self.connection, '_connected', False)
|
|
||||||
|
|
||||||
if os.path.exists(lock_path):
|
|
||||||
os.remove(lock_path)
|
|
||||||
|
|
||||||
display.display('shutdown complete', log_only=True)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
""" Called to initiate the connect to the remote device
|
|
||||||
"""
|
|
||||||
rc = 0
|
|
||||||
result = {}
|
|
||||||
messages = list()
|
|
||||||
socket_path = None
|
|
||||||
|
|
||||||
# Need stdin as a byte stream
|
|
||||||
if PY3:
|
|
||||||
stdin = sys.stdin.buffer
|
|
||||||
else:
|
|
||||||
stdin = sys.stdin
|
|
||||||
|
|
||||||
# Note: update the below log capture code after Display.display() is refactored.
|
|
||||||
saved_stdout = sys.stdout
|
|
||||||
sys.stdout = StringIO()
|
|
||||||
|
|
||||||
try:
|
|
||||||
# read the play context data via stdin, which means depickling it
|
|
||||||
vars_data = read_stream(stdin)
|
|
||||||
init_data = read_stream(stdin)
|
|
||||||
|
|
||||||
if PY3:
|
|
||||||
pc_data = cPickle.loads(init_data, encoding='bytes')
|
|
||||||
variables = cPickle.loads(vars_data, encoding='bytes')
|
|
||||||
else:
|
|
||||||
pc_data = cPickle.loads(init_data)
|
|
||||||
variables = cPickle.loads(vars_data)
|
|
||||||
|
|
||||||
play_context = PlayContext()
|
|
||||||
play_context.deserialize(pc_data)
|
|
||||||
display.verbosity = play_context.verbosity
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
rc = 1
|
|
||||||
result.update({
|
|
||||||
'error': to_text(e),
|
|
||||||
'exception': traceback.format_exc()
|
|
||||||
})
|
|
||||||
|
|
||||||
if rc == 0:
|
|
||||||
ssh = connection_loader.get('ssh', class_only=True)
|
|
||||||
ansible_playbook_pid = sys.argv[1]
|
|
||||||
cp = ssh._create_control_path(play_context.remote_addr, play_context.port, play_context.remote_user, play_context.connection, ansible_playbook_pid)
|
|
||||||
|
|
||||||
# create the persistent connection dir if need be and create the paths
|
|
||||||
# which we will be using later
|
|
||||||
tmp_path = unfrackpath(C.PERSISTENT_CONTROL_PATH_DIR)
|
|
||||||
makedirs_safe(tmp_path)
|
|
||||||
|
|
||||||
socket_path = unfrackpath(cp % dict(directory=tmp_path))
|
|
||||||
lock_path = unfrackpath("%s/.ansible_pc_lock_%s" % os.path.split(socket_path))
|
|
||||||
|
|
||||||
with file_lock(lock_path):
|
|
||||||
if not os.path.exists(socket_path):
|
|
||||||
messages.append('local domain socket does not exist, starting it')
|
|
||||||
original_path = os.getcwd()
|
|
||||||
r, w = os.pipe()
|
|
||||||
pid = fork_process()
|
|
||||||
|
|
||||||
if pid == 0:
|
|
||||||
try:
|
|
||||||
os.close(r)
|
|
||||||
wfd = os.fdopen(w, 'w')
|
|
||||||
process = ConnectionProcess(wfd, play_context, socket_path, original_path, ansible_playbook_pid)
|
|
||||||
process.start(variables)
|
|
||||||
except Exception:
|
|
||||||
messages.append(traceback.format_exc())
|
|
||||||
rc = 1
|
|
||||||
|
|
||||||
if rc == 0:
|
|
||||||
process.run()
|
|
||||||
else:
|
|
||||||
process.shutdown()
|
|
||||||
|
|
||||||
sys.exit(rc)
|
|
||||||
|
|
||||||
else:
|
|
||||||
os.close(w)
|
|
||||||
rfd = os.fdopen(r, 'r')
|
|
||||||
data = json.loads(rfd.read())
|
|
||||||
messages.extend(data.pop('messages'))
|
|
||||||
result.update(data)
|
|
||||||
|
|
||||||
else:
|
|
||||||
messages.append('found existing local domain socket, using it!')
|
|
||||||
conn = Connection(socket_path)
|
|
||||||
conn.set_options(var_options=variables)
|
|
||||||
pc_data = to_text(init_data)
|
|
||||||
try:
|
|
||||||
messages.extend(conn.update_play_context(pc_data))
|
|
||||||
except Exception as exc:
|
|
||||||
# Only network_cli has update_play context, so missing this is
|
|
||||||
# not fatal e.g. netconf
|
|
||||||
if isinstance(exc, ConnectionError) and getattr(exc, 'code', None) == -32601:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
result.update({
|
|
||||||
'error': to_text(exc),
|
|
||||||
'exception': traceback.format_exc()
|
|
||||||
})
|
|
||||||
|
|
||||||
messages.append(sys.stdout.getvalue())
|
|
||||||
result.update({
|
|
||||||
'messages': messages,
|
|
||||||
'socket_path': socket_path
|
|
||||||
})
|
|
||||||
|
|
||||||
sys.stdout = saved_stdout
|
|
||||||
if 'exception' in result:
|
|
||||||
rc = 1
|
|
||||||
sys.stderr.write(json.dumps(result))
|
|
||||||
else:
|
|
||||||
rc = 0
|
|
||||||
sys.stdout.write(json.dumps(result))
|
|
||||||
|
|
||||||
sys.exit(rc)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
display = Display()
|
|
||||||
main()
|
|
@ -1,163 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
|
||||||
#
|
|
||||||
# This file is part of Ansible
|
|
||||||
#
|
|
||||||
# Ansible is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# Ansible is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
########################################################
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
__requires__ = ['ansible']
|
|
||||||
try:
|
|
||||||
import pkg_resources
|
|
||||||
except Exception:
|
|
||||||
# Use pkg_resources to find the correct versions of libraries and set
|
|
||||||
# sys.path appropriately when there are multiversion installs. But we
|
|
||||||
# have code that better expresses the errors in the places where the code
|
|
||||||
# is actually used (the deps are optional for many code paths) so we don't
|
|
||||||
# want to fail here.
|
|
||||||
pass
|
|
||||||
|
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
import sys
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError
|
|
||||||
from ansible.module_utils._text import to_text
|
|
||||||
|
|
||||||
|
|
||||||
# Used for determining if the system is running a new enough python version
|
|
||||||
# and should only restrict on our documented minimum versions
|
|
||||||
_PY3_MIN = sys.version_info[:2] >= (3, 5)
|
|
||||||
_PY2_MIN = (2, 6) <= sys.version_info[:2] < (3,)
|
|
||||||
_PY_MIN = _PY3_MIN or _PY2_MIN
|
|
||||||
if not _PY_MIN:
|
|
||||||
raise SystemExit('ERROR: Ansible requires a minimum of Python2 version 2.6 or Python3 version 3.5. Current version: %s' % ''.join(sys.version.splitlines()))
|
|
||||||
|
|
||||||
|
|
||||||
class LastResort(object):
|
|
||||||
# OUTPUT OF LAST RESORT
|
|
||||||
def display(self, msg, log_only=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
def error(self, msg, wrap_text=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
|
||||||
display = LastResort()
|
|
||||||
|
|
||||||
try: # bad ANSIBLE_CONFIG or config options can force ugly stacktrace
|
|
||||||
import ansible.constants as C
|
|
||||||
from ansible.utils.display import Display
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
sys.exit(5)
|
|
||||||
|
|
||||||
cli = None
|
|
||||||
me = os.path.basename(sys.argv[0])
|
|
||||||
|
|
||||||
try:
|
|
||||||
display = Display()
|
|
||||||
display.debug("starting run")
|
|
||||||
|
|
||||||
sub = None
|
|
||||||
target = me.split('-')
|
|
||||||
if target[-1][0].isdigit():
|
|
||||||
# Remove any version or python version info as downstreams
|
|
||||||
# sometimes add that
|
|
||||||
target = target[:-1]
|
|
||||||
|
|
||||||
if len(target) > 1:
|
|
||||||
sub = target[1]
|
|
||||||
myclass = "%sCLI" % sub.capitalize()
|
|
||||||
elif target[0] == 'ansible':
|
|
||||||
sub = 'adhoc'
|
|
||||||
myclass = 'AdHocCLI'
|
|
||||||
else:
|
|
||||||
raise AnsibleError("Unknown Ansible alias: %s" % me)
|
|
||||||
|
|
||||||
try:
|
|
||||||
mycli = getattr(__import__("ansible.cli.%s" % sub, fromlist=[myclass]), myclass)
|
|
||||||
except ImportError as e:
|
|
||||||
# ImportError members have changed in py3
|
|
||||||
if 'msg' in dir(e):
|
|
||||||
msg = e.msg
|
|
||||||
else:
|
|
||||||
msg = e.message
|
|
||||||
if msg.endswith(' %s' % sub):
|
|
||||||
raise AnsibleError("Ansible sub-program not implemented: %s" % me)
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
try:
|
|
||||||
args = [to_text(a, errors='surrogate_or_strict') for a in sys.argv]
|
|
||||||
except UnicodeError:
|
|
||||||
display.error('Command line args are not in utf-8, unable to continue. Ansible currently only understands utf-8')
|
|
||||||
display.display(u"The full traceback was:\n\n%s" % to_text(traceback.format_exc()))
|
|
||||||
exit_code = 6
|
|
||||||
else:
|
|
||||||
cli = mycli(args)
|
|
||||||
cli.parse()
|
|
||||||
exit_code = cli.run()
|
|
||||||
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
cli.parser.print_help()
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 5
|
|
||||||
except AnsibleParserError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 4
|
|
||||||
# TQM takes care of these, but leaving comment to reserve the exit codes
|
|
||||||
# except AnsibleHostUnreachable as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 3
|
|
||||||
# except AnsibleHostFailed as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 2
|
|
||||||
except AnsibleError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 1
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
display.error("User interrupted execution")
|
|
||||||
exit_code = 99
|
|
||||||
except Exception as e:
|
|
||||||
if C.DEFAULT_DEBUG:
|
|
||||||
# Show raw stacktraces in debug mode, It also allow pdb to
|
|
||||||
# enter post mortem mode.
|
|
||||||
raise
|
|
||||||
have_cli_options = cli is not None and cli.options is not None
|
|
||||||
display.error("Unexpected Exception, this is probably a bug: %s" % to_text(e), wrap_text=False)
|
|
||||||
if not have_cli_options or have_cli_options and cli.options.verbosity > 2:
|
|
||||||
log_only = False
|
|
||||||
if hasattr(e, 'orig_exc'):
|
|
||||||
display.vvv('\nexception type: %s' % to_text(type(e.orig_exc)))
|
|
||||||
why = to_text(e.orig_exc)
|
|
||||||
if to_text(e) != why:
|
|
||||||
display.vvv('\noriginal msg: %s' % why)
|
|
||||||
else:
|
|
||||||
display.display("to see the full traceback, use -vvv")
|
|
||||||
log_only = True
|
|
||||||
display.display(u"the full traceback was:\n\n%s" % to_text(traceback.format_exc()), log_only=log_only)
|
|
||||||
exit_code = 250
|
|
||||||
finally:
|
|
||||||
# Remove ansible tmpdir
|
|
||||||
shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)
|
|
||||||
|
|
||||||
sys.exit(exit_code)
|
|
@ -1,163 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
|
||||||
#
|
|
||||||
# This file is part of Ansible
|
|
||||||
#
|
|
||||||
# Ansible is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# Ansible is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
########################################################
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
__requires__ = ['ansible']
|
|
||||||
try:
|
|
||||||
import pkg_resources
|
|
||||||
except Exception:
|
|
||||||
# Use pkg_resources to find the correct versions of libraries and set
|
|
||||||
# sys.path appropriately when there are multiversion installs. But we
|
|
||||||
# have code that better expresses the errors in the places where the code
|
|
||||||
# is actually used (the deps are optional for many code paths) so we don't
|
|
||||||
# want to fail here.
|
|
||||||
pass
|
|
||||||
|
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
import sys
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError
|
|
||||||
from ansible.module_utils._text import to_text
|
|
||||||
|
|
||||||
|
|
||||||
# Used for determining if the system is running a new enough python version
|
|
||||||
# and should only restrict on our documented minimum versions
|
|
||||||
_PY3_MIN = sys.version_info[:2] >= (3, 5)
|
|
||||||
_PY2_MIN = (2, 6) <= sys.version_info[:2] < (3,)
|
|
||||||
_PY_MIN = _PY3_MIN or _PY2_MIN
|
|
||||||
if not _PY_MIN:
|
|
||||||
raise SystemExit('ERROR: Ansible requires a minimum of Python2 version 2.6 or Python3 version 3.5. Current version: %s' % ''.join(sys.version.splitlines()))
|
|
||||||
|
|
||||||
|
|
||||||
class LastResort(object):
|
|
||||||
# OUTPUT OF LAST RESORT
|
|
||||||
def display(self, msg, log_only=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
def error(self, msg, wrap_text=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
|
||||||
display = LastResort()
|
|
||||||
|
|
||||||
try: # bad ANSIBLE_CONFIG or config options can force ugly stacktrace
|
|
||||||
import ansible.constants as C
|
|
||||||
from ansible.utils.display import Display
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
sys.exit(5)
|
|
||||||
|
|
||||||
cli = None
|
|
||||||
me = os.path.basename(sys.argv[0])
|
|
||||||
|
|
||||||
try:
|
|
||||||
display = Display()
|
|
||||||
display.debug("starting run")
|
|
||||||
|
|
||||||
sub = None
|
|
||||||
target = me.split('-')
|
|
||||||
if target[-1][0].isdigit():
|
|
||||||
# Remove any version or python version info as downstreams
|
|
||||||
# sometimes add that
|
|
||||||
target = target[:-1]
|
|
||||||
|
|
||||||
if len(target) > 1:
|
|
||||||
sub = target[1]
|
|
||||||
myclass = "%sCLI" % sub.capitalize()
|
|
||||||
elif target[0] == 'ansible':
|
|
||||||
sub = 'adhoc'
|
|
||||||
myclass = 'AdHocCLI'
|
|
||||||
else:
|
|
||||||
raise AnsibleError("Unknown Ansible alias: %s" % me)
|
|
||||||
|
|
||||||
try:
|
|
||||||
mycli = getattr(__import__("ansible.cli.%s" % sub, fromlist=[myclass]), myclass)
|
|
||||||
except ImportError as e:
|
|
||||||
# ImportError members have changed in py3
|
|
||||||
if 'msg' in dir(e):
|
|
||||||
msg = e.msg
|
|
||||||
else:
|
|
||||||
msg = e.message
|
|
||||||
if msg.endswith(' %s' % sub):
|
|
||||||
raise AnsibleError("Ansible sub-program not implemented: %s" % me)
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
try:
|
|
||||||
args = [to_text(a, errors='surrogate_or_strict') for a in sys.argv]
|
|
||||||
except UnicodeError:
|
|
||||||
display.error('Command line args are not in utf-8, unable to continue. Ansible currently only understands utf-8')
|
|
||||||
display.display(u"The full traceback was:\n\n%s" % to_text(traceback.format_exc()))
|
|
||||||
exit_code = 6
|
|
||||||
else:
|
|
||||||
cli = mycli(args)
|
|
||||||
cli.parse()
|
|
||||||
exit_code = cli.run()
|
|
||||||
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
cli.parser.print_help()
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 5
|
|
||||||
except AnsibleParserError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 4
|
|
||||||
# TQM takes care of these, but leaving comment to reserve the exit codes
|
|
||||||
# except AnsibleHostUnreachable as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 3
|
|
||||||
# except AnsibleHostFailed as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 2
|
|
||||||
except AnsibleError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 1
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
display.error("User interrupted execution")
|
|
||||||
exit_code = 99
|
|
||||||
except Exception as e:
|
|
||||||
if C.DEFAULT_DEBUG:
|
|
||||||
# Show raw stacktraces in debug mode, It also allow pdb to
|
|
||||||
# enter post mortem mode.
|
|
||||||
raise
|
|
||||||
have_cli_options = cli is not None and cli.options is not None
|
|
||||||
display.error("Unexpected Exception, this is probably a bug: %s" % to_text(e), wrap_text=False)
|
|
||||||
if not have_cli_options or have_cli_options and cli.options.verbosity > 2:
|
|
||||||
log_only = False
|
|
||||||
if hasattr(e, 'orig_exc'):
|
|
||||||
display.vvv('\nexception type: %s' % to_text(type(e.orig_exc)))
|
|
||||||
why = to_text(e.orig_exc)
|
|
||||||
if to_text(e) != why:
|
|
||||||
display.vvv('\noriginal msg: %s' % why)
|
|
||||||
else:
|
|
||||||
display.display("to see the full traceback, use -vvv")
|
|
||||||
log_only = True
|
|
||||||
display.display(u"the full traceback was:\n\n%s" % to_text(traceback.format_exc()), log_only=log_only)
|
|
||||||
exit_code = 250
|
|
||||||
finally:
|
|
||||||
# Remove ansible tmpdir
|
|
||||||
shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)
|
|
||||||
|
|
||||||
sys.exit(exit_code)
|
|
@ -1,163 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
|
||||||
#
|
|
||||||
# This file is part of Ansible
|
|
||||||
#
|
|
||||||
# Ansible is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# Ansible is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
########################################################
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
__requires__ = ['ansible']
|
|
||||||
try:
|
|
||||||
import pkg_resources
|
|
||||||
except Exception:
|
|
||||||
# Use pkg_resources to find the correct versions of libraries and set
|
|
||||||
# sys.path appropriately when there are multiversion installs. But we
|
|
||||||
# have code that better expresses the errors in the places where the code
|
|
||||||
# is actually used (the deps are optional for many code paths) so we don't
|
|
||||||
# want to fail here.
|
|
||||||
pass
|
|
||||||
|
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
import sys
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError
|
|
||||||
from ansible.module_utils._text import to_text
|
|
||||||
|
|
||||||
|
|
||||||
# Used for determining if the system is running a new enough python version
|
|
||||||
# and should only restrict on our documented minimum versions
|
|
||||||
_PY3_MIN = sys.version_info[:2] >= (3, 5)
|
|
||||||
_PY2_MIN = (2, 6) <= sys.version_info[:2] < (3,)
|
|
||||||
_PY_MIN = _PY3_MIN or _PY2_MIN
|
|
||||||
if not _PY_MIN:
|
|
||||||
raise SystemExit('ERROR: Ansible requires a minimum of Python2 version 2.6 or Python3 version 3.5. Current version: %s' % ''.join(sys.version.splitlines()))
|
|
||||||
|
|
||||||
|
|
||||||
class LastResort(object):
|
|
||||||
# OUTPUT OF LAST RESORT
|
|
||||||
def display(self, msg, log_only=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
def error(self, msg, wrap_text=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
|
||||||
display = LastResort()
|
|
||||||
|
|
||||||
try: # bad ANSIBLE_CONFIG or config options can force ugly stacktrace
|
|
||||||
import ansible.constants as C
|
|
||||||
from ansible.utils.display import Display
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
sys.exit(5)
|
|
||||||
|
|
||||||
cli = None
|
|
||||||
me = os.path.basename(sys.argv[0])
|
|
||||||
|
|
||||||
try:
|
|
||||||
display = Display()
|
|
||||||
display.debug("starting run")
|
|
||||||
|
|
||||||
sub = None
|
|
||||||
target = me.split('-')
|
|
||||||
if target[-1][0].isdigit():
|
|
||||||
# Remove any version or python version info as downstreams
|
|
||||||
# sometimes add that
|
|
||||||
target = target[:-1]
|
|
||||||
|
|
||||||
if len(target) > 1:
|
|
||||||
sub = target[1]
|
|
||||||
myclass = "%sCLI" % sub.capitalize()
|
|
||||||
elif target[0] == 'ansible':
|
|
||||||
sub = 'adhoc'
|
|
||||||
myclass = 'AdHocCLI'
|
|
||||||
else:
|
|
||||||
raise AnsibleError("Unknown Ansible alias: %s" % me)
|
|
||||||
|
|
||||||
try:
|
|
||||||
mycli = getattr(__import__("ansible.cli.%s" % sub, fromlist=[myclass]), myclass)
|
|
||||||
except ImportError as e:
|
|
||||||
# ImportError members have changed in py3
|
|
||||||
if 'msg' in dir(e):
|
|
||||||
msg = e.msg
|
|
||||||
else:
|
|
||||||
msg = e.message
|
|
||||||
if msg.endswith(' %s' % sub):
|
|
||||||
raise AnsibleError("Ansible sub-program not implemented: %s" % me)
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
try:
|
|
||||||
args = [to_text(a, errors='surrogate_or_strict') for a in sys.argv]
|
|
||||||
except UnicodeError:
|
|
||||||
display.error('Command line args are not in utf-8, unable to continue. Ansible currently only understands utf-8')
|
|
||||||
display.display(u"The full traceback was:\n\n%s" % to_text(traceback.format_exc()))
|
|
||||||
exit_code = 6
|
|
||||||
else:
|
|
||||||
cli = mycli(args)
|
|
||||||
cli.parse()
|
|
||||||
exit_code = cli.run()
|
|
||||||
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
cli.parser.print_help()
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 5
|
|
||||||
except AnsibleParserError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 4
|
|
||||||
# TQM takes care of these, but leaving comment to reserve the exit codes
|
|
||||||
# except AnsibleHostUnreachable as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 3
|
|
||||||
# except AnsibleHostFailed as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 2
|
|
||||||
except AnsibleError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 1
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
display.error("User interrupted execution")
|
|
||||||
exit_code = 99
|
|
||||||
except Exception as e:
|
|
||||||
if C.DEFAULT_DEBUG:
|
|
||||||
# Show raw stacktraces in debug mode, It also allow pdb to
|
|
||||||
# enter post mortem mode.
|
|
||||||
raise
|
|
||||||
have_cli_options = cli is not None and cli.options is not None
|
|
||||||
display.error("Unexpected Exception, this is probably a bug: %s" % to_text(e), wrap_text=False)
|
|
||||||
if not have_cli_options or have_cli_options and cli.options.verbosity > 2:
|
|
||||||
log_only = False
|
|
||||||
if hasattr(e, 'orig_exc'):
|
|
||||||
display.vvv('\nexception type: %s' % to_text(type(e.orig_exc)))
|
|
||||||
why = to_text(e.orig_exc)
|
|
||||||
if to_text(e) != why:
|
|
||||||
display.vvv('\noriginal msg: %s' % why)
|
|
||||||
else:
|
|
||||||
display.display("to see the full traceback, use -vvv")
|
|
||||||
log_only = True
|
|
||||||
display.display(u"the full traceback was:\n\n%s" % to_text(traceback.format_exc()), log_only=log_only)
|
|
||||||
exit_code = 250
|
|
||||||
finally:
|
|
||||||
# Remove ansible tmpdir
|
|
||||||
shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)
|
|
||||||
|
|
||||||
sys.exit(exit_code)
|
|
@ -1,163 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
|
||||||
#
|
|
||||||
# This file is part of Ansible
|
|
||||||
#
|
|
||||||
# Ansible is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# Ansible is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
########################################################
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
__requires__ = ['ansible']
|
|
||||||
try:
|
|
||||||
import pkg_resources
|
|
||||||
except Exception:
|
|
||||||
# Use pkg_resources to find the correct versions of libraries and set
|
|
||||||
# sys.path appropriately when there are multiversion installs. But we
|
|
||||||
# have code that better expresses the errors in the places where the code
|
|
||||||
# is actually used (the deps are optional for many code paths) so we don't
|
|
||||||
# want to fail here.
|
|
||||||
pass
|
|
||||||
|
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
import sys
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError
|
|
||||||
from ansible.module_utils._text import to_text
|
|
||||||
|
|
||||||
|
|
||||||
# Used for determining if the system is running a new enough python version
|
|
||||||
# and should only restrict on our documented minimum versions
|
|
||||||
_PY3_MIN = sys.version_info[:2] >= (3, 5)
|
|
||||||
_PY2_MIN = (2, 6) <= sys.version_info[:2] < (3,)
|
|
||||||
_PY_MIN = _PY3_MIN or _PY2_MIN
|
|
||||||
if not _PY_MIN:
|
|
||||||
raise SystemExit('ERROR: Ansible requires a minimum of Python2 version 2.6 or Python3 version 3.5. Current version: %s' % ''.join(sys.version.splitlines()))
|
|
||||||
|
|
||||||
|
|
||||||
class LastResort(object):
|
|
||||||
# OUTPUT OF LAST RESORT
|
|
||||||
def display(self, msg, log_only=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
def error(self, msg, wrap_text=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
|
||||||
display = LastResort()
|
|
||||||
|
|
||||||
try: # bad ANSIBLE_CONFIG or config options can force ugly stacktrace
|
|
||||||
import ansible.constants as C
|
|
||||||
from ansible.utils.display import Display
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
sys.exit(5)
|
|
||||||
|
|
||||||
cli = None
|
|
||||||
me = os.path.basename(sys.argv[0])
|
|
||||||
|
|
||||||
try:
|
|
||||||
display = Display()
|
|
||||||
display.debug("starting run")
|
|
||||||
|
|
||||||
sub = None
|
|
||||||
target = me.split('-')
|
|
||||||
if target[-1][0].isdigit():
|
|
||||||
# Remove any version or python version info as downstreams
|
|
||||||
# sometimes add that
|
|
||||||
target = target[:-1]
|
|
||||||
|
|
||||||
if len(target) > 1:
|
|
||||||
sub = target[1]
|
|
||||||
myclass = "%sCLI" % sub.capitalize()
|
|
||||||
elif target[0] == 'ansible':
|
|
||||||
sub = 'adhoc'
|
|
||||||
myclass = 'AdHocCLI'
|
|
||||||
else:
|
|
||||||
raise AnsibleError("Unknown Ansible alias: %s" % me)
|
|
||||||
|
|
||||||
try:
|
|
||||||
mycli = getattr(__import__("ansible.cli.%s" % sub, fromlist=[myclass]), myclass)
|
|
||||||
except ImportError as e:
|
|
||||||
# ImportError members have changed in py3
|
|
||||||
if 'msg' in dir(e):
|
|
||||||
msg = e.msg
|
|
||||||
else:
|
|
||||||
msg = e.message
|
|
||||||
if msg.endswith(' %s' % sub):
|
|
||||||
raise AnsibleError("Ansible sub-program not implemented: %s" % me)
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
try:
|
|
||||||
args = [to_text(a, errors='surrogate_or_strict') for a in sys.argv]
|
|
||||||
except UnicodeError:
|
|
||||||
display.error('Command line args are not in utf-8, unable to continue. Ansible currently only understands utf-8')
|
|
||||||
display.display(u"The full traceback was:\n\n%s" % to_text(traceback.format_exc()))
|
|
||||||
exit_code = 6
|
|
||||||
else:
|
|
||||||
cli = mycli(args)
|
|
||||||
cli.parse()
|
|
||||||
exit_code = cli.run()
|
|
||||||
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
cli.parser.print_help()
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 5
|
|
||||||
except AnsibleParserError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 4
|
|
||||||
# TQM takes care of these, but leaving comment to reserve the exit codes
|
|
||||||
# except AnsibleHostUnreachable as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 3
|
|
||||||
# except AnsibleHostFailed as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 2
|
|
||||||
except AnsibleError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 1
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
display.error("User interrupted execution")
|
|
||||||
exit_code = 99
|
|
||||||
except Exception as e:
|
|
||||||
if C.DEFAULT_DEBUG:
|
|
||||||
# Show raw stacktraces in debug mode, It also allow pdb to
|
|
||||||
# enter post mortem mode.
|
|
||||||
raise
|
|
||||||
have_cli_options = cli is not None and cli.options is not None
|
|
||||||
display.error("Unexpected Exception, this is probably a bug: %s" % to_text(e), wrap_text=False)
|
|
||||||
if not have_cli_options or have_cli_options and cli.options.verbosity > 2:
|
|
||||||
log_only = False
|
|
||||||
if hasattr(e, 'orig_exc'):
|
|
||||||
display.vvv('\nexception type: %s' % to_text(type(e.orig_exc)))
|
|
||||||
why = to_text(e.orig_exc)
|
|
||||||
if to_text(e) != why:
|
|
||||||
display.vvv('\noriginal msg: %s' % why)
|
|
||||||
else:
|
|
||||||
display.display("to see the full traceback, use -vvv")
|
|
||||||
log_only = True
|
|
||||||
display.display(u"the full traceback was:\n\n%s" % to_text(traceback.format_exc()), log_only=log_only)
|
|
||||||
exit_code = 250
|
|
||||||
finally:
|
|
||||||
# Remove ansible tmpdir
|
|
||||||
shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)
|
|
||||||
|
|
||||||
sys.exit(exit_code)
|
|
@ -1,12 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# EASY-INSTALL-ENTRY-SCRIPT: 'ansible-later','console_scripts','ansible-later'
|
|
||||||
__requires__ = 'ansible-later'
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
from pkg_resources import load_entry_point
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(
|
|
||||||
load_entry_point('ansible-later', 'console_scripts', 'ansible-later')()
|
|
||||||
)
|
|
@ -1,163 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
|
||||||
#
|
|
||||||
# This file is part of Ansible
|
|
||||||
#
|
|
||||||
# Ansible is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# Ansible is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
########################################################
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
__requires__ = ['ansible']
|
|
||||||
try:
|
|
||||||
import pkg_resources
|
|
||||||
except Exception:
|
|
||||||
# Use pkg_resources to find the correct versions of libraries and set
|
|
||||||
# sys.path appropriately when there are multiversion installs. But we
|
|
||||||
# have code that better expresses the errors in the places where the code
|
|
||||||
# is actually used (the deps are optional for many code paths) so we don't
|
|
||||||
# want to fail here.
|
|
||||||
pass
|
|
||||||
|
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
import sys
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError
|
|
||||||
from ansible.module_utils._text import to_text
|
|
||||||
|
|
||||||
|
|
||||||
# Used for determining if the system is running a new enough python version
|
|
||||||
# and should only restrict on our documented minimum versions
|
|
||||||
_PY3_MIN = sys.version_info[:2] >= (3, 5)
|
|
||||||
_PY2_MIN = (2, 6) <= sys.version_info[:2] < (3,)
|
|
||||||
_PY_MIN = _PY3_MIN or _PY2_MIN
|
|
||||||
if not _PY_MIN:
|
|
||||||
raise SystemExit('ERROR: Ansible requires a minimum of Python2 version 2.6 or Python3 version 3.5. Current version: %s' % ''.join(sys.version.splitlines()))
|
|
||||||
|
|
||||||
|
|
||||||
class LastResort(object):
|
|
||||||
# OUTPUT OF LAST RESORT
|
|
||||||
def display(self, msg, log_only=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
def error(self, msg, wrap_text=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
|
||||||
display = LastResort()
|
|
||||||
|
|
||||||
try: # bad ANSIBLE_CONFIG or config options can force ugly stacktrace
|
|
||||||
import ansible.constants as C
|
|
||||||
from ansible.utils.display import Display
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
sys.exit(5)
|
|
||||||
|
|
||||||
cli = None
|
|
||||||
me = os.path.basename(sys.argv[0])
|
|
||||||
|
|
||||||
try:
|
|
||||||
display = Display()
|
|
||||||
display.debug("starting run")
|
|
||||||
|
|
||||||
sub = None
|
|
||||||
target = me.split('-')
|
|
||||||
if target[-1][0].isdigit():
|
|
||||||
# Remove any version or python version info as downstreams
|
|
||||||
# sometimes add that
|
|
||||||
target = target[:-1]
|
|
||||||
|
|
||||||
if len(target) > 1:
|
|
||||||
sub = target[1]
|
|
||||||
myclass = "%sCLI" % sub.capitalize()
|
|
||||||
elif target[0] == 'ansible':
|
|
||||||
sub = 'adhoc'
|
|
||||||
myclass = 'AdHocCLI'
|
|
||||||
else:
|
|
||||||
raise AnsibleError("Unknown Ansible alias: %s" % me)
|
|
||||||
|
|
||||||
try:
|
|
||||||
mycli = getattr(__import__("ansible.cli.%s" % sub, fromlist=[myclass]), myclass)
|
|
||||||
except ImportError as e:
|
|
||||||
# ImportError members have changed in py3
|
|
||||||
if 'msg' in dir(e):
|
|
||||||
msg = e.msg
|
|
||||||
else:
|
|
||||||
msg = e.message
|
|
||||||
if msg.endswith(' %s' % sub):
|
|
||||||
raise AnsibleError("Ansible sub-program not implemented: %s" % me)
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
try:
|
|
||||||
args = [to_text(a, errors='surrogate_or_strict') for a in sys.argv]
|
|
||||||
except UnicodeError:
|
|
||||||
display.error('Command line args are not in utf-8, unable to continue. Ansible currently only understands utf-8')
|
|
||||||
display.display(u"The full traceback was:\n\n%s" % to_text(traceback.format_exc()))
|
|
||||||
exit_code = 6
|
|
||||||
else:
|
|
||||||
cli = mycli(args)
|
|
||||||
cli.parse()
|
|
||||||
exit_code = cli.run()
|
|
||||||
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
cli.parser.print_help()
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 5
|
|
||||||
except AnsibleParserError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 4
|
|
||||||
# TQM takes care of these, but leaving comment to reserve the exit codes
|
|
||||||
# except AnsibleHostUnreachable as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 3
|
|
||||||
# except AnsibleHostFailed as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 2
|
|
||||||
except AnsibleError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 1
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
display.error("User interrupted execution")
|
|
||||||
exit_code = 99
|
|
||||||
except Exception as e:
|
|
||||||
if C.DEFAULT_DEBUG:
|
|
||||||
# Show raw stacktraces in debug mode, It also allow pdb to
|
|
||||||
# enter post mortem mode.
|
|
||||||
raise
|
|
||||||
have_cli_options = cli is not None and cli.options is not None
|
|
||||||
display.error("Unexpected Exception, this is probably a bug: %s" % to_text(e), wrap_text=False)
|
|
||||||
if not have_cli_options or have_cli_options and cli.options.verbosity > 2:
|
|
||||||
log_only = False
|
|
||||||
if hasattr(e, 'orig_exc'):
|
|
||||||
display.vvv('\nexception type: %s' % to_text(type(e.orig_exc)))
|
|
||||||
why = to_text(e.orig_exc)
|
|
||||||
if to_text(e) != why:
|
|
||||||
display.vvv('\noriginal msg: %s' % why)
|
|
||||||
else:
|
|
||||||
display.display("to see the full traceback, use -vvv")
|
|
||||||
log_only = True
|
|
||||||
display.display(u"the full traceback was:\n\n%s" % to_text(traceback.format_exc()), log_only=log_only)
|
|
||||||
exit_code = 250
|
|
||||||
finally:
|
|
||||||
# Remove ansible tmpdir
|
|
||||||
shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)
|
|
||||||
|
|
||||||
sys.exit(exit_code)
|
|
@ -1,163 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
|
||||||
#
|
|
||||||
# This file is part of Ansible
|
|
||||||
#
|
|
||||||
# Ansible is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# Ansible is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
########################################################
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
__requires__ = ['ansible']
|
|
||||||
try:
|
|
||||||
import pkg_resources
|
|
||||||
except Exception:
|
|
||||||
# Use pkg_resources to find the correct versions of libraries and set
|
|
||||||
# sys.path appropriately when there are multiversion installs. But we
|
|
||||||
# have code that better expresses the errors in the places where the code
|
|
||||||
# is actually used (the deps are optional for many code paths) so we don't
|
|
||||||
# want to fail here.
|
|
||||||
pass
|
|
||||||
|
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
import sys
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError
|
|
||||||
from ansible.module_utils._text import to_text
|
|
||||||
|
|
||||||
|
|
||||||
# Used for determining if the system is running a new enough python version
|
|
||||||
# and should only restrict on our documented minimum versions
|
|
||||||
_PY3_MIN = sys.version_info[:2] >= (3, 5)
|
|
||||||
_PY2_MIN = (2, 6) <= sys.version_info[:2] < (3,)
|
|
||||||
_PY_MIN = _PY3_MIN or _PY2_MIN
|
|
||||||
if not _PY_MIN:
|
|
||||||
raise SystemExit('ERROR: Ansible requires a minimum of Python2 version 2.6 or Python3 version 3.5. Current version: %s' % ''.join(sys.version.splitlines()))
|
|
||||||
|
|
||||||
|
|
||||||
class LastResort(object):
|
|
||||||
# OUTPUT OF LAST RESORT
|
|
||||||
def display(self, msg, log_only=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
def error(self, msg, wrap_text=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
|
||||||
display = LastResort()
|
|
||||||
|
|
||||||
try: # bad ANSIBLE_CONFIG or config options can force ugly stacktrace
|
|
||||||
import ansible.constants as C
|
|
||||||
from ansible.utils.display import Display
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
sys.exit(5)
|
|
||||||
|
|
||||||
cli = None
|
|
||||||
me = os.path.basename(sys.argv[0])
|
|
||||||
|
|
||||||
try:
|
|
||||||
display = Display()
|
|
||||||
display.debug("starting run")
|
|
||||||
|
|
||||||
sub = None
|
|
||||||
target = me.split('-')
|
|
||||||
if target[-1][0].isdigit():
|
|
||||||
# Remove any version or python version info as downstreams
|
|
||||||
# sometimes add that
|
|
||||||
target = target[:-1]
|
|
||||||
|
|
||||||
if len(target) > 1:
|
|
||||||
sub = target[1]
|
|
||||||
myclass = "%sCLI" % sub.capitalize()
|
|
||||||
elif target[0] == 'ansible':
|
|
||||||
sub = 'adhoc'
|
|
||||||
myclass = 'AdHocCLI'
|
|
||||||
else:
|
|
||||||
raise AnsibleError("Unknown Ansible alias: %s" % me)
|
|
||||||
|
|
||||||
try:
|
|
||||||
mycli = getattr(__import__("ansible.cli.%s" % sub, fromlist=[myclass]), myclass)
|
|
||||||
except ImportError as e:
|
|
||||||
# ImportError members have changed in py3
|
|
||||||
if 'msg' in dir(e):
|
|
||||||
msg = e.msg
|
|
||||||
else:
|
|
||||||
msg = e.message
|
|
||||||
if msg.endswith(' %s' % sub):
|
|
||||||
raise AnsibleError("Ansible sub-program not implemented: %s" % me)
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
try:
|
|
||||||
args = [to_text(a, errors='surrogate_or_strict') for a in sys.argv]
|
|
||||||
except UnicodeError:
|
|
||||||
display.error('Command line args are not in utf-8, unable to continue. Ansible currently only understands utf-8')
|
|
||||||
display.display(u"The full traceback was:\n\n%s" % to_text(traceback.format_exc()))
|
|
||||||
exit_code = 6
|
|
||||||
else:
|
|
||||||
cli = mycli(args)
|
|
||||||
cli.parse()
|
|
||||||
exit_code = cli.run()
|
|
||||||
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
cli.parser.print_help()
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 5
|
|
||||||
except AnsibleParserError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 4
|
|
||||||
# TQM takes care of these, but leaving comment to reserve the exit codes
|
|
||||||
# except AnsibleHostUnreachable as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 3
|
|
||||||
# except AnsibleHostFailed as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 2
|
|
||||||
except AnsibleError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 1
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
display.error("User interrupted execution")
|
|
||||||
exit_code = 99
|
|
||||||
except Exception as e:
|
|
||||||
if C.DEFAULT_DEBUG:
|
|
||||||
# Show raw stacktraces in debug mode, It also allow pdb to
|
|
||||||
# enter post mortem mode.
|
|
||||||
raise
|
|
||||||
have_cli_options = cli is not None and cli.options is not None
|
|
||||||
display.error("Unexpected Exception, this is probably a bug: %s" % to_text(e), wrap_text=False)
|
|
||||||
if not have_cli_options or have_cli_options and cli.options.verbosity > 2:
|
|
||||||
log_only = False
|
|
||||||
if hasattr(e, 'orig_exc'):
|
|
||||||
display.vvv('\nexception type: %s' % to_text(type(e.orig_exc)))
|
|
||||||
why = to_text(e.orig_exc)
|
|
||||||
if to_text(e) != why:
|
|
||||||
display.vvv('\noriginal msg: %s' % why)
|
|
||||||
else:
|
|
||||||
display.display("to see the full traceback, use -vvv")
|
|
||||||
log_only = True
|
|
||||||
display.display(u"the full traceback was:\n\n%s" % to_text(traceback.format_exc()), log_only=log_only)
|
|
||||||
exit_code = 250
|
|
||||||
finally:
|
|
||||||
# Remove ansible tmpdir
|
|
||||||
shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)
|
|
||||||
|
|
||||||
sys.exit(exit_code)
|
|
@ -1,163 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
|
||||||
#
|
|
||||||
# This file is part of Ansible
|
|
||||||
#
|
|
||||||
# Ansible is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# Ansible is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
########################################################
|
|
||||||
from __future__ import (absolute_import, division, print_function)
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
__requires__ = ['ansible']
|
|
||||||
try:
|
|
||||||
import pkg_resources
|
|
||||||
except Exception:
|
|
||||||
# Use pkg_resources to find the correct versions of libraries and set
|
|
||||||
# sys.path appropriately when there are multiversion installs. But we
|
|
||||||
# have code that better expresses the errors in the places where the code
|
|
||||||
# is actually used (the deps are optional for many code paths) so we don't
|
|
||||||
# want to fail here.
|
|
||||||
pass
|
|
||||||
|
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
import sys
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleParserError
|
|
||||||
from ansible.module_utils._text import to_text
|
|
||||||
|
|
||||||
|
|
||||||
# Used for determining if the system is running a new enough python version
|
|
||||||
# and should only restrict on our documented minimum versions
|
|
||||||
_PY3_MIN = sys.version_info[:2] >= (3, 5)
|
|
||||||
_PY2_MIN = (2, 6) <= sys.version_info[:2] < (3,)
|
|
||||||
_PY_MIN = _PY3_MIN or _PY2_MIN
|
|
||||||
if not _PY_MIN:
|
|
||||||
raise SystemExit('ERROR: Ansible requires a minimum of Python2 version 2.6 or Python3 version 3.5. Current version: %s' % ''.join(sys.version.splitlines()))
|
|
||||||
|
|
||||||
|
|
||||||
class LastResort(object):
|
|
||||||
# OUTPUT OF LAST RESORT
|
|
||||||
def display(self, msg, log_only=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
def error(self, msg, wrap_text=None):
|
|
||||||
print(msg, file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
|
|
||||||
display = LastResort()
|
|
||||||
|
|
||||||
try: # bad ANSIBLE_CONFIG or config options can force ugly stacktrace
|
|
||||||
import ansible.constants as C
|
|
||||||
from ansible.utils.display import Display
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
sys.exit(5)
|
|
||||||
|
|
||||||
cli = None
|
|
||||||
me = os.path.basename(sys.argv[0])
|
|
||||||
|
|
||||||
try:
|
|
||||||
display = Display()
|
|
||||||
display.debug("starting run")
|
|
||||||
|
|
||||||
sub = None
|
|
||||||
target = me.split('-')
|
|
||||||
if target[-1][0].isdigit():
|
|
||||||
# Remove any version or python version info as downstreams
|
|
||||||
# sometimes add that
|
|
||||||
target = target[:-1]
|
|
||||||
|
|
||||||
if len(target) > 1:
|
|
||||||
sub = target[1]
|
|
||||||
myclass = "%sCLI" % sub.capitalize()
|
|
||||||
elif target[0] == 'ansible':
|
|
||||||
sub = 'adhoc'
|
|
||||||
myclass = 'AdHocCLI'
|
|
||||||
else:
|
|
||||||
raise AnsibleError("Unknown Ansible alias: %s" % me)
|
|
||||||
|
|
||||||
try:
|
|
||||||
mycli = getattr(__import__("ansible.cli.%s" % sub, fromlist=[myclass]), myclass)
|
|
||||||
except ImportError as e:
|
|
||||||
# ImportError members have changed in py3
|
|
||||||
if 'msg' in dir(e):
|
|
||||||
msg = e.msg
|
|
||||||
else:
|
|
||||||
msg = e.message
|
|
||||||
if msg.endswith(' %s' % sub):
|
|
||||||
raise AnsibleError("Ansible sub-program not implemented: %s" % me)
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
try:
|
|
||||||
args = [to_text(a, errors='surrogate_or_strict') for a in sys.argv]
|
|
||||||
except UnicodeError:
|
|
||||||
display.error('Command line args are not in utf-8, unable to continue. Ansible currently only understands utf-8')
|
|
||||||
display.display(u"The full traceback was:\n\n%s" % to_text(traceback.format_exc()))
|
|
||||||
exit_code = 6
|
|
||||||
else:
|
|
||||||
cli = mycli(args)
|
|
||||||
cli.parse()
|
|
||||||
exit_code = cli.run()
|
|
||||||
|
|
||||||
except AnsibleOptionsError as e:
|
|
||||||
cli.parser.print_help()
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 5
|
|
||||||
except AnsibleParserError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 4
|
|
||||||
# TQM takes care of these, but leaving comment to reserve the exit codes
|
|
||||||
# except AnsibleHostUnreachable as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 3
|
|
||||||
# except AnsibleHostFailed as e:
|
|
||||||
# display.error(str(e))
|
|
||||||
# exit_code = 2
|
|
||||||
except AnsibleError as e:
|
|
||||||
display.error(to_text(e), wrap_text=False)
|
|
||||||
exit_code = 1
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
display.error("User interrupted execution")
|
|
||||||
exit_code = 99
|
|
||||||
except Exception as e:
|
|
||||||
if C.DEFAULT_DEBUG:
|
|
||||||
# Show raw stacktraces in debug mode, It also allow pdb to
|
|
||||||
# enter post mortem mode.
|
|
||||||
raise
|
|
||||||
have_cli_options = cli is not None and cli.options is not None
|
|
||||||
display.error("Unexpected Exception, this is probably a bug: %s" % to_text(e), wrap_text=False)
|
|
||||||
if not have_cli_options or have_cli_options and cli.options.verbosity > 2:
|
|
||||||
log_only = False
|
|
||||||
if hasattr(e, 'orig_exc'):
|
|
||||||
display.vvv('\nexception type: %s' % to_text(type(e.orig_exc)))
|
|
||||||
why = to_text(e.orig_exc)
|
|
||||||
if to_text(e) != why:
|
|
||||||
display.vvv('\noriginal msg: %s' % why)
|
|
||||||
else:
|
|
||||||
display.display("to see the full traceback, use -vvv")
|
|
||||||
log_only = True
|
|
||||||
display.display(u"the full traceback was:\n\n%s" % to_text(traceback.format_exc()), log_only=log_only)
|
|
||||||
exit_code = 250
|
|
||||||
finally:
|
|
||||||
# Remove ansible tmpdir
|
|
||||||
shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)
|
|
||||||
|
|
||||||
sys.exit(exit_code)
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from anyconfig.cli import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from bandit.cli.main import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from bandit.cli.baseline import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from bandit.cli.config_generator import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from coverage.cmdline import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from coverage.cmdline import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from coverage.cmdline import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from setuptools.command.easy_install import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from setuptools.command.easy_install import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from flake8.main.cli import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from isort.main import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from jsonschema.cli import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pbr.cmd.main import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pip._internal import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pip._internal import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pip._internal import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pytest import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pycodestyle import _main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(_main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pydocstyle.cli import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pyflakes.api import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pytest import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
Binary file not shown.
@ -1,78 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import getopt
|
|
||||||
import sysconfig
|
|
||||||
|
|
||||||
valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags',
|
|
||||||
'ldflags', 'help']
|
|
||||||
|
|
||||||
if sys.version_info >= (3, 2):
|
|
||||||
valid_opts.insert(-1, 'extension-suffix')
|
|
||||||
valid_opts.append('abiflags')
|
|
||||||
if sys.version_info >= (3, 3):
|
|
||||||
valid_opts.append('configdir')
|
|
||||||
|
|
||||||
|
|
||||||
def exit_with_usage(code=1):
|
|
||||||
sys.stderr.write("Usage: {0} [{1}]\n".format(
|
|
||||||
sys.argv[0], '|'.join('--'+opt for opt in valid_opts)))
|
|
||||||
sys.exit(code)
|
|
||||||
|
|
||||||
try:
|
|
||||||
opts, args = getopt.getopt(sys.argv[1:], '', valid_opts)
|
|
||||||
except getopt.error:
|
|
||||||
exit_with_usage()
|
|
||||||
|
|
||||||
if not opts:
|
|
||||||
exit_with_usage()
|
|
||||||
|
|
||||||
pyver = sysconfig.get_config_var('VERSION')
|
|
||||||
getvar = sysconfig.get_config_var
|
|
||||||
|
|
||||||
opt_flags = [flag for (flag, val) in opts]
|
|
||||||
|
|
||||||
if '--help' in opt_flags:
|
|
||||||
exit_with_usage(code=0)
|
|
||||||
|
|
||||||
for opt in opt_flags:
|
|
||||||
if opt == '--prefix':
|
|
||||||
print(sysconfig.get_config_var('prefix'))
|
|
||||||
|
|
||||||
elif opt == '--exec-prefix':
|
|
||||||
print(sysconfig.get_config_var('exec_prefix'))
|
|
||||||
|
|
||||||
elif opt in ('--includes', '--cflags'):
|
|
||||||
flags = ['-I' + sysconfig.get_path('include'),
|
|
||||||
'-I' + sysconfig.get_path('platinclude')]
|
|
||||||
if opt == '--cflags':
|
|
||||||
flags.extend(getvar('CFLAGS').split())
|
|
||||||
print(' '.join(flags))
|
|
||||||
|
|
||||||
elif opt in ('--libs', '--ldflags'):
|
|
||||||
abiflags = getattr(sys, 'abiflags', '')
|
|
||||||
libs = ['-lpython' + pyver + abiflags]
|
|
||||||
libs += getvar('LIBS').split()
|
|
||||||
libs += getvar('SYSLIBS').split()
|
|
||||||
# add the prefix/lib/pythonX.Y/config dir, but only if there is no
|
|
||||||
# shared library in prefix/lib/.
|
|
||||||
if opt == '--ldflags':
|
|
||||||
if not getvar('Py_ENABLE_SHARED'):
|
|
||||||
libs.insert(0, '-L' + getvar('LIBPL'))
|
|
||||||
if not getvar('PYTHONFRAMEWORK'):
|
|
||||||
libs.extend(getvar('LINKFORSHARED').split())
|
|
||||||
print(' '.join(libs))
|
|
||||||
|
|
||||||
elif opt == '--extension-suffix':
|
|
||||||
ext_suffix = sysconfig.get_config_var('EXT_SUFFIX')
|
|
||||||
if ext_suffix is None:
|
|
||||||
ext_suffix = sysconfig.get_config_var('SO')
|
|
||||||
print(ext_suffix)
|
|
||||||
|
|
||||||
elif opt == '--abiflags':
|
|
||||||
if not getattr(sys, 'abiflags', None):
|
|
||||||
exit_with_usage()
|
|
||||||
print(sys.abiflags)
|
|
||||||
|
|
||||||
elif opt == '--configdir':
|
|
||||||
print(sysconfig.get_config_var('LIBPL'))
|
|
@ -1 +0,0 @@
|
|||||||
python
|
|
@ -1 +0,0 @@
|
|||||||
python
|
|
@ -1,68 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
|
|
||||||
from __future__ import print_function, unicode_literals
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import codecs
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from unidiff import DEFAULT_ENCODING, PatchSet
|
|
||||||
|
|
||||||
|
|
||||||
PY2 = sys.version_info[0] == 2
|
|
||||||
DESCRIPTION = """Unified diff metadata.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
$ git diff | unidiff
|
|
||||||
$ hg diff | unidiff --show-diff
|
|
||||||
$ unidiff -f patch.diff
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
def get_parser():
|
|
||||||
parser = argparse.ArgumentParser(
|
|
||||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
||||||
description=DESCRIPTION)
|
|
||||||
parser.add_argument('--show-diff', action="store_true", default=False,
|
|
||||||
dest='show_diff', help='output diff to stdout')
|
|
||||||
parser.add_argument('-f', '--file', dest='diff_file',
|
|
||||||
type=argparse.FileType('r'),
|
|
||||||
help='if not specified, read diff data from stdin')
|
|
||||||
return parser
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
parser = get_parser()
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
encoding = DEFAULT_ENCODING
|
|
||||||
if args.diff_file:
|
|
||||||
diff_file = args.diff_file
|
|
||||||
else:
|
|
||||||
encoding = sys.stdin.encoding or encoding
|
|
||||||
diff_file = sys.stdin
|
|
||||||
|
|
||||||
if PY2:
|
|
||||||
diff_file = codecs.getreader(encoding)(diff_file)
|
|
||||||
|
|
||||||
patch = PatchSet(diff_file)
|
|
||||||
|
|
||||||
if args.show_diff:
|
|
||||||
print(patch)
|
|
||||||
print()
|
|
||||||
|
|
||||||
print('Summary')
|
|
||||||
print('-------')
|
|
||||||
additions = 0
|
|
||||||
deletions = 0
|
|
||||||
for f in patch:
|
|
||||||
additions += f.added
|
|
||||||
deletions += f.removed
|
|
||||||
print('%s:' % f.path, '+%d additions,' % f.added,
|
|
||||||
'-%d deletions' % f.removed)
|
|
||||||
|
|
||||||
print()
|
|
||||||
print('%d modified file(s), %d added file(s), %d removed file(s)' % (
|
|
||||||
len(patch.modified_files), len(patch.added_files),
|
|
||||||
len(patch.removed_files)))
|
|
||||||
print('Total: %d addition(s), %d deletion(s)' % (additions, deletions))
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/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,10 +0,0 @@
|
|||||||
#!/Users/rkau2905/Devel/python/private/ansible-later/env_27/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from yamllint.cli import run
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(run())
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/UserDict.py
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_abcoll.py
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_weakrefset.py
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/abc.py
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/codecs.py
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy_reg.py
|
|
@ -1,116 +0,0 @@
|
|||||||
import imp
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import warnings
|
|
||||||
|
|
||||||
# opcode is not a virtualenv module, so we can use it to find the stdlib
|
|
||||||
# Important! To work on pypy, this must be a module that resides in the
|
|
||||||
# lib-python/modified-x.y.z directory
|
|
||||||
import opcode
|
|
||||||
|
|
||||||
dirname = os.path.dirname
|
|
||||||
|
|
||||||
distutils_path = os.path.join(os.path.dirname(opcode.__file__), "distutils")
|
|
||||||
if os.path.normpath(distutils_path) == os.path.dirname(os.path.normpath(__file__)):
|
|
||||||
warnings.warn("The virtualenv distutils package at %s appears to be in the same location as the system distutils?")
|
|
||||||
else:
|
|
||||||
__path__.insert(0, distutils_path) # noqa: F821
|
|
||||||
real_distutils = imp.load_module("_virtualenv_distutils", None, distutils_path, ("", "", imp.PKG_DIRECTORY))
|
|
||||||
# Copy the relevant attributes
|
|
||||||
try:
|
|
||||||
__revision__ = real_distutils.__revision__
|
|
||||||
except AttributeError:
|
|
||||||
pass
|
|
||||||
__version__ = real_distutils.__version__
|
|
||||||
|
|
||||||
from distutils import dist, sysconfig # isort:skip
|
|
||||||
|
|
||||||
try:
|
|
||||||
basestring
|
|
||||||
except NameError:
|
|
||||||
basestring = str
|
|
||||||
|
|
||||||
# patch build_ext (distutils doesn't know how to get the libs directory
|
|
||||||
# path on windows - it hardcodes the paths around the patched sys.prefix)
|
|
||||||
|
|
||||||
if sys.platform == "win32":
|
|
||||||
from distutils.command.build_ext import build_ext as old_build_ext
|
|
||||||
|
|
||||||
class build_ext(old_build_ext):
|
|
||||||
def finalize_options(self):
|
|
||||||
if self.library_dirs is None:
|
|
||||||
self.library_dirs = []
|
|
||||||
elif isinstance(self.library_dirs, basestring):
|
|
||||||
self.library_dirs = self.library_dirs.split(os.pathsep)
|
|
||||||
|
|
||||||
self.library_dirs.insert(0, os.path.join(sys.real_prefix, "Libs"))
|
|
||||||
old_build_ext.finalize_options(self)
|
|
||||||
|
|
||||||
from distutils.command import build_ext as build_ext_module
|
|
||||||
|
|
||||||
build_ext_module.build_ext = build_ext
|
|
||||||
|
|
||||||
# distutils.dist patches:
|
|
||||||
|
|
||||||
old_find_config_files = dist.Distribution.find_config_files
|
|
||||||
|
|
||||||
|
|
||||||
def find_config_files(self):
|
|
||||||
found = old_find_config_files(self)
|
|
||||||
if os.name == "posix":
|
|
||||||
user_filename = ".pydistutils.cfg"
|
|
||||||
else:
|
|
||||||
user_filename = "pydistutils.cfg"
|
|
||||||
user_filename = os.path.join(sys.prefix, user_filename)
|
|
||||||
if os.path.isfile(user_filename):
|
|
||||||
for item in list(found):
|
|
||||||
if item.endswith("pydistutils.cfg"):
|
|
||||||
found.remove(item)
|
|
||||||
found.append(user_filename)
|
|
||||||
return found
|
|
||||||
|
|
||||||
|
|
||||||
dist.Distribution.find_config_files = find_config_files
|
|
||||||
|
|
||||||
# distutils.sysconfig patches:
|
|
||||||
|
|
||||||
old_get_python_inc = sysconfig.get_python_inc
|
|
||||||
|
|
||||||
|
|
||||||
def sysconfig_get_python_inc(plat_specific=0, prefix=None):
|
|
||||||
if prefix is None:
|
|
||||||
prefix = sys.real_prefix
|
|
||||||
return old_get_python_inc(plat_specific, prefix)
|
|
||||||
|
|
||||||
|
|
||||||
sysconfig_get_python_inc.__doc__ = old_get_python_inc.__doc__
|
|
||||||
sysconfig.get_python_inc = sysconfig_get_python_inc
|
|
||||||
|
|
||||||
old_get_python_lib = sysconfig.get_python_lib
|
|
||||||
|
|
||||||
|
|
||||||
def sysconfig_get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
|
|
||||||
if standard_lib and prefix is None:
|
|
||||||
prefix = sys.real_prefix
|
|
||||||
return old_get_python_lib(plat_specific, standard_lib, prefix)
|
|
||||||
|
|
||||||
|
|
||||||
sysconfig_get_python_lib.__doc__ = old_get_python_lib.__doc__
|
|
||||||
sysconfig.get_python_lib = sysconfig_get_python_lib
|
|
||||||
|
|
||||||
old_get_config_vars = sysconfig.get_config_vars
|
|
||||||
|
|
||||||
|
|
||||||
def sysconfig_get_config_vars(*args):
|
|
||||||
real_vars = old_get_config_vars(*args)
|
|
||||||
if sys.platform == "win32":
|
|
||||||
lib_dir = os.path.join(sys.real_prefix, "libs")
|
|
||||||
if isinstance(real_vars, dict) and "LIBDIR" not in real_vars:
|
|
||||||
real_vars["LIBDIR"] = lib_dir # asked for all
|
|
||||||
elif isinstance(real_vars, list) and "LIBDIR" in args:
|
|
||||||
real_vars = real_vars + [lib_dir] # asked for list
|
|
||||||
return real_vars
|
|
||||||
|
|
||||||
|
|
||||||
sysconfig_get_config_vars.__doc__ = old_get_config_vars.__doc__
|
|
||||||
sysconfig.get_config_vars = sysconfig_get_config_vars
|
|
@ -1,6 +0,0 @@
|
|||||||
# This is a config file local to this virtualenv installation
|
|
||||||
# You may include options that will be used by all distutils commands,
|
|
||||||
# and by easy_install. For instance:
|
|
||||||
#
|
|
||||||
# [easy_install]
|
|
||||||
# find_links = http://mylocalsite
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/fnmatch.py
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/genericpath.py
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/linecache.py
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ntpath.py
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py
|
|
@ -1 +0,0 @@
|
|||||||
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,31 +0,0 @@
|
|||||||
Metadata-Version: 2.1
|
|
||||||
Name: GitPython
|
|
||||||
Version: 2.1.11
|
|
||||||
Summary: Python Git Library
|
|
||||||
Home-page: https://github.com/gitpython-developers/GitPython
|
|
||||||
Author: Sebastian Thiel, Michael Trier
|
|
||||||
Author-email: byronimo@gmail.com, mtrier@gmail.com
|
|
||||||
License: BSD License
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Environment :: Console
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: BSD License
|
|
||||||
Classifier: Operating System :: OS Independent
|
|
||||||
Classifier: Operating System :: POSIX
|
|
||||||
Classifier: Operating System :: Microsoft :: Windows
|
|
||||||
Classifier: Operating System :: MacOS :: MacOS X
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Requires: gitdb2 (>=2.0.0)
|
|
||||||
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
|
|
||||||
Requires-Dist: gitdb2 (>=2.0.0)
|
|
||||||
|
|
||||||
GitPython is a python library used to interact with Git repositories
|
|
||||||
|
|
||||||
|
|
@ -1,202 +0,0 @@
|
|||||||
GitPython-2.1.11.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
GitPython-2.1.11.dist-info/METADATA,sha256=1hl7XlFNafLSMaQA9lMPWs3HvZNCeLBPxWCOk9DFA8w,1174
|
|
||||||
GitPython-2.1.11.dist-info/RECORD,,
|
|
||||||
GitPython-2.1.11.dist-info/WHEEL,sha256=gduuPyBvFJQSQ0zdyxF7k0zynDXbIbvg5ZBHoXum5uk,110
|
|
||||||
GitPython-2.1.11.dist-info/top_level.txt,sha256=0hzDuIp8obv624V3GmbqsagBWkk8ohtGU-Bc1PmTT0o,4
|
|
||||||
git/__init__.py,sha256=ADA42qaulal45gMhMwD34EWD1BB2ipRDLAv0lITLhUg,2336
|
|
||||||
git/__init__.pyc,,
|
|
||||||
git/cmd.py,sha256=5mmEzjWKKZcTE_NWOt6qAVejTnfB40vfp_r1ojTcrGM,42731
|
|
||||||
git/cmd.pyc,,
|
|
||||||
git/compat.py,sha256=iikgGbxQeH2zQdbH6-17aU02YjQLNoScj_IzXHmklIU,9372
|
|
||||||
git/compat.pyc,,
|
|
||||||
git/config.py,sha256=F20DpDX1NENCG4hCkwDkOA4wkgfZwG32TrLoNxMbyho,23132
|
|
||||||
git/config.pyc,,
|
|
||||||
git/db.py,sha256=pgC0B4wCqRN7xrvLuMQhLwM252ilkZyFL6qq0cPA2j4,1980
|
|
||||||
git/db.pyc,,
|
|
||||||
git/diff.py,sha256=Wtj8JQadZj473oXmx5RoMueUp1_P7I1vpRrxt6Nnhwg,18742
|
|
||||||
git/diff.pyc,,
|
|
||||||
git/exc.py,sha256=U01S3wgpn9gGfGG8fIvL6p127Uu2LI_Ho7Jcc24xOYI,4878
|
|
||||||
git/exc.pyc,,
|
|
||||||
git/index/__init__.py,sha256=Wj5zgJggZkEXueEDXdijxXahzxhextC08k70n0lHRN0,129
|
|
||||||
git/index/__init__.pyc,,
|
|
||||||
git/index/base.py,sha256=ACRqf_rarJULDQwl5G8QWCbMv4JmT0E9Dg_uVfaLQdo,52048
|
|
||||||
git/index/base.pyc,,
|
|
||||||
git/index/fun.py,sha256=ZptIr1Wr7Zh1RlI1LliRxxGaxxwLsLHd94GSpk9ClGw,14312
|
|
||||||
git/index/fun.pyc,,
|
|
||||||
git/index/typ.py,sha256=GLBZbDS3yScHJs0U18CX-heLTDjjGu6fN7T2L_NQr4A,4976
|
|
||||||
git/index/typ.pyc,,
|
|
||||||
git/index/util.py,sha256=l6oh9_1KU1v5GQdpxqCOqs6WLt5xN1uWvkVHQqcCToA,2902
|
|
||||||
git/index/util.pyc,,
|
|
||||||
git/objects/__init__.py,sha256=6C02LlMygiFwTYtncz3GxEQfzHZr2WvUId0fnJ8HfLo,683
|
|
||||||
git/objects/__init__.pyc,,
|
|
||||||
git/objects/base.py,sha256=UZiyzyzx4_OJ3bWnwqb3mqh0LXT7oo0biYaTm-sLuAw,6689
|
|
||||||
git/objects/base.pyc,,
|
|
||||||
git/objects/blob.py,sha256=evI3ptPmlln6gLpoQRvbIKjK4v59nT8ipd1vk1dGYtc,927
|
|
||||||
git/objects/blob.pyc,,
|
|
||||||
git/objects/commit.py,sha256=KfpGWRrN9Y2QikcfeFThN2gc8NZ68K5pBAPhz8OrN7Q,20791
|
|
||||||
git/objects/commit.pyc,,
|
|
||||||
git/objects/fun.py,sha256=kEUFE2Q5kXeoxbjALRNl_jzRP_m9KKqQyxIcW-h6XGM,7415
|
|
||||||
git/objects/fun.pyc,,
|
|
||||||
git/objects/submodule/__init__.py,sha256=OsMeiex7cG6ev2f35IaJ5csH-eXchSoNKCt4HXUG5Ws,93
|
|
||||||
git/objects/submodule/__init__.pyc,,
|
|
||||||
git/objects/submodule/base.py,sha256=0DLx40Mz-l0QPz3RDXz9gols8LkGkCQlwvCKerNGd1s,53921
|
|
||||||
git/objects/submodule/base.pyc,,
|
|
||||||
git/objects/submodule/root.py,sha256=N2i0PjRcw5bNLLIDAkviQjXhf9RvGSfVnbav4FNzkXo,17656
|
|
||||||
git/objects/submodule/root.pyc,,
|
|
||||||
git/objects/submodule/util.py,sha256=VdgIG-cBo47b_7JcolAvjWaIMU0X5oImLjJ4wluc_iw,2745
|
|
||||||
git/objects/submodule/util.pyc,,
|
|
||||||
git/objects/tag.py,sha256=h2nD3iO4GB6f9yqr2nqJ4mhMj1DDaqEJl2hQm2b8vJ8,3162
|
|
||||||
git/objects/tag.pyc,,
|
|
||||||
git/objects/tree.py,sha256=Ta1qAkuwzn7lk54_d7knqF2WL6DOc2MQG1k8mKLel1s,11069
|
|
||||||
git/objects/tree.pyc,,
|
|
||||||
git/objects/util.py,sha256=GRIAWLR1gaK2QE3s5TtmNmN_LqOjEBlUkZWiouJMVe8,12355
|
|
||||||
git/objects/util.pyc,,
|
|
||||||
git/refs/__init__.py,sha256=3CRfAyE-Z78rJ3kSdKR1PNiXHEjHLw2VkU2JyDviNDU,242
|
|
||||||
git/refs/__init__.pyc,,
|
|
||||||
git/refs/head.py,sha256=MbO65f5SU0X3DvzmHpU0dY4h4SyvwqNaW2d8bUu3YSc,8724
|
|
||||||
git/refs/head.pyc,,
|
|
||||||
git/refs/log.py,sha256=_4JC--cqZc49Gm0ZLkE66ePsaxwP4TagiCQi53_xI88,10881
|
|
||||||
git/refs/log.pyc,,
|
|
||||||
git/refs/reference.py,sha256=OcQMwHJuelR1yKe1EF0IBfxeQZYv2kf0xunNSVwZV-M,4408
|
|
||||||
git/refs/reference.pyc,,
|
|
||||||
git/refs/remote.py,sha256=6JOyIurnomM3tNXdKRXfMK_V75gJNgr9_2sdevKU_tI,1670
|
|
||||||
git/refs/remote.pyc,,
|
|
||||||
git/refs/symbolic.py,sha256=2YA20sTqEP5IOqZi7TR9AxIBHrwAPRnR62wm9q8k5ko,26858
|
|
||||||
git/refs/symbolic.pyc,,
|
|
||||||
git/refs/tag.py,sha256=qoHwJ9suHx8u8NNg-6GvNftK36RnCNkpElRjh2r9wcI,2964
|
|
||||||
git/refs/tag.pyc,,
|
|
||||||
git/remote.py,sha256=mRDU9YLiJGpz0nctfE0HNWLbLnqCo5_umcJeMSPFT8M,35554
|
|
||||||
git/remote.pyc,,
|
|
||||||
git/repo/__init__.py,sha256=ssUH4IVCoua5shI5h1l46P0X1kp82ydxVcH3PIVCnzg,108
|
|
||||||
git/repo/__init__.pyc,,
|
|
||||||
git/repo/base.py,sha256=cAqM1khmzcpKkV7bVsAkZTV65weMPs7i-8b0FZhVl6w,41729
|
|
||||||
git/repo/base.pyc,,
|
|
||||||
git/repo/fun.py,sha256=chh3Jp9ZKtKU9dWyEvHuY5vnGQjNyCKLc5fU8K6POyY,11382
|
|
||||||
git/repo/fun.pyc,,
|
|
||||||
git/test/__init__.py,sha256=q-WCITGqFKTHnRFjUvJz5hUJBi8SP4InaAZRXZ8qj8k,220
|
|
||||||
git/test/__init__.pyc,,
|
|
||||||
git/test/fixtures/blame,sha256=4EDRSXdgbRtxHU_2lASFXC7eNShL2cVq3IU43tLWlD4,3663
|
|
||||||
git/test/fixtures/blame_binary,sha256=YLzoHqTAuv2Uv8IILh4ndQxJ_A1c09176E-3d5FMQsM,14807
|
|
||||||
git/test/fixtures/blame_complex_revision,sha256=tPguLsqmLxjuZWg5nRcdZCZeaBi-LOeVQEHfTX6X_B0,7645
|
|
||||||
git/test/fixtures/blame_incremental,sha256=3VXtrk8LVqfS5f2vsP5DTzFU3opeevUbENQUq22vTdw,982
|
|
||||||
git/test/fixtures/blame_incremental_2.11.1_plus,sha256=JDA_xCevOrOMDeKW-U8svYeA0E8Pa3sI7G8GALpxOHw,1154
|
|
||||||
git/test/fixtures/cat_file.py,sha256=7RDIymGyByw8I1OibenXM-DVsZ0_7gpazeYYG4C5GDM,136
|
|
||||||
git/test/fixtures/cat_file.pyc,,
|
|
||||||
git/test/fixtures/cat_file_blob,sha256=ZOyIygCyaOW6GjVnihtTFtIS9PNmskdyMlNKiuyjfzw,11
|
|
||||||
git/test/fixtures/cat_file_blob_nl,sha256=GJShnIW6FTrL90OsTkP8AEyJFgSyb4xp4eg-oq_HxI8,12
|
|
||||||
git/test/fixtures/cat_file_blob_size,sha256=JdTyqG3rXiV0uzIQtnuyT8xK-xn5OntloFfaqHSp0Y4,3
|
|
||||||
git/test/fixtures/commit_invalid_data,sha256=QlV-Pw5mw1Vhp6qivAQY5kcBP_BMJ_OIdLCinmes5Sw,242
|
|
||||||
git/test/fixtures/commit_with_gpgsig,sha256=3in_tJPkQv2K1wFx-PGqaCZQe40liMnl9cMYOJ8krTA,1387
|
|
||||||
git/test/fixtures/diff_2,sha256=sxE-xkV5lQrUEbpllp2X_AcFfPUmUr2wvSsc9qkZQLc,1994
|
|
||||||
git/test/fixtures/diff_2f,sha256=na11T8R1dhJUOKeO-fEeHymOxhXNrjvzzmA_r7x6oJM,732
|
|
||||||
git/test/fixtures/diff_abbrev-40_full-index_M_raw_no-color,sha256=AW-YEfutyH_RVyaP2nCTPhtjvkfqWi7NVL4s9Ab3Qww,109
|
|
||||||
git/test/fixtures/diff_change_in_type,sha256=Wo1iCaT1YBfGn5ZSJ40H7iVeqXKm-v-qJnsBUBKrpsI,319
|
|
||||||
git/test/fixtures/diff_change_in_type_raw,sha256=67KYtwIlQdTSwesABnIYTZxFgiwPhVyBXaDFoPXRFt4,108
|
|
||||||
git/test/fixtures/diff_f,sha256=sNsG26bYvqU4pK_RwahaO-Lya8O9Xonwlyth8do_ptY,504
|
|
||||||
git/test/fixtures/diff_file_with_spaces,sha256=BOvQkq4AjQ_cR1e0iLYDQdNq2BLa-P5xhI4Xal7hYcE,216
|
|
||||||
git/test/fixtures/diff_i,sha256=792rEQvP9Q-MNxZ3_FsvhG5emE_q1nT9jpmQ_A1hFWE,5705
|
|
||||||
git/test/fixtures/diff_index_patch,sha256=qd9jD_eAQY5I9OLsbqdz3-lm_ncL2ALJhVLyj3enAfk,4598
|
|
||||||
git/test/fixtures/diff_index_raw,sha256=odNXPZQ4rlBnqYfJvvTKGS8QvfJE33WN_X-lIRMT8NI,101
|
|
||||||
git/test/fixtures/diff_initial,sha256=1RJTg7QSTdMGlqLDvjFUhKtV0bAV2NFW8rHBgzlVfyg,76
|
|
||||||
git/test/fixtures/diff_mode_only,sha256=pqDOHBLm09TWZ0orff-S7pCkQktD2sooW5mURG0vqLQ,46005
|
|
||||||
git/test/fixtures/diff_new_mode,sha256=b70EDNoC_gfq_P_fVFCIqT3WHU_P0l-1jhuR2cSEJFg,546
|
|
||||||
git/test/fixtures/diff_numstat,sha256=_Ls171vvsERXlRiJ1i1tA5vHyoYCzt3hKorFmic7UyE,22
|
|
||||||
git/test/fixtures/diff_p,sha256=3YlhR3UNFIPDv90Zn1vCXC46kQCVDuepUZIzwzD8xmk,19273
|
|
||||||
git/test/fixtures/diff_patch_binary,sha256=CLWigD0x0z3n_fpdh8LlkEyRUy7oDiWM-CJpGrqWPiM,155
|
|
||||||
git/test/fixtures/diff_patch_unsafe_paths,sha256=jsc2GM8j56puEDnMEhlBHG4jIhziN0uY8cuzGTTtHmw,3145
|
|
||||||
git/test/fixtures/diff_raw_binary,sha256=-PUPqf5wop8KkmubHnPK6RAVinlJuQf9Lqo4VBff23I,103
|
|
||||||
git/test/fixtures/diff_rename,sha256=-f4kqw0Zt1lRZZOmt5I0w9Jenbr3PngyTH2QeUQfv8g,415
|
|
||||||
git/test/fixtures/diff_rename_raw,sha256=VVBUjGEoXWWMYQFq-dyE708DijCnG974Qn79plVT39Q,112
|
|
||||||
git/test/fixtures/diff_tree_numstat_root,sha256=NbBofQm3wGm-1hyz8XKIoxMtC_bzz4x8TlxxuF8LLDU,63
|
|
||||||
git/test/fixtures/for_each_ref_with_path_component,sha256=hHVSiVHNEW5PKSPP4zFxxpYs4EYlPSJ9y-yykzkpWjk,84
|
|
||||||
git/test/fixtures/git_config,sha256=_Igi3In2TsksvwUdn7YcusMv-069ftMdlV1G7ZCs8nU,1517
|
|
||||||
git/test/fixtures/git_config-inc.cfg,sha256=jYjjNgfYBBkEAXYj5wLy7en-ISXbvVyOOfOmKsURYdc,92
|
|
||||||
git/test/fixtures/git_config_global,sha256=_tFDHYTW1Hxue2WXqjafVm_b9eM-OjTV6WTD2yZ3aqM,366
|
|
||||||
git/test/fixtures/git_config_with_comments,sha256=Q9IHrB4KE3l15iXoYD9-4TIMyd_rFczQ1CPAu-CI8bU,3997
|
|
||||||
git/test/fixtures/git_config_with_empty_value,sha256=686iisjxnex4YeT4qWdjsQh22X8UDw5yzKSerefFSTM,35
|
|
||||||
git/test/fixtures/git_file,sha256=44Qr9_8TluxWGPiPjDT4dEyF8x3fvnA9W7moDNiFAKo,16
|
|
||||||
git/test/fixtures/index,sha256=OBeM4XodizcBFgK_7S92fdjNTaitNxGzSBkcHXXWQvs,163616
|
|
||||||
git/test/fixtures/index_merge,sha256=IdtRRV85gi9dGFC4LNuGrZU2yttGAAANeS0_qvNO85w,9192
|
|
||||||
git/test/fixtures/issue-301_stderr,sha256=z6QL_UgCKQ1MMviNQNdhM22hOgp00zfJyc5LCm7Jl64,302879
|
|
||||||
git/test/fixtures/ls_tree_a,sha256=uBvIY8-7HnaBvSsVYigYJdsbeslxrtfeXh-tWXKtOnc,429
|
|
||||||
git/test/fixtures/ls_tree_b,sha256=pW3aIRcXMA1ZSE36049fJWeiVQl95qk_31U8Eh3Tc1c,119
|
|
||||||
git/test/fixtures/ls_tree_commit,sha256=cOgzX5Qcqvy4LU4dIBkcc63ccrOPBLab5DsCQPVpz_E,173
|
|
||||||
git/test/fixtures/ls_tree_empty,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
||||||
git/test/fixtures/reflog_HEAD,sha256=8J5zwsJRmdb8xdWyQoRUzJYJnDSaeo0rLa5uthBovyQ,114210
|
|
||||||
git/test/fixtures/reflog_invalid_date,sha256=VlAYk2kGs3CySphJV0OmWwpWZK_uB9FxICTICZuKwSM,409
|
|
||||||
git/test/fixtures/reflog_invalid_email,sha256=1OoNdoGKNcNKWVQAv5ZKSgVEt0zSkigvHOTs3MMhVW0,411
|
|
||||||
git/test/fixtures/reflog_invalid_newsha,sha256=i-xph-C12dZT-dEKWS4VTDtX4AzQVUcCF3KXfMp9Gu0,404
|
|
||||||
git/test/fixtures/reflog_invalid_oldsha,sha256=guzXH-wQOfz3yQJFMChzhuXcgQ6G6rGTSwlIdBVX8Wg,398
|
|
||||||
git/test/fixtures/reflog_invalid_sep,sha256=0D9WHWpIGE2tQXD8utDcq-bbxdgVnWWCAMK_vwI3-zA,415
|
|
||||||
git/test/fixtures/reflog_master,sha256=K1-VX1oQ3gM_23qTjVV-8yQOXeXuRtePgUXAE6D1TVo,31286
|
|
||||||
git/test/fixtures/rev_list,sha256=pJPFZuJGwLzQ6m4P2d7VNaRLdMefGxxtztgU9fQfCCU,123
|
|
||||||
git/test/fixtures/rev_list_bisect_all,sha256=r0gnyZwq-IVHxNss4qE6zMv29PEcLyE0t_fV4MKISHc,2172
|
|
||||||
git/test/fixtures/rev_list_commit_diffs,sha256=n8qhU8FHEqr7Z8z8PvRGEODveuPbFIuaXB8UYGTqTPc,306
|
|
||||||
git/test/fixtures/rev_list_commit_idabbrev,sha256=W_cHcxor5sFGeS8-nmIpWNim-wtFY7636Hwh04Sfve8,271
|
|
||||||
git/test/fixtures/rev_list_commit_stats,sha256=1bZgYDN3iqjdIiZtYUuPNZXcyJYlDiusy3dw5utnr3M,244
|
|
||||||
git/test/fixtures/rev_list_count,sha256=wyBmlaA46bFntXaF6nx28phdDPwTZVW5kJr71pRrmb0,26855
|
|
||||||
git/test/fixtures/rev_list_delta_a,sha256=ikrcoYkO311vbCS_xoeyKE6myYKlKP5by88KU4oG6qI,328
|
|
||||||
git/test/fixtures/rev_list_delta_b,sha256=iiTGJRF2nzZrsHLXB1oOcZaoLvnSGAB3B9PLt5acmno,451
|
|
||||||
git/test/fixtures/rev_list_single,sha256=YqAJowQ_ujS8kUnNfBlm8ibKY7ki5vu2nXc_vt-4nq0,293
|
|
||||||
git/test/fixtures/rev_parse,sha256=y9iM5H6QPxDLEoGO9D4qSMBuDw4nz196c5VMflC1rak,8
|
|
||||||
git/test/fixtures/show_empty_commit,sha256=xeKoNCOFUPZcSztV3olKSs6u14fVdHwjnkGYLsEcZn8,252
|
|
||||||
git/test/fixtures/uncommon_branch_prefix_FETCH_HEAD,sha256=NO36DB4HWl4sOisR6EdFroTDakA-4XOx2kk4lFQIsiQ,603
|
|
||||||
git/test/fixtures/uncommon_branch_prefix_stderr,sha256=4-rJlXvPu-1ByjZzsUUJXFruPRxan7C5ssNtM7qZbeo,324
|
|
||||||
git/test/lib/__init__.py,sha256=k2xMRT9FC0m3yX_iMKaDcyuuZe0tGSr95ork3VOaeWk,414
|
|
||||||
git/test/lib/__init__.pyc,,
|
|
||||||
git/test/lib/asserts.py,sha256=_9sOUHopeO-3PZOkxMXfTWaTxxPaWwmpnAVaDxpcaWk,2273
|
|
||||||
git/test/lib/asserts.pyc,,
|
|
||||||
git/test/lib/helper.py,sha256=TI69pdx0xIMhfzOzBDB3BwqPvPsykp9bUXiyw2B0Xd8,13592
|
|
||||||
git/test/lib/helper.pyc,,
|
|
||||||
git/test/performance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
||||||
git/test/performance/__init__.pyc,,
|
|
||||||
git/test/performance/lib.py,sha256=qSicSiyRI30rP3EFeVoevC_sBDgXDFtZKIFr_Ikz84g,2427
|
|
||||||
git/test/performance/lib.pyc,,
|
|
||||||
git/test/performance/test_commit.py,sha256=ws8ORcvg3h0eXkI2G7a4OEl5QFG-9s2Agf0ut_8sUqU,3732
|
|
||||||
git/test/performance/test_commit.pyc,,
|
|
||||||
git/test/performance/test_odb.py,sha256=knbDhq2sRagwyGHKQ7uNZLWN8bzYt_VF6bNucoON6dI,2651
|
|
||||||
git/test/performance/test_odb.pyc,,
|
|
||||||
git/test/performance/test_streams.py,sha256=w5mqPX6Yjo-j3mAz9GGa0O_pzYCBgGhhdoKCAz-iMD0,5850
|
|
||||||
git/test/performance/test_streams.pyc,,
|
|
||||||
git/test/test_actor.py,sha256=1bYmrTwWAYT_Qj9l9chbvuI8nNtHY6yGlDRJDDEq9A0,1242
|
|
||||||
git/test/test_actor.pyc,,
|
|
||||||
git/test/test_base.py,sha256=k6I5nG7ZeBCYpXwi3HX_mvURFelgvQFys5pWVQR6kjw,5649
|
|
||||||
git/test/test_base.pyc,,
|
|
||||||
git/test/test_blob.py,sha256=Bs4FWke9Sjzx06EJuG9hh1T5qBgJEEz4aBCcr3cW9L0,878
|
|
||||||
git/test/test_blob.pyc,,
|
|
||||||
git/test/test_commit.py,sha256=IhFvgXZ05tT0MTdheIHjNCHjVXpWytORBdcgaunJ2HY,15460
|
|
||||||
git/test/test_commit.pyc,,
|
|
||||||
git/test/test_config.py,sha256=HaAqpKZyURYV4ggy65FEIO9KAvS7wEaR5rbJvE0_NGQ,11066
|
|
||||||
git/test/test_config.pyc,,
|
|
||||||
git/test/test_db.py,sha256=e9UNddyQfoa-kzZo-XyrwVuYiq887NUkYrK8wZkTu9M,939
|
|
||||||
git/test/test_db.pyc,,
|
|
||||||
git/test/test_diff.py,sha256=D6JROrJiEmpvju_WZxkiO64ryU4yfA4viUdMN_3eBcg,12598
|
|
||||||
git/test/test_diff.pyc,,
|
|
||||||
git/test/test_docs.py,sha256=Au9rFCRPdF6HDq4TosrS6N_tmqo7xUUhdwhqHFArfLI,25357
|
|
||||||
git/test/test_docs.pyc,,
|
|
||||||
git/test/test_exc.py,sha256=0DBYNiYVfPVlFKYRzqsoZUJnf0lQiUDmdrRIIHWeSlE,5123
|
|
||||||
git/test/test_exc.pyc,,
|
|
||||||
git/test/test_fun.py,sha256=a91XgGk-YPwlgJEc-gy2tI_ilSq29XSQEywwc-kDnG0,10456
|
|
||||||
git/test/test_fun.pyc,,
|
|
||||||
git/test/test_git.py,sha256=Z1TnRsgcvxT9vO09t8_5Z6Vcp5kgqw8iyrggb8aJklA,10681
|
|
||||||
git/test/test_git.pyc,,
|
|
||||||
git/test/test_index.py,sha256=WiHPJNgD5Y00YKJoklTZkPJH0LE-0XEOTrA_2O9rsRs,37014
|
|
||||||
git/test/test_index.pyc,,
|
|
||||||
git/test/test_reflog.py,sha256=vfI-NQCtnGlJEUtYR0_k7Y1Hc4pZQ5F_T4T49hxSnNU,3505
|
|
||||||
git/test/test_reflog.pyc,,
|
|
||||||
git/test/test_refs.py,sha256=2rNm9HdJZTWXx775JHG_R9Pd5X022IQ9C2CbP_9vDoE,23357
|
|
||||||
git/test/test_refs.pyc,,
|
|
||||||
git/test/test_remote.py,sha256=6HuzDH827CjTVklhEUR0di2z78_N61OxJ0t5ZkD0jAw,26426
|
|
||||||
git/test/test_remote.pyc,,
|
|
||||||
git/test/test_repo.py,sha256=-J6Bdz3t0zPNEhjBaN41uZZQAEKZHPMhzNGhih4eYL0,37732
|
|
||||||
git/test/test_repo.pyc,,
|
|
||||||
git/test/test_stats.py,sha256=qmF2lL1wW0tEd17E-tkjmpPFVXzjREf7KW5JMCTQ4Zg,971
|
|
||||||
git/test/test_stats.pyc,,
|
|
||||||
git/test/test_submodule.py,sha256=aO4WTQjfiyUcus2FFAm2UIb-F53KYhe2TvaRvbloXMo,41434
|
|
||||||
git/test/test_submodule.pyc,,
|
|
||||||
git/test/test_tree.py,sha256=nR5OAQZLhv7kISoL3RO8ppkXAbKFYz3XlPAxABU1b4o,4046
|
|
||||||
git/test/test_tree.pyc,,
|
|
||||||
git/test/test_util.py,sha256=oh0ZJbOwPtqmMP3xEFkOsjD4G24-3kpZM9fqjZviLqU,8714
|
|
||||||
git/test/test_util.pyc,,
|
|
||||||
git/util.py,sha256=1mvwDNVbMu5hNGQZmATcYx9QbMhW6ZFRvnq7LtJGajk,32154
|
|
||||||
git/util.pyc,,
|
|
@ -1,6 +0,0 @@
|
|||||||
Wheel-Version: 1.0
|
|
||||||
Generator: bdist_wheel (0.31.1)
|
|
||||||
Root-Is-Purelib: true
|
|
||||||
Tag: py2-none-any
|
|
||||||
Tag: py3-none-any
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
git
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,31 +0,0 @@
|
|||||||
Copyright (c) 2009 by the Jinja Team, see AUTHORS for more details.
|
|
||||||
|
|
||||||
Some rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above
|
|
||||||
copyright notice, this list of conditions and the following
|
|
||||||
disclaimer in the documentation and/or other materials provided
|
|
||||||
with the distribution.
|
|
||||||
|
|
||||||
* The names of the contributors may not be used to endorse or
|
|
||||||
promote products derived from this software without specific
|
|
||||||
prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -1,67 +0,0 @@
|
|||||||
Metadata-Version: 2.1
|
|
||||||
Name: Jinja2
|
|
||||||
Version: 2.10.1
|
|
||||||
Summary: A small but fast and easy to use stand-alone template engine written in pure python.
|
|
||||||
Home-page: http://jinja.pocoo.org/
|
|
||||||
Author: Armin Ronacher
|
|
||||||
Author-email: armin.ronacher@active-4.com
|
|
||||||
License: BSD
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Environment :: Web Environment
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: BSD License
|
|
||||||
Classifier: Operating System :: OS Independent
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.6
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
|
||||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
||||||
Classifier: Topic :: Text Processing :: Markup :: HTML
|
|
||||||
Requires-Dist: MarkupSafe (>=0.23)
|
|
||||||
Provides-Extra: i18n
|
|
||||||
Requires-Dist: Babel (>=0.8) ; extra == 'i18n'
|
|
||||||
|
|
||||||
|
|
||||||
Jinja2
|
|
||||||
~~~~~~
|
|
||||||
|
|
||||||
Jinja2 is a template engine written in pure Python. It provides a
|
|
||||||
`Django`_ inspired non-XML syntax but supports inline expressions and
|
|
||||||
an optional `sandboxed`_ environment.
|
|
||||||
|
|
||||||
Nutshell
|
|
||||||
--------
|
|
||||||
|
|
||||||
Here a small example of a Jinja template::
|
|
||||||
|
|
||||||
{% extends 'base.html' %}
|
|
||||||
{% block title %}Memberlist{% endblock %}
|
|
||||||
{% block content %}
|
|
||||||
<ul>
|
|
||||||
{% for user in users %}
|
|
||||||
<li><a href="{{ user.url }}">{{ user.username }}</a></li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
Philosophy
|
|
||||||
----------
|
|
||||||
|
|
||||||
Application logic is for the controller but don't try to make the life
|
|
||||||
for the template designer too hard by giving him too few functionality.
|
|
||||||
|
|
||||||
For more informations visit the new `Jinja2 webpage`_ and `documentation`_.
|
|
||||||
|
|
||||||
.. _sandboxed: https://en.wikipedia.org/wiki/Sandbox_(computer_security)
|
|
||||||
.. _Django: https://www.djangoproject.com/
|
|
||||||
.. _Jinja2 webpage: http://jinja.pocoo.org/
|
|
||||||
.. _documentation: http://jinja.pocoo.org/2/documentation/
|
|
||||||
|
|
||||||
|
|
@ -1,59 +0,0 @@
|
|||||||
Jinja2-2.10.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
Jinja2-2.10.1.dist-info/LICENSE,sha256=JvzUNv3Io51EiWrAPm8d_SXjhJnEjyDYvB3Tvwqqils,1554
|
|
||||||
Jinja2-2.10.1.dist-info/METADATA,sha256=rx0eN8lX8iq8-YVppmCzV1Qx4y3Pj9IWi08mXUCrewI,2227
|
|
||||||
Jinja2-2.10.1.dist-info/RECORD,,
|
|
||||||
Jinja2-2.10.1.dist-info/WHEEL,sha256=HX-v9-noUkyUoxyZ1PMSuS7auUxDAR4VBdoYLqD0xws,110
|
|
||||||
Jinja2-2.10.1.dist-info/entry_points.txt,sha256=NdzVcOrqyNyKDxD09aERj__3bFx2paZhizFDsKmVhiA,72
|
|
||||||
Jinja2-2.10.1.dist-info/top_level.txt,sha256=PkeVWtLb3-CqjWi1fO29OCbj55EhX_chhKrCdrVe_zs,7
|
|
||||||
jinja2/__init__.py,sha256=V1D-JHQKklZseXOMA-uAW7-BeKe_TfPpOFi9-dV04ZA,2616
|
|
||||||
jinja2/__init__.pyc,,
|
|
||||||
jinja2/_compat.py,sha256=xP60CE5Qr8FTYcDE1f54tbZLKGvMwYml4-8T7Q4KG9k,2596
|
|
||||||
jinja2/_compat.pyc,,
|
|
||||||
jinja2/_identifier.py,sha256=W1QBSY-iJsyt6oR_nKSuNNCzV95vLIOYgUNPUI1d5gU,1726
|
|
||||||
jinja2/_identifier.pyc,,
|
|
||||||
jinja2/asyncfilters.py,sha256=cTDPvrS8Hp_IkwsZ1m9af_lr5nHysw7uTa5gV0NmZVE,4144
|
|
||||||
jinja2/asyncsupport.py,sha256=UErQ3YlTLaSjFb94P4MVn08-aVD9jJxty2JVfMRb-1M,7878
|
|
||||||
jinja2/bccache.py,sha256=nQldx0ZRYANMyfvOihRoYFKSlUdd5vJkS7BjxNwlOZM,12794
|
|
||||||
jinja2/bccache.pyc,,
|
|
||||||
jinja2/compiler.py,sha256=BqC5U6JxObSRhblyT_a6Tp5GtEU5z3US1a4jLQaxxgo,65386
|
|
||||||
jinja2/compiler.pyc,,
|
|
||||||
jinja2/constants.py,sha256=uwwV8ZUhHhacAuz5PTwckfsbqBaqM7aKfyJL7kGX5YQ,1626
|
|
||||||
jinja2/constants.pyc,,
|
|
||||||
jinja2/debug.py,sha256=WTVeUFGUa4v6ReCsYv-iVPa3pkNB75OinJt3PfxNdXs,12045
|
|
||||||
jinja2/debug.pyc,,
|
|
||||||
jinja2/defaults.py,sha256=Em-95hmsJxIenDCZFB1YSvf9CNhe9rBmytN3yUrBcWA,1400
|
|
||||||
jinja2/defaults.pyc,,
|
|
||||||
jinja2/environment.py,sha256=VnkAkqw8JbjZct4tAyHlpBrka2vqB-Z58RAP-32P1ZY,50849
|
|
||||||
jinja2/environment.pyc,,
|
|
||||||
jinja2/exceptions.py,sha256=_Rj-NVi98Q6AiEjYQOsP8dEIdu5AlmRHzcSNOPdWix4,4428
|
|
||||||
jinja2/exceptions.pyc,,
|
|
||||||
jinja2/ext.py,sha256=atMQydEC86tN1zUsdQiHw5L5cF62nDbqGue25Yiu3N4,24500
|
|
||||||
jinja2/ext.pyc,,
|
|
||||||
jinja2/filters.py,sha256=yOAJk0MsH-_gEC0i0U6NweVQhbtYaC-uE8xswHFLF4w,36528
|
|
||||||
jinja2/filters.pyc,,
|
|
||||||
jinja2/idtracking.py,sha256=2GbDSzIvGArEBGLkovLkqEfmYxmWsEf8c3QZwM4uNsw,9197
|
|
||||||
jinja2/idtracking.pyc,,
|
|
||||||
jinja2/lexer.py,sha256=ySEPoXd1g7wRjsuw23uimS6nkGN5aqrYwcOKxCaVMBQ,28559
|
|
||||||
jinja2/lexer.pyc,,
|
|
||||||
jinja2/loaders.py,sha256=xiTuURKAEObyym0nU8PCIXu_Qp8fn0AJ5oIADUUm-5Q,17382
|
|
||||||
jinja2/loaders.pyc,,
|
|
||||||
jinja2/meta.py,sha256=fmKHxkmZYAOm9QyWWy8EMd6eefAIh234rkBMW2X4ZR8,4340
|
|
||||||
jinja2/meta.pyc,,
|
|
||||||
jinja2/nativetypes.py,sha256=_sJhS8f-8Q0QMIC0dm1YEdLyxEyoO-kch8qOL5xUDfE,7308
|
|
||||||
jinja2/nativetypes.pyc,,
|
|
||||||
jinja2/nodes.py,sha256=L10L_nQDfubLhO3XjpF9qz46FSh2clL-3e49ogVlMmA,30853
|
|
||||||
jinja2/nodes.pyc,,
|
|
||||||
jinja2/optimizer.py,sha256=MsdlFACJ0FRdPtjmCAdt7JQ9SGrXFaDNUaslsWQaG3M,1722
|
|
||||||
jinja2/optimizer.pyc,,
|
|
||||||
jinja2/parser.py,sha256=lPzTEbcpTRBLw8ii6OYyExHeAhaZLMA05Hpv4ll3ULk,35875
|
|
||||||
jinja2/parser.pyc,,
|
|
||||||
jinja2/runtime.py,sha256=DHdD38Pq8gj7uWQC5usJyWFoNWL317A9AvXOW_CLB34,27755
|
|
||||||
jinja2/runtime.pyc,,
|
|
||||||
jinja2/sandbox.py,sha256=UmX8hVjdaERCbA3RXBwrV1f-beA23KmijG5kzPJyU4A,17106
|
|
||||||
jinja2/sandbox.pyc,,
|
|
||||||
jinja2/tests.py,sha256=iJQLwbapZr-EKquTG_fVOVdwHUUKf3SX9eNkjQDF8oU,4237
|
|
||||||
jinja2/tests.pyc,,
|
|
||||||
jinja2/utils.py,sha256=q24VupGZotQ-uOyrJxCaXtDWhZC1RgsQG7kcdmjck2Q,20629
|
|
||||||
jinja2/utils.pyc,,
|
|
||||||
jinja2/visitor.py,sha256=JD1H1cANA29JcntFfN5fPyqQxB4bI4wC00BzZa-XHks,3316
|
|
||||||
jinja2/visitor.pyc,,
|
|
@ -1,6 +0,0 @@
|
|||||||
Wheel-Version: 1.0
|
|
||||||
Generator: bdist_wheel (0.33.1)
|
|
||||||
Root-Is-Purelib: true
|
|
||||||
Tag: py2-none-any
|
|
||||||
Tag: py3-none-any
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
|||||||
|
|
||||||
[babel.extractors]
|
|
||||||
jinja2 = jinja2.ext:babel_extract[i18n]
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
jinja2
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,28 +0,0 @@
|
|||||||
Copyright 2010 Pallets
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
3. Neither the name of the copyright holder nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
|
||||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -1,103 +0,0 @@
|
|||||||
Metadata-Version: 2.1
|
|
||||||
Name: MarkupSafe
|
|
||||||
Version: 1.1.1
|
|
||||||
Summary: Safely add untrusted strings to HTML/XML markup.
|
|
||||||
Home-page: https://palletsprojects.com/p/markupsafe/
|
|
||||||
Author: Armin Ronacher
|
|
||||||
Author-email: armin.ronacher@active-4.com
|
|
||||||
Maintainer: The Pallets Team
|
|
||||||
Maintainer-email: contact@palletsprojects.com
|
|
||||||
License: BSD-3-Clause
|
|
||||||
Project-URL: Code, https://github.com/pallets/markupsafe
|
|
||||||
Project-URL: Issue tracker, https://github.com/pallets/markupsafe/issues
|
|
||||||
Project-URL: Documentation, https://markupsafe.palletsprojects.com/
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Environment :: Web Environment
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: BSD License
|
|
||||||
Classifier: Operating System :: OS Independent
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Classifier: Programming Language :: Python :: 3.7
|
|
||||||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
|
||||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
||||||
Classifier: Topic :: Text Processing :: Markup :: HTML
|
|
||||||
Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*
|
|
||||||
|
|
||||||
MarkupSafe
|
|
||||||
==========
|
|
||||||
|
|
||||||
MarkupSafe implements a text object that escapes characters so it is
|
|
||||||
safe to use in HTML and XML. Characters that have special meanings are
|
|
||||||
replaced so that they display as the actual characters. This mitigates
|
|
||||||
injection attacks, meaning untrusted user input can safely be displayed
|
|
||||||
on a page.
|
|
||||||
|
|
||||||
|
|
||||||
Installing
|
|
||||||
----------
|
|
||||||
|
|
||||||
Install and update using `pip`_:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
pip install -U MarkupSafe
|
|
||||||
|
|
||||||
.. _pip: https://pip.pypa.io/en/stable/quickstart/
|
|
||||||
|
|
||||||
|
|
||||||
Examples
|
|
||||||
--------
|
|
||||||
|
|
||||||
.. code-block:: pycon
|
|
||||||
|
|
||||||
>>> from markupsafe import Markup, escape
|
|
||||||
>>> # escape replaces special characters and wraps in Markup
|
|
||||||
>>> escape('<script>alert(document.cookie);</script>')
|
|
||||||
Markup(u'<script>alert(document.cookie);</script>')
|
|
||||||
>>> # wrap in Markup to mark text "safe" and prevent escaping
|
|
||||||
>>> Markup('<strong>Hello</strong>')
|
|
||||||
Markup('<strong>hello</strong>')
|
|
||||||
>>> escape(Markup('<strong>Hello</strong>'))
|
|
||||||
Markup('<strong>hello</strong>')
|
|
||||||
>>> # Markup is a text subclass (str on Python 3, unicode on Python 2)
|
|
||||||
>>> # methods and operators escape their arguments
|
|
||||||
>>> template = Markup("Hello <em>%s</em>")
|
|
||||||
>>> template % '"World"'
|
|
||||||
Markup('Hello <em>"World"</em>')
|
|
||||||
|
|
||||||
|
|
||||||
Donate
|
|
||||||
------
|
|
||||||
|
|
||||||
The Pallets organization develops and supports MarkupSafe and other
|
|
||||||
libraries that use it. In order to grow the community of contributors
|
|
||||||
and users, and allow the maintainers to devote more time to the
|
|
||||||
projects, `please donate today`_.
|
|
||||||
|
|
||||||
.. _please donate today: https://palletsprojects.com/donate
|
|
||||||
|
|
||||||
|
|
||||||
Links
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Website: https://palletsprojects.com/p/markupsafe/
|
|
||||||
* Documentation: https://markupsafe.palletsprojects.com/
|
|
||||||
* License: `BSD-3-Clause <https://github.com/pallets/markupsafe/blob/master/LICENSE.rst>`_
|
|
||||||
* Releases: https://pypi.org/project/MarkupSafe/
|
|
||||||
* Code: https://github.com/pallets/markupsafe
|
|
||||||
* Issue tracker: https://github.com/pallets/markupsafe/issues
|
|
||||||
* Test status:
|
|
||||||
|
|
||||||
* Linux, Mac: https://travis-ci.org/pallets/markupsafe
|
|
||||||
* Windows: https://ci.appveyor.com/project/pallets/markupsafe
|
|
||||||
|
|
||||||
* Test coverage: https://codecov.io/gh/pallets/markupsafe
|
|
||||||
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
|||||||
MarkupSafe-1.1.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
MarkupSafe-1.1.1.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475
|
|
||||||
MarkupSafe-1.1.1.dist-info/METADATA,sha256=tYljLDaWFctZWfLXDP5ju_68TOlbQzJHNnaaX5-HYsA,3570
|
|
||||||
MarkupSafe-1.1.1.dist-info/RECORD,,
|
|
||||||
MarkupSafe-1.1.1.dist-info/WHEEL,sha256=QxB7VA6yWRa_kkOPUXf8_8tuQuhnGxzF7TcwNarQG6Q,109
|
|
||||||
MarkupSafe-1.1.1.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11
|
|
||||||
markupsafe/__init__.py,sha256=oTblO5f9KFM-pvnq9bB0HgElnqkJyqHnFN1Nx2NIvnY,10126
|
|
||||||
markupsafe/__init__.pyc,,
|
|
||||||
markupsafe/_compat.py,sha256=uEW1ybxEjfxIiuTbRRaJpHsPFf4yQUMMKaPgYEC5XbU,558
|
|
||||||
markupsafe/_compat.pyc,,
|
|
||||||
markupsafe/_constants.py,sha256=zo2ajfScG-l1Sb_52EP3MlDCqO7Y1BVHUXXKRsVDRNk,4690
|
|
||||||
markupsafe/_constants.pyc,,
|
|
||||||
markupsafe/_native.py,sha256=d-8S_zzYt2y512xYcuSxq0NeG2DUUvG80wVdTn-4KI8,1873
|
|
||||||
markupsafe/_native.pyc,,
|
|
||||||
markupsafe/_speedups.c,sha256=k0fzEIK3CP6MmMqeY0ob43TP90mVN0DTyn7BAl3RqSg,9884
|
|
||||||
markupsafe/_speedups.so,sha256=kaCCUiEMqpZtO5MSk_96ntDI9al0vtyk_31K4miFZvU,27108
|
|
@ -1,5 +0,0 @@
|
|||||||
Wheel-Version: 1.0
|
|
||||||
Generator: bdist_wheel (0.33.1)
|
|
||||||
Root-Is-Purelib: false
|
|
||||||
Tag: cp27-cp27m-macosx_10_6_intel
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
markupsafe
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,174 +0,0 @@
|
|||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
@ -1,196 +0,0 @@
|
|||||||
Metadata-Version: 2.1
|
|
||||||
Name: PyNaCl
|
|
||||||
Version: 1.3.0
|
|
||||||
Summary: Python binding to the Networking and Cryptography (NaCl) library
|
|
||||||
Home-page: https://github.com/pyca/pynacl/
|
|
||||||
Author: The PyNaCl developers
|
|
||||||
Author-email: cryptography-dev@python.org
|
|
||||||
License: Apache License 2.0
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
||||||
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Classifier: Programming Language :: Python :: 3.7
|
|
||||||
Provides-Extra: docs
|
|
||||||
Provides-Extra: tests
|
|
||||||
Requires-Dist: six
|
|
||||||
Requires-Dist: cffi (>=1.4.1)
|
|
||||||
Provides-Extra: docs
|
|
||||||
Requires-Dist: sphinx (>=1.6.5); extra == 'docs'
|
|
||||||
Requires-Dist: sphinx-rtd-theme; extra == 'docs'
|
|
||||||
Provides-Extra: tests
|
|
||||||
Requires-Dist: pytest (!=3.3.0,>=3.2.1); extra == 'tests'
|
|
||||||
Requires-Dist: hypothesis (>=3.27.0); extra == 'tests'
|
|
||||||
|
|
||||||
===============================================
|
|
||||||
PyNaCl: Python binding to the libsodium library
|
|
||||||
===============================================
|
|
||||||
|
|
||||||
.. image:: https://img.shields.io/pypi/v/pynacl.svg
|
|
||||||
:target: https://pypi.org/project/PyNaCl/
|
|
||||||
:alt: Latest Version
|
|
||||||
|
|
||||||
.. image:: https://travis-ci.org/pyca/pynacl.svg?branch=master
|
|
||||||
:target: https://travis-ci.org/pyca/pynacl
|
|
||||||
|
|
||||||
.. image:: https://codecov.io/github/pyca/pynacl/coverage.svg?branch=master
|
|
||||||
:target: https://codecov.io/github/pyca/pynacl?branch=master
|
|
||||||
|
|
||||||
PyNaCl is a Python binding to `libsodium`_, which is a fork of the
|
|
||||||
`Networking and Cryptography library`_. These libraries have a stated goal of
|
|
||||||
improving usability, security and speed. It supports Python 2.7 and 3.4+ as
|
|
||||||
well as PyPy 2.6+.
|
|
||||||
|
|
||||||
.. _libsodium: https://github.com/jedisct1/libsodium
|
|
||||||
.. _Networking and Cryptography library: https://nacl.cr.yp.to/
|
|
||||||
|
|
||||||
Features
|
|
||||||
--------
|
|
||||||
|
|
||||||
* Digital signatures
|
|
||||||
* Secret-key encryption
|
|
||||||
* Public-key encryption
|
|
||||||
* Hashing and message authentication
|
|
||||||
* Password based key derivation and password hashing
|
|
||||||
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
Binary wheel install
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
PyNaCl ships as a binary wheel on OS X, Windows and Linux ``manylinux1`` [#many]_ ,
|
|
||||||
so all dependencies are included. Make sure you have an up-to-date pip
|
|
||||||
and run:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ pip install pynacl
|
|
||||||
|
|
||||||
Linux source build
|
|
||||||
------------------
|
|
||||||
|
|
||||||
PyNaCl relies on `libsodium`_, a portable C library. A copy is bundled
|
|
||||||
with PyNaCl so to install you can run:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ pip install pynacl
|
|
||||||
|
|
||||||
If you'd prefer to use the version of ``libsodium`` provided by your
|
|
||||||
distribution, you can disable the bundled copy during install by running:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ SODIUM_INSTALL=system pip install pynacl
|
|
||||||
|
|
||||||
.. warning:: Usage of the legacy ``easy_install`` command provided by setuptools
|
|
||||||
is generally discouraged, and is completely unsupported in PyNaCl's case.
|
|
||||||
|
|
||||||
.. _libsodium: https://github.com/jedisct1/libsodium
|
|
||||||
|
|
||||||
.. [#many] `manylinux1 wheels <https://www.python.org/dev/peps/pep-0513/>`_
|
|
||||||
are built on a baseline linux environment based on Centos 5.11
|
|
||||||
and should work on most x86 and x86_64 glibc based linux environments.
|
|
||||||
|
|
||||||
Changelog
|
|
||||||
=========
|
|
||||||
|
|
||||||
1.3.0 2018-09-26
|
|
||||||
----------------
|
|
||||||
|
|
||||||
* Added support for Python 3.7.
|
|
||||||
* Update ``libsodium`` to 1.0.16.
|
|
||||||
* Run and test all code examples in PyNaCl docs through sphinx's
|
|
||||||
doctest builder.
|
|
||||||
* Add low-level bindings for chacha20-poly1305 AEAD constructions.
|
|
||||||
* Add low-level bindings for the chacha20-poly1305 secretstream constructions.
|
|
||||||
* Add low-level bindings for ed25519ph pre-hashed signing construction.
|
|
||||||
* Add low-level bindings for constant-time increment and addition
|
|
||||||
on fixed-precision big integers represented as little-endian
|
|
||||||
byte sequences.
|
|
||||||
* Add low-level bindings for the ISO/IEC 7816-4 compatible padding API.
|
|
||||||
* Add low-level bindings for libsodium's crypto_kx... key exchange
|
|
||||||
construction.
|
|
||||||
* Set hypothesis deadline to None in tests/test_pwhash.py to avoid
|
|
||||||
incorrect test failures on slower processor architectures. GitHub
|
|
||||||
issue #370
|
|
||||||
|
|
||||||
1.2.1 - 2017-12-04
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* Update hypothesis minimum allowed version.
|
|
||||||
* Infrastructure: add proper configuration for readthedocs builder
|
|
||||||
runtime environment.
|
|
||||||
|
|
||||||
1.2.0 - 2017-11-01
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* Update ``libsodium`` to 1.0.15.
|
|
||||||
* Infrastructure: add jenkins support for automatic build of
|
|
||||||
``manylinux1`` binary wheels
|
|
||||||
* Added support for ``SealedBox`` construction.
|
|
||||||
* Added support for ``argon2i`` and ``argon2id`` password hashing constructs
|
|
||||||
and restructured high-level password hashing implementation to expose
|
|
||||||
the same interface for all hashers.
|
|
||||||
* Added support for 128 bit ``siphashx24`` variant of ``siphash24``.
|
|
||||||
* Added support for ``from_seed`` APIs for X25519 keypair generation.
|
|
||||||
* Dropped support for Python 3.3.
|
|
||||||
|
|
||||||
1.1.2 - 2017-03-31
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* reorder link time library search path when using bundled
|
|
||||||
libsodium
|
|
||||||
|
|
||||||
1.1.1 - 2017-03-15
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* Fixed a circular import bug in ``nacl.utils``.
|
|
||||||
|
|
||||||
1.1.0 - 2017-03-14
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* Dropped support for Python 2.6.
|
|
||||||
* Added ``shared_key()`` method on ``Box``.
|
|
||||||
* You can now pass ``None`` to ``nonce`` when encrypting with ``Box`` or
|
|
||||||
``SecretBox`` and it will automatically generate a random nonce.
|
|
||||||
* Added support for ``siphash24``.
|
|
||||||
* Added support for ``blake2b``.
|
|
||||||
* Added support for ``scrypt``.
|
|
||||||
* Update ``libsodium`` to 1.0.11.
|
|
||||||
* Default to the bundled ``libsodium`` when compiling.
|
|
||||||
* All raised exceptions are defined mixing-in
|
|
||||||
``nacl.exceptions.CryptoError``
|
|
||||||
|
|
||||||
1.0.1 - 2016-01-24
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* Fix an issue with absolute paths that prevented the creation of wheels.
|
|
||||||
|
|
||||||
1.0 - 2016-01-23
|
|
||||||
----------------
|
|
||||||
|
|
||||||
* PyNaCl has been ported to use the new APIs available in cffi 1.0+.
|
|
||||||
Due to this change we no longer support PyPy releases older than 2.6.
|
|
||||||
* Python 3.2 support has been dropped.
|
|
||||||
* Functions to convert between Ed25519 and Curve25519 keys have been added.
|
|
||||||
|
|
||||||
0.3.0 - 2015-03-04
|
|
||||||
------------------
|
|
||||||
|
|
||||||
* The low-level API (`nacl.c.*`) has been changed to match the
|
|
||||||
upstream NaCl C/C++ conventions (as well as those of other NaCl bindings).
|
|
||||||
The order of arguments and return values has changed significantly. To
|
|
||||||
avoid silent failures, `nacl.c` has been removed, and replaced with
|
|
||||||
`nacl.bindings` (with the new argument ordering). If you have code which
|
|
||||||
calls these functions (e.g. `nacl.c.crypto_box_keypair()`), you must review
|
|
||||||
the new docstrings and update your code/imports to match the new
|
|
||||||
conventions.
|
|
||||||
|
|
||||||
|
|
@ -1,65 +0,0 @@
|
|||||||
PyNaCl-1.3.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
PyNaCl-1.3.0.dist-info/LICENSE.txt,sha256=0xdK1j5yHUydzLitQyCEiZLTFDabxGMZcgtYAskVP-k,9694
|
|
||||||
PyNaCl-1.3.0.dist-info/METADATA,sha256=pl3lEk7jyuFK7MNHloWA3m28tYU6xHI-S4le43id_x8,6632
|
|
||||||
PyNaCl-1.3.0.dist-info/RECORD,,
|
|
||||||
PyNaCl-1.3.0.dist-info/WHEEL,sha256=F1TCjYjTFxks-nqiDpERoLzySPhR94sDPjBYFZlcSxk,109
|
|
||||||
PyNaCl-1.3.0.dist-info/top_level.txt,sha256=wfdEOI_G2RIzmzsMyhpqP17HUh6Jcqi99to9aHLEslo,13
|
|
||||||
nacl/__init__.py,sha256=PS9BuXZoCwSvrDpB8HXldTHnA6lb4y00IRi3uqdW5_E,1170
|
|
||||||
nacl/__init__.pyc,,
|
|
||||||
nacl/_sodium.so,sha256=Rc6lNbEnFWTq2gjp4TmnvSXd1n97w59z2YmGShGcRkI,749348
|
|
||||||
nacl/bindings/__init__.py,sha256=dNH1zFjW87qszsld5oy6xMf2S1w2v_qshQwYHp66pz4,14943
|
|
||||||
nacl/bindings/__init__.pyc,,
|
|
||||||
nacl/bindings/crypto_aead.py,sha256=DE5zdi09GeHZxvmrhHtxVuTqF61y1cs8trTGh_6uP8Q,17335
|
|
||||||
nacl/bindings/crypto_aead.pyc,,
|
|
||||||
nacl/bindings/crypto_box.py,sha256=hbHJetr9id5OvkbJwJoeqRQAhqSIGwWC2aXRAF5oPE4,9708
|
|
||||||
nacl/bindings/crypto_box.pyc,,
|
|
||||||
nacl/bindings/crypto_generichash.py,sha256=-e4b4DaopLBQHhEjLSjEoumy5fOs4QdTb-hou1S34C4,8010
|
|
||||||
nacl/bindings/crypto_generichash.pyc,,
|
|
||||||
nacl/bindings/crypto_hash.py,sha256=7Xp4mpXr4cpn-hAOU66KlYVUCVHP6deT0v_eW4UZZXo,2243
|
|
||||||
nacl/bindings/crypto_hash.pyc,,
|
|
||||||
nacl/bindings/crypto_kx.py,sha256=2Gjxu5c7IKAwW2MOJa9zEn1EgpIVQ0tbZQs33REZb38,6937
|
|
||||||
nacl/bindings/crypto_kx.pyc,,
|
|
||||||
nacl/bindings/crypto_pwhash.py,sha256=lWhEFKmXzFhKnzzxtWDwozs0CseZDkGgTJaI4YQ5rak,16898
|
|
||||||
nacl/bindings/crypto_pwhash.pyc,,
|
|
||||||
nacl/bindings/crypto_scalarmult.py,sha256=VA2khmlUrnR24KK0CAdDw2dQ0jiYkku9-_NA-f1p21c,1803
|
|
||||||
nacl/bindings/crypto_scalarmult.pyc,,
|
|
||||||
nacl/bindings/crypto_secretbox.py,sha256=luvzB3lwBwXxKm63e9nA2neGtOXeeG8R9SyWEckIqdI,2864
|
|
||||||
nacl/bindings/crypto_secretbox.pyc,,
|
|
||||||
nacl/bindings/crypto_secretstream.py,sha256=gdKinW10jP3CZ51hanE40s6e39rz8iuajdXTSBSKVcM,10474
|
|
||||||
nacl/bindings/crypto_secretstream.pyc,,
|
|
||||||
nacl/bindings/crypto_shorthash.py,sha256=eVUE8byB1RjI0AoHib5BdZSSLtSqtdIcHgPCPWf2OZM,2189
|
|
||||||
nacl/bindings/crypto_shorthash.pyc,,
|
|
||||||
nacl/bindings/crypto_sign.py,sha256=uA0RdHM4vsBDNhph2f7fcuI_9K8vvW-4hNHjajTIVU0,9641
|
|
||||||
nacl/bindings/crypto_sign.pyc,,
|
|
||||||
nacl/bindings/randombytes.py,sha256=eThts6s-9xBXOl3GNzT57fV1dZUhzPjjAmAVIUHfcrc,988
|
|
||||||
nacl/bindings/randombytes.pyc,,
|
|
||||||
nacl/bindings/sodium_core.py,sha256=52z0K7y6Ge6IlXcysWDVN7UdYcTOij6v0Cb0OLo8_Qc,1079
|
|
||||||
nacl/bindings/sodium_core.pyc,,
|
|
||||||
nacl/bindings/utils.py,sha256=jOKsDbsjxN9v_HI8DOib72chyU3byqbynXxbiV909-g,4420
|
|
||||||
nacl/bindings/utils.pyc,,
|
|
||||||
nacl/encoding.py,sha256=tOiyIQVVpGU6A4Lzr0tMuqomhc_Aj0V_c1t56a-ZtPw,1928
|
|
||||||
nacl/encoding.pyc,,
|
|
||||||
nacl/exceptions.py,sha256=SG0BNtXnzmppI9in6xMTSizh1ryfgUIvIVMQv_A0bs8,1858
|
|
||||||
nacl/exceptions.pyc,,
|
|
||||||
nacl/hash.py,sha256=4DKlmqpWOZJLhzTPk7_JSGXQ32lJULsS3AzJCGsibus,5928
|
|
||||||
nacl/hash.pyc,,
|
|
||||||
nacl/hashlib.py,sha256=gMxOu-lIlKYr3ywSCjsJRBksYgpU2dvXgaAEfQz7PEg,3909
|
|
||||||
nacl/hashlib.pyc,,
|
|
||||||
nacl/public.py,sha256=-nwQof5ov-wSSdvvoXh-FavTtjfpRnYykZkatNKyLd0,13442
|
|
||||||
nacl/public.pyc,,
|
|
||||||
nacl/pwhash/__init__.py,sha256=CN0mP6yteSYp3ui-DyWR1vjULNrXVN_gQ72CmTPoao0,2695
|
|
||||||
nacl/pwhash/__init__.pyc,,
|
|
||||||
nacl/pwhash/_argon2.py,sha256=Eu3-juLws3_v1gNy5aeSVPEwuRVFdGOrfeF0wPH9VHA,1878
|
|
||||||
nacl/pwhash/_argon2.pyc,,
|
|
||||||
nacl/pwhash/argon2i.py,sha256=EpheK0UHJvZYca_EMhhOcX5GXaOr0xCjFDTIgmSCSDo,4598
|
|
||||||
nacl/pwhash/argon2i.pyc,,
|
|
||||||
nacl/pwhash/argon2id.py,sha256=IqNm5RQNEd1Z9F-bEWT-_Y9noU26QoTR5YdWONg1uuI,4610
|
|
||||||
nacl/pwhash/argon2id.pyc,,
|
|
||||||
nacl/pwhash/scrypt.py,sha256=F9iUKbzZUMG2ZXuuk70p4KXI_nItue3VA39zmwOESE8,6025
|
|
||||||
nacl/pwhash/scrypt.pyc,,
|
|
||||||
nacl/secret.py,sha256=jf4WuUjnnXTekZ2elGgQozZl6zGzxGY_0Nw0fwehUlg,5430
|
|
||||||
nacl/secret.pyc,,
|
|
||||||
nacl/signing.py,sha256=ZwA1l31ZgOIw_sAjiUPkzEo07uYYi8SE7Ni0G_R8ksQ,7302
|
|
||||||
nacl/signing.pyc,,
|
|
||||||
nacl/utils.py,sha256=hhmIriBM7Bwyh3beTrqVqDDucai5gXlSliAMVrxIHPI,1691
|
|
||||||
nacl/utils.pyc,,
|
|
@ -1,5 +0,0 @@
|
|||||||
Wheel-Version: 1.0
|
|
||||||
Generator: bdist_wheel (0.31.1)
|
|
||||||
Root-Is-Purelib: false
|
|
||||||
Tag: cp27-cp27m-macosx_10_6_intel
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
_sodium
|
|
||||||
nacl
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,20 +0,0 @@
|
|||||||
Copyright (c) 2017-2019 Ingy döt Net
|
|
||||||
Copyright (c) 2006-2016 Kirill Simonov
|
|
||||||
|
|
||||||
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.
|
|
@ -1,40 +0,0 @@
|
|||||||
Metadata-Version: 2.1
|
|
||||||
Name: PyYAML
|
|
||||||
Version: 5.1
|
|
||||||
Summary: YAML parser and emitter for Python
|
|
||||||
Home-page: https://github.com/yaml/pyyaml
|
|
||||||
Author: Kirill Simonov
|
|
||||||
Author-email: xi@resolvent.net
|
|
||||||
License: MIT
|
|
||||||
Download-URL: https://pypi.org/project/PyYAML/
|
|
||||||
Platform: Any
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: MIT License
|
|
||||||
Classifier: Operating System :: OS Independent
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Classifier: Programming Language :: Python :: 3.7
|
|
||||||
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
||||||
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
||||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
||||||
Classifier: Topic :: Text Processing :: Markup
|
|
||||||
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
|
|
||||||
|
|
||||||
YAML is a data serialization format designed for human readability
|
|
||||||
and interaction with scripting languages. PyYAML is a YAML parser
|
|
||||||
and emitter for Python.
|
|
||||||
|
|
||||||
PyYAML features a complete YAML 1.1 parser, Unicode support, pickle
|
|
||||||
support, capable extension API, and sensible error messages. PyYAML
|
|
||||||
supports standard YAML tags and provides Python-specific tags that
|
|
||||||
allow to represent an arbitrary Python object.
|
|
||||||
|
|
||||||
PyYAML is applicable for a broad range of tasks from complex
|
|
||||||
configuration files to object serialization and persistence.
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
PyYAML-5.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
PyYAML-5.1.dist-info/LICENSE,sha256=oq25yVm3l0lKDvgL32DiLbJ0nuPgwJCFVuPrVI-WfFY,1101
|
|
||||||
PyYAML-5.1.dist-info/METADATA,sha256=33vAx8vSzjUMXGHO2jp0u8tvgkRqfAH3-OEDSpjfIx8,1704
|
|
||||||
PyYAML-5.1.dist-info/RECORD,,
|
|
||||||
PyYAML-5.1.dist-info/WHEEL,sha256=X60NSjsla4d4ueip-xFdVMnfiCIypBW0CA59NCWilHY,110
|
|
||||||
PyYAML-5.1.dist-info/top_level.txt,sha256=rpj0IVMTisAjh_1vG3Ccf9v5jpCQwAz6cD1IVU5ZdhQ,11
|
|
||||||
yaml/__init__.py,sha256=Ke2gASae4i0HLUxbz8l2CUR3__qpspvBBI1gltOxQbE,12182
|
|
||||||
yaml/__init__.pyc,,
|
|
||||||
yaml/composer.py,sha256=TtvWJCaffdVHhHx_muLguloDUwg1NUbo-GlJ0me6xuA,4923
|
|
||||||
yaml/composer.pyc,,
|
|
||||||
yaml/constructor.py,sha256=HrBLwPOrijfcmurB4Ww71xrTtMKehs0-xh3NNlQzveY,26834
|
|
||||||
yaml/constructor.pyc,,
|
|
||||||
yaml/cyaml.py,sha256=6MZKSJHTWwoct5urK9qbGXAhM1xz_Boawlf5SVMC85o,3842
|
|
||||||
yaml/cyaml.pyc,,
|
|
||||||
yaml/dumper.py,sha256=yMFwlojOY-M4EMUT8FiROY2QC2GAGQO7Iiky0xBlJFc,2833
|
|
||||||
yaml/dumper.pyc,,
|
|
||||||
yaml/emitter.py,sha256=09BwSivdd4BbPgx2rbFcoMOa9H1yZxqY1YILjOXvFeo,43427
|
|
||||||
yaml/emitter.pyc,,
|
|
||||||
yaml/error.py,sha256=7K-NdIv0qNKPKbnXxEg0L_b9K7nYDORr3rzm8_b-iBY,2559
|
|
||||||
yaml/error.pyc,,
|
|
||||||
yaml/events.py,sha256=50_TksgQiE4up-lKo_V-nBy-tAIxkIPQxY5qDhKCeHw,2445
|
|
||||||
yaml/events.pyc,,
|
|
||||||
yaml/loader.py,sha256=T61DzDkbfResZoQfVy1U3vN0_mKFyBALB9et-478-w4,2055
|
|
||||||
yaml/loader.pyc,,
|
|
||||||
yaml/nodes.py,sha256=gPKNj8pKCdh2d4gr3gIYINnPOaOxGhJAUiYhGRnPE84,1440
|
|
||||||
yaml/nodes.pyc,,
|
|
||||||
yaml/parser.py,sha256=sgXahZA3DkySYnaC4D_zcl3l2y4Y5R40icWtdwkF_NE,25542
|
|
||||||
yaml/parser.pyc,,
|
|
||||||
yaml/reader.py,sha256=y6cj-OcZjnFDO1u6Blmi-tKoi-3Pjvmo2PikMnO5FFc,6850
|
|
||||||
yaml/reader.pyc,,
|
|
||||||
yaml/representer.py,sha256=BaJcXjs4a1yjYMnCKxJ39TZlWahVu2OE7K6dEEy0Bqo,17791
|
|
||||||
yaml/representer.pyc,,
|
|
||||||
yaml/resolver.py,sha256=5Z3boiMikL6Qt6fS5Mt8fHym0GxbW7CMT2f2fnD1ZPQ,9122
|
|
||||||
yaml/resolver.pyc,,
|
|
||||||
yaml/scanner.py,sha256=Umb0oXZGFIf814tr_CUPPfKfeWUZj9ucqz06q20v0Fg,52027
|
|
||||||
yaml/scanner.pyc,,
|
|
||||||
yaml/serializer.py,sha256=tRsRwfu5E9fpLU7LY3vBQf2prt77hwnYlMt5dnBJLig,4171
|
|
||||||
yaml/serializer.pyc,,
|
|
||||||
yaml/tokens.py,sha256=lTQIzSVw8Mg9wv459-TjiOQe6wVziqaRlqX2_89rp54,2573
|
|
||||||
yaml/tokens.pyc,,
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user