Hello community,
here is the log from the commit of package python-argcomplete for
openSUSE:Factory checked in at 2017-10-05 12:02:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-argcomplete (Old)
and /work/SRC/openSUSE:Factory/.python-argcomplete.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-argcomplete"
Thu Oct 5 12:02:49 2017 rev:8 rq:531242 version:1.9.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-argcomplete/python-argcomplete.changes
2017-07-21 22:50:43.857457082 +0200
+++
/work/SRC/openSUSE:Factory/.python-argcomplete.new/python-argcomplete.changes
2017-10-05 12:06:41.209887335 +0200
@@ -1,0 +2,20 @@
+Fri Sep 15 13:49:08 UTC 2017 - [email protected]
+
+- New upstream release
+ + Version 1.9.2
+- Update patch to skip broken tcsh tests
+ + skip_tcsh_tests.patch
+- Fix issues with singlespec auto-conversion
+ + Install %{python_sitelib}/bash_completion.d/python-argcomplete.sh
+ into %{_sysconfdir}/bash_completion.d/
+ + Use %python_clone to create both Python 2 and Python 3 versions
+ of all scripts below /usr/bin and /etc/bash_completion.d
+ with the %{python_version} suffix; also install the Python 3
+ versions without the suffix
+
+-------------------------------------------------------------------
+Thu Aug 24 13:32:49 UTC 2017 - [email protected]
+
+- singlespec auto-conversion
+
+-------------------------------------------------------------------
@@ -117 +136,0 @@
-
Old:
----
argcomplete-1.8.2.tar.gz
New:
----
argcomplete-1.9.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-argcomplete.spec ++++++
--- /var/tmp/diff_new_pack.2YES4U/_old 2017-10-05 12:06:44.393438916 +0200
+++ /var/tmp/diff_new_pack.2YES4U/_new 2017-10-05 12:06:44.397438353 +0200
@@ -18,8 +18,9 @@
%{!?license: %global license %doc}
+%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-argcomplete
-Version: 1.8.2
+Version: 1.9.2
Release: 0
Summary: Bash tab completion for argparse
License: Apache-2.0
@@ -27,18 +28,18 @@
Url: https://github.com/kislyuk/argcomplete
Source:
https://files.pythonhosted.org/packages/source/a/argcomplete/argcomplete-%{version}.tar.gz
Patch0: skip_tcsh_tests.patch
-BuildRequires: python-devel
-BuildRequires: python-setuptools
+BuildRequires: %{python_module devel}
+BuildRequires: %{python_module setuptools}
+BuildRequires: python-rpm-macros
# SECTION tests
-BuildRequires: python-coverage
-BuildRequires: python-flake8
-BuildRequires: python-pexpect
-BuildRequires: python-wheel
+BuildRequires: %{python_module coverage}
+BuildRequires: %{python_module flake8}
+BuildRequires: %{python_module pexpect}
+BuildRequires: %{python_module wheel}
# END SECTIONS tests
Requires: python-wheel
-Requires(post): update-alternatives
-Requires(postun): update-alternatives
BuildArch: noarch
+%python_subpackages
%description
Argcomplete provides easy, extensible command line tab completion of
@@ -56,46 +57,37 @@
%prep
%setup -q -n argcomplete-%{version}
-%patch0
+%patch0 -p1
%build
-python setup.py build
+%python_build
%install
-python setup.py install --prefix=%{_prefix} --root=%{buildroot}
+%python_install
rm -rf %{buildroot}%{python_sitelib}/test
rm %{buildroot}%{_bindir}/activate-global-python-argcomplete
-rm %{buildroot}%{_bindir}/register-python-argcomplete
-mv %{buildroot}%{_bindir}/python-argcomplete-check-easy-install-script \
-
%{buildroot}%{_bindir}/python-argcomplete-check-easy-install-script-%{python_version}
-mkdir -p %{buildroot}%{_sysconfdir}/bash_completion.d/
-ln -sf %{_sysconfdir}/alternatives/python-argcomplete.sh
%{buildroot}%{_sysconfdir}/bash_completion.d/
-ln -sf
%{_sysconfdir}/alternatives/python-argcomplete-check-easy-install-script
%{buildroot}%{_bindir}/python-argcomplete-check-easy-install-script
+%python_clone
%{buildroot}%{_bindir}/python-argcomplete-check-easy-install-script
+%python_clone %{buildroot}%{_bindir}/register-python-argcomplete
+install -DTm644
%{buildroot}%{python_sitelib}/argcomplete/bash_completion.d/python-argcomplete.sh
%{buildroot}%{_sysconfdir}/bash_completion.d/python-argcomplete.sh
+%python_clone
%{buildroot}%{_sysconfdir}/bash_completion.d/python-argcomplete.sh
# tcsh support is broken
rm %{buildroot}%{_bindir}/python-argcomplete-tcsh
-sed -i 's/^#!\/usr\/bin\/python$/#!\/usr\/bin\/python2/'
%{buildroot}%{_bindir}/python-argcomplete-check-easy-install-script-%{python_version}
%check
export LANG=en_US.UTF-8
-python setup.py test
+%python_exec setup.py test
-%post
-update-alternatives \
- --install %{_sysconfdir}/bash_completion.d/python-argcomplete.sh
python-argcomplete.sh \
-
%{python_sitelib}/argcomplete/bash_completion.d/python-argcomplete.sh 20 \
- --slave %{_bindir}/python-argcomplete-check-easy-install-script \
- python-argcomplete-check-easy-install-script \
- %{_bindir}/python-argcomplete-check-easy-install-script-%{py_ver}
-
-%files
+%files %{python_files}
+%defattr(-,root,root)
%doc README.rst
%license LICENSE.rst
-%ghost %{_bindir}/python-argcomplete-check-easy-install-script
-%{_bindir}/python-argcomplete-check-easy-install-script-%{py_ver}
-%{python_sitelib}/argcomplete-%{version}-py%{py_ver}.egg-info
+%{python_sitelib}/argcomplete-%{version}-py%{python_version}.egg-info
%{python_sitelib}/argcomplete
-%{_sysconfdir}/bash_completion.d/python-argcomplete.sh
-%ghost %{_sysconfdir}/alternatives/python-argcomplete.sh
-%ghost %{_sysconfdir}/alternatives/python-argcomplete-check-easy-install-script
+%python3_only %{_bindir}/python-argcomplete-check-easy-install-script
+%python3_only %{_bindir}/register-python-argcomplete
+%python3_only %{_sysconfdir}/bash_completion.d/python-argcomplete.sh
+%{_bindir}/python-argcomplete-check-easy-install-script-%{python_version}
+%{_bindir}/register-python-argcomplete-%{python_version}
+%{_sysconfdir}/bash_completion.d/python-argcomplete.sh-%{python_version}
%changelog
++++++ argcomplete-1.8.2.tar.gz -> argcomplete-1.9.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/argcomplete-1.8.2/Changes.rst
new/argcomplete-1.9.2/Changes.rst
--- old/argcomplete-1.8.2/Changes.rst 2017-01-26 22:02:20.000000000 +0100
+++ new/argcomplete-1.9.2/Changes.rst 2017-08-23 19:37:47.000000000 +0200
@@ -1,3 +1,23 @@
+Changes for v1.9.2 (2017-08-23)
+===============================
+
+- Fix release
+
+Changes for v1.9.1 (2017-08-23)
+===============================
+
+- Fix release
+
+Changes for v1.9.0 (2017-08-23)
+===============================
+
+- Add SuppressCompleter to skip completion for specific arguments while
+ allowing help text (#224)
+
+- Redirect all output to debug stream in debug mode (#206)
+
+- Complete python -m module (#204)
+
Changes for v1.8.2 (2017-01-26)
===============================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/argcomplete-1.8.2/PKG-INFO
new/argcomplete-1.9.2/PKG-INFO
--- old/argcomplete-1.8.2/PKG-INFO 2017-01-26 22:02:39.000000000 +0100
+++ new/argcomplete-1.9.2/PKG-INFO 2017-08-23 19:38:01.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: argcomplete
-Version: 1.8.2
+Version: 1.9.2
Summary: Bash tab completion for argparse
Home-page: https://github.com/kislyuk/argcomplete
Author: Andrey Kislyuk
@@ -34,7 +34,7 @@
Synopsis
--------
- Python code (e.g. ``my-awesome-script.py``):
+ Python code (e.g. ``my-awesome-script``):
.. code-block:: python
@@ -49,11 +49,12 @@
Shellcode (only necessary if global completion is not activated - see
`Global completion`_ below), to be put in e.g. ``.bashrc``::
- eval "$(register-python-argcomplete my-awesome-script.py)"
+ eval "$(register-python-argcomplete my-awesome-script)"
Note that the script name is passed directly to ``complete``, meaning
it is only tab completed when invoked exactly
- as it was registered. The above line will **not** allow you to
complete ``./my-awesome-script.py``, or
- ``/path/to/my-awesome-script.py``.
+ as it was registered. In the above example, ``my-awesome-script`` must
be on the path, and the user must be
+ attempting to complete it by that name. The above line alone would
**not** allow you to complete ``./my-awesome-script``,
+ or ``/path/to/my-awesome-script``. If you need this, you must register
them separately, or use global completion.
argcomplete.autocomplete(*parser*)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -220,6 +221,10 @@
will look for the string **PYTHON_ARGCOMPLETE_OK** in the first 1024
bytes of any executable that it's running
completion for, and if it's found, follow the rest of the argcomplete
protocol as described above.
+ Additionally, completion is activated for scripts run as ``python
<script>`` and ``python -m <module>``.
+ This also works for alternate Python versions (e.g. ``python3`` and
``pypy``), as long as that version of Python has
+ argcomplete installed.
+
.. admonition:: Bash version compatibility
Global completion requires bash support for ``complete -D``, which
was introduced in bash 4.2. On OS X or older Linux
@@ -254,13 +259,17 @@
------------
To activate completions for tcsh use::
- eval `register-python-argcomplete --shell tcsh
my-awesome-script.py`
+ eval `register-python-argcomplete --shell tcsh my-awesome-script`
The ``python-argcomplete-tcsh`` script provides completions for tcsh.
The following is an example of the tcsh completion syntax for
- ``my-awesome-script.py`` emitted by ``register-python-argcomplete``::
+ ``my-awesome-script`` emitted by ``register-python-argcomplete``::
+
+ complete my-awesome-script 'p@*@`python-argcomplete-tcsh
my-awesome-script`@'
- complete my-awesome-script.py 'p@*@`python-argcomplete-tcsh
my-awesome-script.py`@'
+ Python Support
+ --------------
+ Argcomplete requires Python 2.7 or 3.3+.
Common Problems
---------------
@@ -268,10 +277,10 @@
default completion function::
$ complete | grep my-awesome-script
- complete -F _minimal my-awesome-script.py
+ complete -F _minimal my-awesome-script
You can fix this by restarting your shell, or by running
- ``complete -r my-awesome-script.py``.
+ ``complete -r my-awesome-script``.
Debugging
---------
@@ -294,7 +303,7 @@
Links
-----
* `Project home page (GitHub)
<https://github.com/kislyuk/argcomplete>`_
- * `Documentation (Read the Docs)
<https://argcomplete.readthedocs.org/en/latest/>`_
+ * `Documentation (Read the Docs)
<https://argcomplete.readthedocs.io/en/latest/>`_
* `Package distribution (PyPI)
<https://pypi.python.org/pypi/argcomplete>`_
* `Change log
<https://github.com/kislyuk/argcomplete/blob/master/Changes.rst>`_
@@ -325,9 +334,13 @@
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: POSIX
Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Development Status :: 5 - Production/Stable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/argcomplete-1.8.2/README.rst
new/argcomplete-1.9.2/README.rst
--- old/argcomplete-1.8.2/README.rst 2017-01-26 21:58:24.000000000 +0100
+++ new/argcomplete-1.9.2/README.rst 2017-07-13 23:06:11.000000000 +0200
@@ -26,7 +26,7 @@
Synopsis
--------
-Python code (e.g. ``my-awesome-script.py``):
+Python code (e.g. ``my-awesome-script``):
.. code-block:: python
@@ -41,11 +41,12 @@
Shellcode (only necessary if global completion is not activated - see `Global
completion`_ below), to be put in e.g. ``.bashrc``::
- eval "$(register-python-argcomplete my-awesome-script.py)"
+ eval "$(register-python-argcomplete my-awesome-script)"
Note that the script name is passed directly to ``complete``, meaning it is
only tab completed when invoked exactly
-as it was registered. The above line will **not** allow you to complete
``./my-awesome-script.py``, or
-``/path/to/my-awesome-script.py``.
+as it was registered. In the above example, ``my-awesome-script`` must be on
the path, and the user must be
+attempting to complete it by that name. The above line alone would **not**
allow you to complete ``./my-awesome-script``,
+or ``/path/to/my-awesome-script``. If you need this, you must register them
separately, or use global completion.
argcomplete.autocomplete(*parser*)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -212,6 +213,10 @@
will look for the string **PYTHON_ARGCOMPLETE_OK** in the first 1024 bytes of
any executable that it's running
completion for, and if it's found, follow the rest of the argcomplete protocol
as described above.
+Additionally, completion is activated for scripts run as ``python <script>``
and ``python -m <module>``.
+This also works for alternate Python versions (e.g. ``python3`` and ``pypy``),
as long as that version of Python has
+argcomplete installed.
+
.. admonition:: Bash version compatibility
Global completion requires bash support for ``complete -D``, which was
introduced in bash 4.2. On OS X or older Linux
@@ -246,13 +251,17 @@
------------
To activate completions for tcsh use::
- eval `register-python-argcomplete --shell tcsh my-awesome-script.py`
+ eval `register-python-argcomplete --shell tcsh my-awesome-script`
The ``python-argcomplete-tcsh`` script provides completions for tcsh.
The following is an example of the tcsh completion syntax for
-``my-awesome-script.py`` emitted by ``register-python-argcomplete``::
+``my-awesome-script`` emitted by ``register-python-argcomplete``::
+
+ complete my-awesome-script 'p@*@`python-argcomplete-tcsh
my-awesome-script`@'
- complete my-awesome-script.py 'p@*@`python-argcomplete-tcsh
my-awesome-script.py`@'
+Python Support
+--------------
+Argcomplete requires Python 2.7 or 3.3+.
Common Problems
---------------
@@ -260,10 +269,10 @@
default completion function::
$ complete | grep my-awesome-script
- complete -F _minimal my-awesome-script.py
+ complete -F _minimal my-awesome-script
You can fix this by restarting your shell, or by running
-``complete -r my-awesome-script.py``.
+``complete -r my-awesome-script``.
Debugging
---------
@@ -286,7 +295,7 @@
Links
-----
* `Project home page (GitHub) <https://github.com/kislyuk/argcomplete>`_
-* `Documentation (Read the Docs)
<https://argcomplete.readthedocs.org/en/latest/>`_
+* `Documentation (Read the Docs)
<https://argcomplete.readthedocs.io/en/latest/>`_
* `Package distribution (PyPI) <https://pypi.python.org/pypi/argcomplete>`_
* `Change log
<https://github.com/kislyuk/argcomplete/blob/master/Changes.rst>`_
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/argcomplete-1.8.2/argcomplete/__init__.py
new/argcomplete-1.9.2/argcomplete/__init__.py
--- old/argcomplete-1.8.2/argcomplete/__init__.py 2017-01-26
21:58:33.000000000 +0100
+++ new/argcomplete-1.9.2/argcomplete/__init__.py 2017-08-23
19:29:25.000000000 +0200
@@ -6,7 +6,7 @@
import os, sys, argparse, contextlib
from . import completers, my_shlex as shlex
from .compat import USING_PYTHON2, str, sys_encoding, ensure_str, ensure_bytes
-from .completers import FilesCompleter
+from .completers import FilesCompleter, SuppressCompleter
from .my_argparse import IntrospectiveArgumentParser, action_is_satisfied,
action_is_open, action_is_greedy
_DEBUG = "_ARC_DEBUG" in os.environ
@@ -203,9 +203,13 @@
comp_line = ensure_str(comp_line)
cword_prequote, cword_prefix, cword_suffix, comp_words,
last_wordbreak_pos = split_line(comp_line, comp_point)
- if os.environ["_ARGCOMPLETE"] == "2":
- # Shell hook recognized the first word as the interpreter; discard
it
- comp_words.pop(0)
+ # _ARGCOMPLETE is set by the shell script to tell us where comp_words
+ # should start, based on what we're completing.
+ # 1: <script> [args]
+ # 2: python <script> [args]
+ # 3: python -m <module> [args]
+ start = int(os.environ["_ARGCOMPLETE"]) - 1
+ comp_words = comp_words[start:]
debug("\nLINE: '{l}'\nPREQUOTE: '{pq}'\nPREFIX:
'{p}'".format(l=comp_line, pq=cword_prequote, p=cword_prefix),
"\nSUFFIX: '{s}'".format(s=cword_suffix),
@@ -342,8 +346,12 @@
option_completions = []
for action in parser._actions:
- if action.help == argparse.SUPPRESS and not self.print_suppressed:
- continue
+ if not self.print_suppressed:
+ completer = getattr(action, "completer", None)
+ if isinstance(completer, SuppressCompleter) and
completer.suppress():
+ continue
+ if action.help == argparse.SUPPRESS:
+ continue
if not self._action_allowed(action, parser):
continue
if not isinstance(action, argparse._SubParsersAction):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/argcomplete-1.8.2/argcomplete/_check_module.py
new/argcomplete-1.9.2/argcomplete/_check_module.py
--- old/argcomplete-1.8.2/argcomplete/_check_module.py 1970-01-01
01:00:00.000000000 +0100
+++ new/argcomplete-1.9.2/argcomplete/_check_module.py 2017-03-15
23:47:27.000000000 +0100
@@ -0,0 +1,49 @@
+import os
+import sys
+
+try:
+ from importlib.util import find_spec
+except ImportError:
+ from collections import namedtuple
+ from imp import find_module
+
+ ModuleSpec = namedtuple(
+ 'ModuleSpec', ['origin', 'has_location', 'submodule_search_locations'])
+
+ def find_spec(name):
+ """Minimal implementation as required by `find`."""
+ f, path, _ = find_module(name)
+ has_location = path is not None
+ if f is None:
+ return ModuleSpec(None, has_location, [path])
+ f.close()
+ return ModuleSpec(path, has_location, None)
+
+
+def find(name):
+ names = name.split('.')
+ spec = find_spec(names[0])
+ if not spec.has_location:
+ raise Exception('cannot locate file')
+ if spec.submodule_search_locations is None:
+ if len(names) != 1:
+ raise Exception('{} is not a package'.format(names[0]))
+ return spec.origin
+ if len(spec.submodule_search_locations) != 1:
+ raise Exception('expecting one search location')
+ path = os.path.join(spec.submodule_search_locations[0], *names[1:])
+ if os.path.isdir(path):
+ return os.path.join(path, '__main__.py')
+ else:
+ return path + '.py'
+
+
+def main():
+ with open(find(sys.argv[1])) as f:
+ head = f.read(1024)
+ if 'PYTHON_ARGCOMPLETE_OK' not in head:
+ raise Exception('marker not found')
+
+
+if __name__ == '__main__':
+ main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/argcomplete-1.8.2/argcomplete/bash_completion.d/python-argcomplete.sh
new/argcomplete-1.9.2/argcomplete/bash_completion.d/python-argcomplete.sh
--- old/argcomplete-1.8.2/argcomplete/bash_completion.d/python-argcomplete.sh
2017-01-19 20:10:22.000000000 +0100
+++ new/argcomplete-1.9.2/argcomplete/bash_completion.d/python-argcomplete.sh
2017-04-17 15:36:27.000000000 +0200
@@ -12,13 +12,29 @@
fi
}
+# Run something, muting output or redirecting it to the debug stream
+# depending on the value of _ARC_DEBUG.
+__python_argcomplete_run() {
+ if [[ -z "$_ARC_DEBUG" ]]; then
+ "$@" 8>&1 9>&2 1>/dev/null 2>&1
+ else
+ "$@" 8>&1 9>&2 1>&9 2>&1
+ fi
+}
+
_python_argcomplete_global() {
local executable=$1
__python_argcomplete_expand_tilde_by_ref executable
local ARGCOMPLETE=0
if [[ "$executable" == python* ]] || [[ "$executable" == pypy* ]]; then
- if [[ -f "${COMP_WORDS[1]}" ]] && (head -c 1024 "${COMP_WORDS[1]}" |
grep --quiet "PYTHON_ARGCOMPLETE_OK") >/dev/null 2>&1; then
+ if [[ "${COMP_WORDS[1]}" == -m ]]; then
+ if "$executable" -m argcomplete._check_module "${COMP_WORDS[2]}"
>/dev/null 2>&1; then
+ ARGCOMPLETE=3
+ else
+ return
+ fi
+ elif [[ -f "${COMP_WORDS[1]}" ]] && (head -c 1024 "${COMP_WORDS[1]}" |
grep --quiet "PYTHON_ARGCOMPLETE_OK") >/dev/null 2>&1; then
local ARGCOMPLETE=2
else
return
@@ -36,7 +52,7 @@
fi
fi
- if [[ $ARGCOMPLETE == 1 ]] || [[ $ARGCOMPLETE == 2 ]]; then
+ if [[ $ARGCOMPLETE != 0 ]]; then
local IFS=$(echo -e '\v')
COMPREPLY=( $(_ARGCOMPLETE_IFS="$IFS" \
COMP_LINE="$COMP_LINE" \
@@ -45,7 +61,7 @@
_ARGCOMPLETE_COMP_WORDBREAKS="$COMP_WORDBREAKS" \
_ARGCOMPLETE=$ARGCOMPLETE \
_ARGCOMPLETE_SUPPRESS_SPACE=1 \
- "$executable" "${COMP_WORDS[@]:1:ARGCOMPLETE-1}" 8>&1 9>&2
1>/dev/null 2>&1) )
+ __python_argcomplete_run "$executable"
"${COMP_WORDS[@]:1:ARGCOMPLETE-1}") )
if [[ $? != 0 ]]; then
unset COMPREPLY
elif [[ "$COMPREPLY" =~ [=/:]$ ]]; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/argcomplete-1.8.2/argcomplete/completers.py
new/argcomplete-1.9.2/argcomplete/completers.py
--- old/argcomplete-1.8.2/argcomplete/completers.py 2017-01-26
21:58:24.000000000 +0100
+++ new/argcomplete-1.9.2/argcomplete/completers.py 2017-08-23
19:29:25.000000000 +0200
@@ -92,3 +92,17 @@
class DirectoriesCompleter(_FilteredFilesCompleter):
def __init__(self):
_FilteredFilesCompleter.__init__(self, predicate=os.path.isdir)
+
+class SuppressCompleter(object):
+ """
+ A completer used to suppress the completion of specific arguments
+ """
+
+ def __init__(self):
+ pass
+
+ def suppress(self):
+ """
+ Decide if the completion should be suppressed
+ """
+ return True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/argcomplete-1.8.2/argcomplete.egg-info/PKG-INFO
new/argcomplete-1.9.2/argcomplete.egg-info/PKG-INFO
--- old/argcomplete-1.8.2/argcomplete.egg-info/PKG-INFO 2017-01-26
22:02:39.000000000 +0100
+++ new/argcomplete-1.9.2/argcomplete.egg-info/PKG-INFO 2017-08-23
19:38:01.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: argcomplete
-Version: 1.8.2
+Version: 1.9.2
Summary: Bash tab completion for argparse
Home-page: https://github.com/kislyuk/argcomplete
Author: Andrey Kislyuk
@@ -34,7 +34,7 @@
Synopsis
--------
- Python code (e.g. ``my-awesome-script.py``):
+ Python code (e.g. ``my-awesome-script``):
.. code-block:: python
@@ -49,11 +49,12 @@
Shellcode (only necessary if global completion is not activated - see
`Global completion`_ below), to be put in e.g. ``.bashrc``::
- eval "$(register-python-argcomplete my-awesome-script.py)"
+ eval "$(register-python-argcomplete my-awesome-script)"
Note that the script name is passed directly to ``complete``, meaning
it is only tab completed when invoked exactly
- as it was registered. The above line will **not** allow you to
complete ``./my-awesome-script.py``, or
- ``/path/to/my-awesome-script.py``.
+ as it was registered. In the above example, ``my-awesome-script`` must
be on the path, and the user must be
+ attempting to complete it by that name. The above line alone would
**not** allow you to complete ``./my-awesome-script``,
+ or ``/path/to/my-awesome-script``. If you need this, you must register
them separately, or use global completion.
argcomplete.autocomplete(*parser*)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -220,6 +221,10 @@
will look for the string **PYTHON_ARGCOMPLETE_OK** in the first 1024
bytes of any executable that it's running
completion for, and if it's found, follow the rest of the argcomplete
protocol as described above.
+ Additionally, completion is activated for scripts run as ``python
<script>`` and ``python -m <module>``.
+ This also works for alternate Python versions (e.g. ``python3`` and
``pypy``), as long as that version of Python has
+ argcomplete installed.
+
.. admonition:: Bash version compatibility
Global completion requires bash support for ``complete -D``, which
was introduced in bash 4.2. On OS X or older Linux
@@ -254,13 +259,17 @@
------------
To activate completions for tcsh use::
- eval `register-python-argcomplete --shell tcsh
my-awesome-script.py`
+ eval `register-python-argcomplete --shell tcsh my-awesome-script`
The ``python-argcomplete-tcsh`` script provides completions for tcsh.
The following is an example of the tcsh completion syntax for
- ``my-awesome-script.py`` emitted by ``register-python-argcomplete``::
+ ``my-awesome-script`` emitted by ``register-python-argcomplete``::
+
+ complete my-awesome-script 'p@*@`python-argcomplete-tcsh
my-awesome-script`@'
- complete my-awesome-script.py 'p@*@`python-argcomplete-tcsh
my-awesome-script.py`@'
+ Python Support
+ --------------
+ Argcomplete requires Python 2.7 or 3.3+.
Common Problems
---------------
@@ -268,10 +277,10 @@
default completion function::
$ complete | grep my-awesome-script
- complete -F _minimal my-awesome-script.py
+ complete -F _minimal my-awesome-script
You can fix this by restarting your shell, or by running
- ``complete -r my-awesome-script.py``.
+ ``complete -r my-awesome-script``.
Debugging
---------
@@ -294,7 +303,7 @@
Links
-----
* `Project home page (GitHub)
<https://github.com/kislyuk/argcomplete>`_
- * `Documentation (Read the Docs)
<https://argcomplete.readthedocs.org/en/latest/>`_
+ * `Documentation (Read the Docs)
<https://argcomplete.readthedocs.io/en/latest/>`_
* `Package distribution (PyPI)
<https://pypi.python.org/pypi/argcomplete>`_
* `Change log
<https://github.com/kislyuk/argcomplete/blob/master/Changes.rst>`_
@@ -325,9 +334,13 @@
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: POSIX
Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Development Status :: 5 - Production/Stable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/argcomplete-1.8.2/argcomplete.egg-info/SOURCES.txt
new/argcomplete-1.9.2/argcomplete.egg-info/SOURCES.txt
--- old/argcomplete-1.8.2/argcomplete.egg-info/SOURCES.txt 2017-01-26
22:02:39.000000000 +0100
+++ new/argcomplete-1.9.2/argcomplete.egg-info/SOURCES.txt 2017-08-23
19:38:01.000000000 +0200
@@ -6,6 +6,7 @@
setup.cfg
setup.py
argcomplete/__init__.py
+argcomplete/_check_module.py
argcomplete/compat.py
argcomplete/completers.py
argcomplete/my_argparse.py
@@ -22,7 +23,5 @@
scripts/python-argcomplete-tcsh
scripts/register-python-argcomplete
test/__init__.py
-test/__init__.pyc
test/prog
-test/test.py
-test/test.pyc
\ No newline at end of file
+test/test.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/argcomplete-1.8.2/scripts/register-python-argcomplete
new/argcomplete-1.9.2/scripts/register-python-argcomplete
--- old/argcomplete-1.8.2/scripts/register-python-argcomplete 2017-01-19
20:10:22.000000000 +0100
+++ new/argcomplete-1.9.2/scripts/register-python-argcomplete 2017-03-15
23:47:27.000000000 +0100
@@ -22,6 +22,16 @@
import argparse
shellcode = r'''
+# Run something, muting output or redirecting it to the debug stream
+# depending on the value of _ARC_DEBUG.
+__python_argcomplete_run() {
+ if [[ -z "$_ARC_DEBUG" ]]; then
+ "$@" 8>&1 9>&2 1>/dev/null 2>&1
+ else
+ "$@" 8>&1 9>&2 1>&9 2>&1
+ fi
+}
+
_python_argcomplete() {
local IFS=$'\013'
local SUPPRESS_SPACE=0
@@ -35,7 +45,7 @@
_ARGCOMPLETE_COMP_WORDBREAKS="$COMP_WORDBREAKS" \
_ARGCOMPLETE=1 \
_ARGCOMPLETE_SUPPRESS_SPACE=$SUPPRESS_SPACE \
- "$1" 8>&1 9>&2 1>/dev/null 2>/dev/null) )
+ __python_argcomplete_run "$1") )
if [[ $? != 0 ]]; then
unset COMPREPLY
elif [[ $SUPPRESS_SPACE == 1 ]] && [[ "$COMPREPLY" =~ [=/:]$ ]]; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/argcomplete-1.8.2/setup.py
new/argcomplete-1.9.2/setup.py
--- old/argcomplete-1.8.2/setup.py 2017-01-26 22:00:42.000000000 +0100
+++ new/argcomplete-1.9.2/setup.py 2017-08-23 19:37:12.000000000 +0200
@@ -6,14 +6,9 @@
install_requires = []
tests_require = ["coverage", "flake8", "pexpect", "wheel"]
-try:
- import argparse # noqa
-except ImportError:
- install_requires.append('argparse')
-
setup(
name='argcomplete',
- version='1.8.2',
+ version='1.9.2',
url='https://github.com/kislyuk/argcomplete',
license='Apache Software License',
author='Andrey Kislyuk',
@@ -37,9 +32,13 @@
'Operating System :: MacOS :: MacOS X',
'Operating System :: POSIX',
'Programming Language :: Python',
+ 'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
+ 'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.3',
'Programming Language :: Python :: 3.4',
+ 'Programming Language :: Python :: 3.5',
+ 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: Implementation :: CPython',
'Programming Language :: Python :: Implementation :: PyPy',
'Development Status :: 5 - Production/Stable',
Binary files old/argcomplete-1.8.2/test/__init__.pyc and
new/argcomplete-1.9.2/test/__init__.pyc differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/argcomplete-1.8.2/test/prog
new/argcomplete-1.9.2/test/prog
--- old/argcomplete-1.8.2/test/prog 2017-01-19 20:10:22.000000000 +0100
+++ new/argcomplete-1.9.2/test/prog 2017-08-23 19:29:20.000000000 +0200
@@ -1,6 +1,8 @@
#!/usr/bin/env python
# PYTHON_ARGCOMPLETE_OK
"""Test script used by test.TestBash."""
+from __future__ import print_function
+
import argparse
import argcomplete
import os
@@ -17,6 +19,12 @@
return ['ok']
+def print_output(*args, **kwargs):
+ print('PYTHON_ARGCOMPLETE_STDOUT')
+ print('PYTHON_ARGCOMPLETE_STDERR', file=sys.stderr)
+ return ['foo']
+
+
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
subparsers.add_parser('basic').add_argument('arg', choices=['foo', 'bar',
'baz'])
@@ -26,6 +34,7 @@
subparsers.add_parser('quote').add_argument('arg', choices=["1'1", '2"2'])
subparsers.add_parser('break').add_argument('arg', choices=['a:b:c', 'a:b:d'])
subparsers.add_parser('env').add_argument('arg').completer = check_environ
+subparsers.add_parser('debug').add_argument('arg').completer = print_output
argcomplete.autocomplete(parser)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/argcomplete-1.8.2/test/test.py
new/argcomplete-1.9.2/test/test.py
--- old/argcomplete-1.8.2/test/test.py 2017-01-26 21:58:24.000000000 +0100
+++ new/argcomplete-1.9.2/test/test.py 2017-08-23 19:29:25.000000000 +0200
@@ -3,7 +3,7 @@
from __future__ import absolute_import, division, print_function,
unicode_literals
-import os, sys, shutil, argparse, subprocess
+import os, sys, shutil, argparse, subprocess, unittest
import pexpect, pexpect.replwrap
from tempfile import TemporaryFile, mkdtemp
@@ -17,15 +17,11 @@
CompletionFinder,
split_line,
ExclusiveCompletionFinder,
+ _check_module
)
-from argcomplete.completers import FilesCompleter, DirectoriesCompleter
+from argcomplete.completers import FilesCompleter, DirectoriesCompleter,
SuppressCompleter
from argcomplete.compat import USING_PYTHON2, str, sys_encoding, ensure_str,
ensure_bytes
-if sys.version_info >= (2, 7):
- import unittest
-else:
- import unittest2 as unittest
-
IFS = "\013"
COMP_WORDBREAKS = " \t\n\"'><=;&(:"
@@ -61,7 +57,7 @@
def setUp(self):
self._os_environ = os.environ
os.environ = os.environ.copy()
- os.environ["_ARGCOMPLETE"] = "yes"
+ os.environ["_ARGCOMPLETE"] = "1"
os.environ["_ARC_DEBUG"] = "yes"
os.environ["IFS"] = IFS
os.environ["_ARGCOMPLETE_COMP_WORDBREAKS"] = COMP_WORDBREAKS
@@ -71,7 +67,7 @@
def run_completer(self, parser, command, point=None,
completer=autocomplete, **kwargs):
command = ensure_str(command)
-
+
if point is None:
# Adjust point for wide chars
point = str(len(command.encode(sys_encoding)))
@@ -157,6 +153,30 @@
for cmd, output in expected_outputs:
self.assertEqual(set(self.run_completer(make_parser(), cmd,
print_suppressed=True)), set(output))
+ def test_suppress_completer(self):
+ def make_parser():
+ parser = ArgumentParser()
+ parser.add_argument("--foo")
+ arg = parser.add_argument("--bar")
+ arg.completer = SuppressCompleter()
+ return parser
+
+ expected_outputs = (
+ ("prog ", ["--foo", "-h", "--help"]),
+ ("prog --b", [""])
+ )
+
+ for cmd, output in expected_outputs:
+ self.assertEqual(set(self.run_completer(make_parser(), cmd)),
set(output))
+
+ expected_outputs = (
+ ("prog ", ["--foo", "--bar", "-h", "--help"]),
+ ("prog --b", ["--bar "])
+ )
+
+ for cmd, output in expected_outputs:
+ self.assertEqual(set(self.run_completer(make_parser(), cmd,
print_suppressed=True)), set(output))
+
def test_action_activation(self):
def make_parser():
parser = ArgumentParser()
@@ -218,7 +238,8 @@
("prog --url \"http://url1\" --email a", ["[email protected]", "[email protected]",
"[email protected]"]),
("prog --url \"http://url1\" --email \"a@", ['[email protected]', '[email protected]']),
("prog --url \"http://url1\" --email \"[email protected]\" \"[email protected]\" \"a@",
['[email protected]', '[email protected]']),
- ("prog --url \"http://url1\" --email \"[email protected]\" \"[email protected]\"
\"[email protected]\" ", ["--url", "--email", "-h", "--help"]),
+ ("prog --url \"http://url1\" --email \"[email protected]\" \"[email protected]\"
\"[email protected]\" ",
+ ["--url", "--email", "-h", "--help"]),
)
for cmd, output in expected_outputs:
@@ -286,6 +307,7 @@
def test_directory_completion(self):
completer = DirectoriesCompleter()
+
def c(prefix):
return set(completer(prefix))
with TempDir(prefix="test_dir", dir="."):
@@ -342,7 +364,8 @@
expected_outputs = (
("prog ", ["--help", "eggs", "-h", "spam", "--age"]),
("prog --age 1 eggs", ["eggs "]),
- ("prog --age 2 eggs ", [r"on\ a\ train", r"with\ a\ goat", r"on\
a\ boat", r"in\ the\ rain", "--help", "-h"]),
+ ("prog --age 2 eggs ",
+ [r"on\ a\ train", r"with\ a\ goat", r"on\ a\ boat", r"in\ the\
rain", "--help", "-h"]),
("prog eggs ", [r"on\ a\ train", r"with\ a\ goat", r"on\ a\ boat",
r"in\ the\ rain", "--help", "-h"]),
("prog eggs \"on a", ['on a train', 'on a boat']),
("prog eggs on\\ a", [r"on\ a\ train", "on\ a\ boat"]),
@@ -370,7 +393,8 @@
expected_outputs = (
("prog ", ["--книга", "-h", "--help"]),
- ("prog --книга ", [r"Трудно\ быть\ богом", r"Парень\ из\
преисподней", r"Понедельник\ начинается\ в\ субботу"]),
+ ("prog --книга ",
+ [r"Трудно\ быть\ богом", r"Парень\ из\ преисподней",
r"Понедельник\ начинается\ в\ субботу"]),
("prog --книга П", [r"Парень\ из\ преисподней", "Понедельник\
начинается\ в\ субботу"]),
("prog --книга Пу", [""]),
)
@@ -615,7 +639,10 @@
expected_outputs = (
("prog ", {"long": long_opts, "short": short_opts, True: long_opts
+ short_opts, False: [""]}),
("prog --foo", {"long": ["--foo "], "short": ["--foo "], True:
["--foo "], False: ["--foo "]}),
- ("prog --b", {"long": ["--bar", "--baz"], "short": ["--bar",
"--baz"], True: ["--bar", "--baz"], False: ["--bar", "--baz"]}),
+ ("prog --b", {"long": ["--bar", "--baz"],
+ "short": ["--bar", "--baz"],
+ True: ["--bar", "--baz"],
+ False: ["--bar", "--baz"]}),
("prog -z -x", {"long": ["-x "], "short": ["-x "], True: ["-x "],
False: ["-x "]}),
)
for cmd, outputs in expected_outputs:
@@ -872,6 +899,64 @@
self.assertEqual(self.wordbreak('"b:c=d" '), None)
+class TestCheckModule(unittest.TestCase):
+ def setUp(self):
+ self.dir = TempDir(prefix="test_dir_module", dir=".")
+ self.dir.__enter__()
+ # There is some odd bug that seems to only come up in Python 3.4 where
+ # using "." in sys.path sometimes won't find modules, so we'll use the
+ # full path each time.
+ sys.path.insert(0, os.getcwd())
+
+ def tearDown(self):
+ sys.path.pop(0)
+ self.dir.__exit__()
+
+ def test_module(self):
+ self._mkfile('module.py')
+ path = _check_module.find('module')
+ self.assertEqual(path, os.path.abspath('module.py'))
+ self.assertNotIn('module', sys.modules)
+
+ def test_package(self):
+ os.mkdir('package')
+ self._mkfile('package/__init__.py')
+ self._mkfile('package/module.py')
+ path = _check_module.find('package.module')
+ self.assertEqual(path, os.path.abspath('package/module.py'))
+ self.assertNotIn('package', sys.modules)
+ self.assertNotIn('package.module', sys.modules)
+
+ def test_subpackage(self):
+ os.mkdir('package')
+ self._mkfile('package/__init__.py')
+ os.mkdir('package/subpackage')
+ self._mkfile('package/subpackage/__init__.py')
+ self._mkfile('package/subpackage/module.py')
+ path = _check_module.find('package.subpackage.module')
+ self.assertEqual(path, os.path.abspath('package/subpackage/module.py'))
+ self.assertNotIn('package', sys.modules)
+ self.assertNotIn('package.subpackage', sys.modules)
+ self.assertNotIn('package.subpackage.module', sys.modules)
+
+ def test_package_main(self):
+ os.mkdir('package')
+ self._mkfile('package/__init__.py')
+ self._mkfile('package/__main__.py')
+ path = _check_module.find('package')
+ self.assertEqual(path, os.path.abspath('package/__main__.py'))
+ self.assertNotIn('package', sys.modules)
+
+ def test_not_package(self):
+ self._mkfile('module.py')
+ with self.assertRaisesRegexp(Exception, 'module is not a package'):
+ _check_module.find('module.bad')
+ self.assertNotIn('module', sys.modules)
+
+ def _mkfile(self, path):
+ open(path, 'w').close()
+
+
class _TestSh(object):
"""
Contains tests which should work in any shell using argcomplete.
@@ -899,6 +984,7 @@
def setUpClass(cls, *args, **kwargs):
for name in cls.expected_failures:
test = getattr(cls, name)
+
@unittest.expectedFailure
def wrapped(self, test=test):
test(self)
@@ -1007,6 +1093,8 @@
path = ':'.join([os.path.join(BASE_DIR, 'scripts'), TEST_DIR, '$PATH'])
sh.run_command('export PATH={0}'.format(path))
sh.run_command('export PYTHONPATH={0}'.format(BASE_DIR))
+ # Disable the "python" module provided by bash-completion
+ sh.run_command('complete -r python python2 python3')
output = sh.run_command(self.install_cmd)
self.assertEqual(output, '')
self.sh = sh
@@ -1017,6 +1105,14 @@
result = self.sh.run_command('prog basic f\t"\1echo "')
self.assertEqual(result, 'prog basic foo \r\n')
+ def test_debug_output(self):
+ self.assertEqual(self.sh.run_command('prog debug f\t'), 'foo\r\n')
+ self.sh.run_command('export _ARC_DEBUG=1')
+ output = self.sh.run_command('prog debug f\t')
+ self.assertIn('PYTHON_ARGCOMPLETE_STDOUT\r\n', output)
+ self.assertIn('PYTHON_ARGCOMPLETE_STDERR\r\n', output)
+ self.assertTrue(output.endswith('foo\r\n'))
+
@unittest.skipIf(BASH_MAJOR_VERSION < 4, 'complete -D not supported')
class TestBashGlobal(TestBash):
@@ -1037,9 +1133,21 @@
shutil.copy(prog, '.')
self.sh.run_command('cd ' + os.getcwd())
self.sh.run_command('chmod -x ./prog')
- self.assertIn('Permission denied', self.sh.run_command('./prog'))
+ # Ensure prog is no longer able to be run as "./prog".
+ self.assertIn('<<126>>', self.sh.run_command('./prog; echo
"<<$?>>"'))
+ # Ensure completion still functions when run via python.
self.assertEqual(self.sh.run_command('python ./prog basic f\t'),
'foo\r\n')
+ def test_python_module(self):
+ """Test completing a module run with python -m."""
+ prog = os.path.join(TEST_DIR, 'prog')
+ with TempDir(prefix='test_dir_py', dir='.'):
+ os.mkdir('package')
+ open('package/__init__.py', 'w').close()
+ shutil.copy(prog, 'package/prog.py')
+ self.sh.run_command('cd ' + os.getcwd())
+ self.assertEqual(self.sh.run_command('python -m package.prog basic
f\t'), 'foo\r\n')
+
class TestTcsh(_TestSh, unittest.TestCase):
expected_failures = [
Binary files old/argcomplete-1.8.2/test/test.pyc and
new/argcomplete-1.9.2/test/test.pyc differ
++++++ skip_tcsh_tests.patch ++++++
--- /var/tmp/diff_new_pack.2YES4U/_old 2017-10-05 12:06:44.489425396 +0200
+++ /var/tmp/diff_new_pack.2YES4U/_new 2017-10-05 12:06:44.489425396 +0200
@@ -1,10 +1,58 @@
---- test/test.py 2017-01-26 21:58:24.000000000 +0100
-+++ test/test.py 2017-07-20 11:36:11.820934599 +0200
-@@ -1041,6 +1041,7 @@
- self.assertEqual(self.sh.run_command('python ./prog basic f\t'),
'foo\r\n')
+diff -Nru argcomplete-1.9.2.orig/test/test.py argcomplete-1.9.2/test/test.py
+--- argcomplete-1.9.2.orig/test/test.py 2017-08-23 19:29:25.000000000
+0200
++++ argcomplete-1.9.2/test/test.py 2017-09-15 11:55:27.264394475 +0200
+@@ -1149,30 +1149,30 @@
+ self.assertEqual(self.sh.run_command('python -m package.prog
basic f\t'), 'foo\r\n')
[email protected]
- class TestTcsh(_TestSh, unittest.TestCase):
- expected_failures = [
- 'test_unquoted_space',
+-class TestTcsh(_TestSh, unittest.TestCase):
+- expected_failures = [
+- 'test_unquoted_space',
+- 'test_quoted_space',
+- 'test_continuation',
+- 'test_parse_special_characters',
+- 'test_parse_special_characters_dollar',
+- ]
+-
+- def setUp(self):
+- sh = Shell('tcsh')
+- path = ' '.join([os.path.join(BASE_DIR, 'scripts'), TEST_DIR,
'$path'])
+- sh.run_command('set path = ({0})'.format(path))
+- sh.run_command('setenv PYTHONPATH {0}'.format(BASE_DIR))
+- output = sh.run_command('eval `register-python-argcomplete --shell
tcsh prog`')
+- self.assertEqual(output, '')
+- self.sh = sh
+-
+- def tearDown(self):
+- # The shell wrapper is fragile; exactly which exception is raised
+- # differs depending on environment.
+- with self.assertRaises((pexpect.EOF, OSError)):
+- self.sh.run_command('exit')
+- self.sh.run_command('')
++# class TestTcsh(_TestSh, unittest.TestCase):
++# expected_failures = [
++# 'test_unquoted_space',
++# 'test_quoted_space',
++# 'test_continuation',
++# 'test_parse_special_characters',
++# 'test_parse_special_characters_dollar',
++# ]
++
++# def setUp(self):
++# sh = Shell('tcsh')
++# path = ' '.join([os.path.join(BASE_DIR, 'scripts'), TEST_DIR,
'$path'])
++# sh.run_command('set path = ({0})'.format(path))
++# sh.run_command('setenv PYTHONPATH {0}'.format(BASE_DIR))
++# output = sh.run_command('eval `register-python-argcomplete --shell
tcsh prog`')
++# self.assertEqual(output, '')
++# self.sh = sh
++
++# def tearDown(self):
++# # The shell wrapper is fragile; exactly which exception is raised
++# # differs depending on environment.
++# with self.assertRaises((pexpect.EOF, OSError)):
++# self.sh.run_command('exit')
++# self.sh.run_command('')
+
+
+ class Shell(object):