Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
news
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Sartika Aritonang
news
Commits
72571da3
Commit
72571da3
authored
4 years ago
by
Sartika Aritonang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Upload New File
parent
5ed4a3bc
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
228 additions
and
0 deletions
+228
-0
base_command.py
stbi/Lib/site-packages/pip/_internal/cli/base_command.py
+228
-0
No files found.
stbi/Lib/site-packages/pip/_internal/cli/base_command.py
0 → 100644
View file @
72571da3
"""Base Command class, and related routines"""
from
__future__
import
absolute_import
,
print_function
import
logging
import
logging.config
import
optparse
import
os
import
platform
import
sys
import
traceback
from
pip._internal.cli
import
cmdoptions
from
pip._internal.cli.command_context
import
CommandContextMixIn
from
pip._internal.cli.parser
import
(
ConfigOptionParser
,
UpdatingDefaultsHelpFormatter
,
)
from
pip._internal.cli.status_codes
import
(
ERROR
,
PREVIOUS_BUILD_DIR_ERROR
,
SUCCESS
,
UNKNOWN_ERROR
,
VIRTUALENV_NOT_FOUND
,
)
from
pip._internal.exceptions
import
(
BadCommand
,
CommandError
,
InstallationError
,
PreviousBuildDirError
,
UninstallationError
,
)
from
pip._internal.utils.deprecation
import
deprecated
from
pip._internal.utils.filesystem
import
check_path_owner
from
pip._internal.utils.logging
import
BrokenStdoutLoggingError
,
setup_logging
from
pip._internal.utils.misc
import
get_prog
,
normalize_path
from
pip._internal.utils.temp_dir
import
(
global_tempdir_manager
,
tempdir_registry
,
)
from
pip._internal.utils.typing
import
MYPY_CHECK_RUNNING
from
pip._internal.utils.virtualenv
import
running_under_virtualenv
if
MYPY_CHECK_RUNNING
:
from
typing
import
List
,
Optional
,
Tuple
,
Any
from
optparse
import
Values
from
pip._internal.utils.temp_dir
import
(
TempDirectoryTypeRegistry
as
TempDirRegistry
)
__all__
=
[
'Command'
]
logger
=
logging
.
getLogger
(
__name__
)
class
Command
(
CommandContextMixIn
):
usage
=
None
# type: str
ignore_require_venv
=
False
# type: bool
def
__init__
(
self
,
name
,
summary
,
isolated
=
False
):
# type: (str, str, bool) -> None
super
(
Command
,
self
)
.
__init__
()
parser_kw
=
{
'usage'
:
self
.
usage
,
'prog'
:
'{} {}'
.
format
(
get_prog
(),
name
),
'formatter'
:
UpdatingDefaultsHelpFormatter
(),
'add_help_option'
:
False
,
'name'
:
name
,
'description'
:
self
.
__doc__
,
'isolated'
:
isolated
,
}
self
.
name
=
name
self
.
summary
=
summary
self
.
parser
=
ConfigOptionParser
(
**
parser_kw
)
self
.
tempdir_registry
=
None
# type: Optional[TempDirRegistry]
# Commands should add options to this option group
optgroup_name
=
'{} Options'
.
format
(
self
.
name
.
capitalize
())
self
.
cmd_opts
=
optparse
.
OptionGroup
(
self
.
parser
,
optgroup_name
)
# Add the general options
gen_opts
=
cmdoptions
.
make_option_group
(
cmdoptions
.
general_group
,
self
.
parser
,
)
self
.
parser
.
add_option_group
(
gen_opts
)
def
handle_pip_version_check
(
self
,
options
):
# type: (Values) -> None
"""
This is a no-op so that commands by default do not do the pip version
check.
"""
# Make sure we do the pip version check if the index_group options
# are present.
assert
not
hasattr
(
options
,
'no_index'
)
def
run
(
self
,
options
,
args
):
# type: (Values, List[Any]) -> Any
raise
NotImplementedError
def
parse_args
(
self
,
args
):
# type: (List[str]) -> Tuple[Any, Any]
# factored out for testability
return
self
.
parser
.
parse_args
(
args
)
def
main
(
self
,
args
):
# type: (List[str]) -> int
try
:
with
self
.
main_context
():
return
self
.
_main
(
args
)
finally
:
logging
.
shutdown
()
def
_main
(
self
,
args
):
# type: (List[str]) -> int
# We must initialize this before the tempdir manager, otherwise the
# configuration would not be accessible by the time we clean up the
# tempdir manager.
self
.
tempdir_registry
=
self
.
enter_context
(
tempdir_registry
())
# Intentionally set as early as possible so globally-managed temporary
# directories are available to the rest of the code.
self
.
enter_context
(
global_tempdir_manager
())
options
,
args
=
self
.
parse_args
(
args
)
# Set verbosity so that it can be used elsewhere.
self
.
verbosity
=
options
.
verbose
-
options
.
quiet
level_number
=
setup_logging
(
verbosity
=
self
.
verbosity
,
no_color
=
options
.
no_color
,
user_log_file
=
options
.
log
,
)
if
(
sys
.
version_info
[:
2
]
==
(
2
,
7
)
and
not
options
.
no_python_version_warning
):
message
=
(
"pip 21.0 will drop support for Python 2.7 in January 2021. "
"More details about Python 2 support in pip, can be found at "
"https://pip.pypa.io/en/latest/development/release-process/#python-2-support"
# noqa
)
if
platform
.
python_implementation
()
==
"CPython"
:
message
=
(
"Python 2.7 reached the end of its life on January "
"1st, 2020. Please upgrade your Python as Python 2.7 "
"is no longer maintained. "
)
+
message
deprecated
(
message
,
replacement
=
None
,
gone_in
=
None
)
# TODO: Try to get these passing down from the command?
# without resorting to os.environ to hold these.
# This also affects isolated builds and it should.
if
options
.
no_input
:
os
.
environ
[
'PIP_NO_INPUT'
]
=
'1'
if
options
.
exists_action
:
os
.
environ
[
'PIP_EXISTS_ACTION'
]
=
' '
.
join
(
options
.
exists_action
)
if
options
.
require_venv
and
not
self
.
ignore_require_venv
:
# If a venv is required check if it can really be found
if
not
running_under_virtualenv
():
logger
.
critical
(
'Could not find an activated virtualenv (required).'
)
sys
.
exit
(
VIRTUALENV_NOT_FOUND
)
if
options
.
cache_dir
:
options
.
cache_dir
=
normalize_path
(
options
.
cache_dir
)
if
not
check_path_owner
(
options
.
cache_dir
):
logger
.
warning
(
"The directory '
%
s' or its parent directory is not owned "
"or is not writable by the current user. The cache "
"has been disabled. Check the permissions and owner of "
"that directory. If executing pip with sudo, you may want "
"sudo's -H flag."
,
options
.
cache_dir
,
)
options
.
cache_dir
=
None
try
:
status
=
self
.
run
(
options
,
args
)
# FIXME: all commands should return an exit status
# and when it is done, isinstance is not needed anymore
if
isinstance
(
status
,
int
):
return
status
except
PreviousBuildDirError
as
exc
:
logger
.
critical
(
str
(
exc
))
logger
.
debug
(
'Exception information:'
,
exc_info
=
True
)
return
PREVIOUS_BUILD_DIR_ERROR
except
(
InstallationError
,
UninstallationError
,
BadCommand
)
as
exc
:
logger
.
critical
(
str
(
exc
))
logger
.
debug
(
'Exception information:'
,
exc_info
=
True
)
return
ERROR
except
CommandError
as
exc
:
logger
.
critical
(
'
%
s'
,
exc
)
logger
.
debug
(
'Exception information:'
,
exc_info
=
True
)
return
ERROR
except
BrokenStdoutLoggingError
:
# Bypass our logger and write any remaining messages to stderr
# because stdout no longer works.
print
(
'ERROR: Pipe to stdout was broken'
,
file
=
sys
.
stderr
)
if
level_number
<=
logging
.
DEBUG
:
traceback
.
print_exc
(
file
=
sys
.
stderr
)
return
ERROR
except
KeyboardInterrupt
:
logger
.
critical
(
'Operation cancelled by user'
)
logger
.
debug
(
'Exception information:'
,
exc_info
=
True
)
return
ERROR
except
BaseException
:
logger
.
critical
(
'Exception:'
,
exc_info
=
True
)
return
UNKNOWN_ERROR
finally
:
self
.
handle_pip_version_check
(
options
)
return
SUCCESS
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment