mirror of
https://github.com/xonsh/xonsh.git
synced 2025-03-04 08:24:40 +01:00
add py310 (#4270)
* chore: adding py310 to ci though this will require code/parser changes, this is to prepare for upcoming adoption * fix: set python version as string * fix: reference to master -> main * fix: coverage is not reported in master - disable amalgamation 1. during coverage report tests 2. qa tools like mypy may follow imports - use python 3.9 for coverage and qa report. since it will have more coverage and better typing support * chore: use py3.10 with setup-py action * chore: add news-item check job * fix: py3.10 error while starting the match statement is not supported. while the syntax support is only upto py3.8 * fix: news-item checker * chore: enable fail report for py310 tests * test: add test for ptk_shell
This commit is contained in:
parent
099d301fae
commit
3ce8c9b337
34 changed files with 413 additions and 63 deletions
|
@ -28,3 +28,6 @@ skip_covered = true
|
|||
skip_empty = true
|
||||
show_missing = true
|
||||
sort = Cover
|
||||
|
||||
# something is better than nothing :)
|
||||
fail_under = 55
|
||||
|
|
27
.github/workflows/check-news-item.yml
vendored
Normal file
27
.github/workflows/check-news-item.yml
vendored
Normal file
|
@ -0,0 +1,27 @@
|
|||
name: Check News Item
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
name: Check News item
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- id: file_changes
|
||||
uses: trilom/file-changes-action@v1.2.4
|
||||
with:
|
||||
output: ','
|
||||
- shell: bash
|
||||
run: |
|
||||
added_files='${{ steps.file_changes.outputs.files_added}}'
|
||||
echo $added_files
|
||||
if [[ $added_files == *"news/"*.rst* ]]; then
|
||||
echo "Found news item for the PR"
|
||||
else
|
||||
echo "News item for the PR is not found. Please create one from 'news/TEMPLATE.rst'"
|
||||
exit 1
|
||||
fi
|
4
.github/workflows/elm.yml
vendored
4
.github/workflows/elm.yml
vendored
|
@ -3,10 +3,10 @@ name: Check Elm
|
|||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
|
45
.github/workflows/genbuilds.py
vendored
45
.github/workflows/genbuilds.py
vendored
|
@ -16,14 +16,32 @@ environment = jinja2.Environment(
|
|||
)
|
||||
tmpl = environment.get_template("pytest.tmpl")
|
||||
|
||||
OS_NAMES = ["linux", "macos", "windows"]
|
||||
OS_IMAGES = {
|
||||
"linux": "ubuntu-latest",
|
||||
"macos": "macOS-latest",
|
||||
"windows": "windows-latest",
|
||||
}
|
||||
PY_MAIN_VERSION = "3.8"
|
||||
PYTHON_VERSIONS = ["3.6", "3.7", PY_MAIN_VERSION, "3.9"]
|
||||
|
||||
def get_attrs(cls):
|
||||
for attr, val in vars(cls).items():
|
||||
if not attr.startswith("__"):
|
||||
yield attr, val
|
||||
|
||||
|
||||
class OS:
|
||||
linux = "ubuntu-latest"
|
||||
macos = "macOS-latest"
|
||||
windows = "windows-latest"
|
||||
|
||||
|
||||
OS_NAMES = [attr for attr, _ in get_attrs(OS)]
|
||||
|
||||
|
||||
class PY:
|
||||
_36 = "3.6"
|
||||
_37 = "3.7"
|
||||
_38 = "3.8"
|
||||
_39 = "3.9"
|
||||
_310 = "3.10-dev"
|
||||
|
||||
|
||||
PY_MAIN_VERSION = PY._39
|
||||
PYTHON_VERSIONS = [val for _, val in get_attrs(PY)]
|
||||
|
||||
ALLOWED_FAILURES = []
|
||||
|
||||
|
@ -31,13 +49,16 @@ ALLOWED_FAILURES = []
|
|||
def write_to_file(
|
||||
tst: str, os_name: str, python_version: str, report_coverage=False, **kwargs
|
||||
):
|
||||
fname = os.path.join(CURR_DIR, f"{tst}-{os_name}-{python_version}.yml")
|
||||
py_major = python_version.split("-")[0]
|
||||
fname = os.path.join(CURR_DIR, f"{tst}-{os_name}-{py_major}.yml")
|
||||
dev_version = python_version.endswith("-dev")
|
||||
result = tmpl.render(
|
||||
OS_NAME=os_name,
|
||||
OS_IMAGE=OS_IMAGES[os_name],
|
||||
OS_IMAGE=getattr(OS, os_name),
|
||||
PYTHON_VERSION=python_version,
|
||||
NAME=tst,
|
||||
allow_failure=python_version in ALLOWED_FAILURES,
|
||||
use_setup_py=dev_version,
|
||||
report_coverage=report_coverage,
|
||||
**kwargs,
|
||||
)
|
||||
|
@ -48,7 +69,7 @@ def write_to_file(
|
|||
for os_name, python_version in product(OS_NAMES, PYTHON_VERSIONS):
|
||||
report_coverage = python_version == PY_MAIN_VERSION and os_name == "linux"
|
||||
if report_coverage:
|
||||
test_cmd = "test --report-coverage -- --timeout=240"
|
||||
test_cmd = "test --report-coverage --no-amalgam -- --timeout=240"
|
||||
else:
|
||||
test_cmd = "test -- --timeout=240"
|
||||
|
||||
|
@ -61,4 +82,4 @@ for os_name, python_version in product(OS_NAMES, PYTHON_VERSIONS):
|
|||
)
|
||||
|
||||
# qa workflow
|
||||
write_to_file("qa", "linux", "3.8", test_cmd="qa")
|
||||
write_to_file("qa", "linux", PY_MAIN_VERSION, test_cmd="qa")
|
||||
|
|
57
.github/workflows/pytest-linux-3.10.yml
vendored
Normal file
57
.github/workflows/pytest-linux-3.10.yml
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
name: pytest linux 3.10-dev
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest]
|
||||
python-version: [ "3.10-dev" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
name: Python ${{ matrix.python-version }} ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/conda_pkgs_dir
|
||||
~/miniconda*/envs/
|
||||
key: ${{ runner.os }}-${{ matrix.python-version }}-env-${{ hashFiles('requirements/tests.txt') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-${{ matrix.python-version }}-env-
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
- name: Get pip cache dir
|
||||
id: pip-cache
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
echo "::set-output name=dir::$(python -m pip cache dir)"
|
||||
- name: pip cache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.pip-cache.outputs.dir }}
|
||||
key: ${{ runner.os }}-pip-${{ hashFiles('requirements/tests.txt') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip --version
|
||||
python -m pip install -r requirements/tests.txt
|
||||
python -m pip install . --no-deps
|
||||
- name: Run tests
|
||||
run: python -m xonsh run-tests.xsh test -- --timeout=240
|
2
.github/workflows/pytest-linux-3.6.yml
vendored
2
.github/workflows/pytest-linux-3.6.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest]
|
||||
python-version: [3.6]
|
||||
python-version: [ "3.6" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
|
|
2
.github/workflows/pytest-linux-3.7.yml
vendored
2
.github/workflows/pytest-linux-3.7.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest]
|
||||
python-version: [3.7]
|
||||
python-version: [ "3.7" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
|
|
8
.github/workflows/pytest-linux-3.8.yml
vendored
8
.github/workflows/pytest-linux-3.8.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest]
|
||||
python-version: [3.8]
|
||||
python-version: [ "3.8" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
|
@ -57,8 +57,4 @@ jobs:
|
|||
python -m pip install -r requirements/tests.txt
|
||||
python -m pip install . --no-deps
|
||||
- name: Run tests
|
||||
run: python -m xonsh run-tests.xsh test --report-coverage -- --timeout=240
|
||||
- name: Upload coverage to Codecov
|
||||
uses: codecov/codecov-action@v1
|
||||
with:
|
||||
verbose: true
|
||||
run: python -m xonsh run-tests.xsh test -- --timeout=240
|
||||
|
|
10
.github/workflows/pytest-linux-3.9.yml
vendored
10
.github/workflows/pytest-linux-3.9.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest]
|
||||
python-version: [3.9]
|
||||
python-version: [ "3.9" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
|
@ -55,6 +55,10 @@ jobs:
|
|||
run: |
|
||||
python -m pip --version
|
||||
python -m pip install -r requirements/tests.txt
|
||||
python -m pip install . --no-deps
|
||||
python -m pip install -e . --no-deps
|
||||
- name: Run tests
|
||||
run: python -m xonsh run-tests.xsh test -- --timeout=240
|
||||
run: python -m xonsh run-tests.xsh test --report-coverage --no-amalgam -- --timeout=240
|
||||
- name: Upload coverage to Codecov
|
||||
uses: codecov/codecov-action@v1
|
||||
with:
|
||||
verbose: true
|
||||
|
|
57
.github/workflows/pytest-macos-3.10.yml
vendored
Normal file
57
.github/workflows/pytest-macos-3.10.yml
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
name: pytest macos 3.10-dev
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macOS-latest]
|
||||
python-version: [ "3.10-dev" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
name: Python ${{ matrix.python-version }} ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/conda_pkgs_dir
|
||||
~/miniconda*/envs/
|
||||
key: ${{ runner.os }}-${{ matrix.python-version }}-env-${{ hashFiles('requirements/tests.txt') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-${{ matrix.python-version }}-env-
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
- name: Get pip cache dir
|
||||
id: pip-cache
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
echo "::set-output name=dir::$(python -m pip cache dir)"
|
||||
- name: pip cache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.pip-cache.outputs.dir }}
|
||||
key: ${{ runner.os }}-pip-${{ hashFiles('requirements/tests.txt') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip --version
|
||||
python -m pip install -r requirements/tests.txt
|
||||
python -m pip install . --no-deps
|
||||
- name: Run tests
|
||||
run: python -m xonsh run-tests.xsh test -- --timeout=240
|
2
.github/workflows/pytest-macos-3.6.yml
vendored
2
.github/workflows/pytest-macos-3.6.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [macOS-latest]
|
||||
python-version: [3.6]
|
||||
python-version: [ "3.6" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
|
|
2
.github/workflows/pytest-macos-3.7.yml
vendored
2
.github/workflows/pytest-macos-3.7.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [macOS-latest]
|
||||
python-version: [3.7]
|
||||
python-version: [ "3.7" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
|
|
2
.github/workflows/pytest-macos-3.8.yml
vendored
2
.github/workflows/pytest-macos-3.8.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [macOS-latest]
|
||||
python-version: [3.8]
|
||||
python-version: [ "3.8" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
|
|
2
.github/workflows/pytest-macos-3.9.yml
vendored
2
.github/workflows/pytest-macos-3.9.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [macOS-latest]
|
||||
python-version: [3.9]
|
||||
python-version: [ "3.9" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
|
|
57
.github/workflows/pytest-windows-3.10.yml
vendored
Normal file
57
.github/workflows/pytest-windows-3.10.yml
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
name: pytest windows 3.10-dev
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [windows-latest]
|
||||
python-version: [ "3.10-dev" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
name: Python ${{ matrix.python-version }} ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/conda_pkgs_dir
|
||||
~/miniconda*/envs/
|
||||
key: ${{ runner.os }}-${{ matrix.python-version }}-env-${{ hashFiles('requirements/tests.txt') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-${{ matrix.python-version }}-env-
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
- name: Get pip cache dir
|
||||
id: pip-cache
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
echo "::set-output name=dir::$(python -m pip cache dir)"
|
||||
- name: pip cache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.pip-cache.outputs.dir }}
|
||||
key: ${{ runner.os }}-pip-${{ hashFiles('requirements/tests.txt') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip --version
|
||||
python -m pip install -r requirements/tests.txt
|
||||
python -m pip install . --no-deps
|
||||
- name: Run tests
|
||||
run: python -m xonsh run-tests.xsh test -- --timeout=240
|
2
.github/workflows/pytest-windows-3.6.yml
vendored
2
.github/workflows/pytest-windows-3.6.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [windows-latest]
|
||||
python-version: [3.6]
|
||||
python-version: [ "3.6" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
|
|
2
.github/workflows/pytest-windows-3.7.yml
vendored
2
.github/workflows/pytest-windows-3.7.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [windows-latest]
|
||||
python-version: [3.7]
|
||||
python-version: [ "3.7" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
|
|
2
.github/workflows/pytest-windows-3.8.yml
vendored
2
.github/workflows/pytest-windows-3.8.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [windows-latest]
|
||||
python-version: [3.8]
|
||||
python-version: [ "3.8" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
|
|
2
.github/workflows/pytest-windows-3.9.yml
vendored
2
.github/workflows/pytest-windows-3.9.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [windows-latest]
|
||||
python-version: [3.9]
|
||||
python-version: [ "3.9" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
|
|
31
.github/workflows/pytest.tmpl
vendored
31
.github/workflows/pytest.tmpl
vendored
|
@ -10,41 +10,52 @@ on:
|
|||
|
||||
jobs:
|
||||
build:
|
||||
{% raw %}
|
||||
runs-on: ${{ matrix.os }}
|
||||
{% endraw %}
|
||||
|
||||
runs-on: {{ '${{ matrix.os }}' }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [{{ OS_IMAGE }}]
|
||||
python-version: [{{ PYTHON_VERSION }}]
|
||||
python-version: [ "{{ PYTHON_VERSION }}" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
||||
shell: bash{% if not use_setup_py %} -l {0}{% endif %}
|
||||
|
||||
{% raw %}
|
||||
name: Python ${{ matrix.python-version }} ${{ matrix.os }}
|
||||
{% endraw %}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
with:{% raw %}
|
||||
path: |
|
||||
~/conda_pkgs_dir
|
||||
~/miniconda*/envs/
|
||||
key: ${{ runner.os }}-${{ matrix.python-version }}-env-${{ hashFiles('requirements/tests.txt') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-${{ matrix.python-version }}-env-
|
||||
${{ runner.os }}-${{ matrix.python-version }}-env-{% endraw %}
|
||||
|
||||
{% if use_setup_py %}
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: {{ '${{ matrix.python-version }}' }}
|
||||
|
||||
{% else %}
|
||||
- name: Setup conda
|
||||
uses: conda-incubator/setup-miniconda@v2
|
||||
with:
|
||||
activate-environment: xonsh-test
|
||||
auto-update-conda: true
|
||||
python-version: ${{ matrix.python-version }} # this itself makes sure that Python version is installed
|
||||
python-version: {{ '${{ matrix.python-version }}' }} # this itself makes sure that Python version is installed
|
||||
condarc-file: ci/condarc.yml
|
||||
use-only-tar-bz2: true
|
||||
{% endif %}
|
||||
- name: Get pip cache dir
|
||||
id: pip-cache
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
echo "::set-output name=dir::$(python -m pip cache dir)"
|
||||
{%- raw %}
|
||||
- name: pip cache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
|
@ -52,12 +63,12 @@ jobs:
|
|||
key: ${{ runner.os }}-pip-${{ hashFiles('requirements/tests.txt') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pip-
|
||||
{% endraw %}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip --version
|
||||
python -m pip install -r requirements/tests.txt
|
||||
python -m pip install . --no-deps
|
||||
{% endraw %}
|
||||
python -m pip install{% if report_coverage %} -e{% endif %} . --no-deps
|
||||
- name: Run tests
|
||||
run: python -m xonsh run-tests.xsh {{ test_cmd }}
|
||||
{% if allow_failure %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
name: qa linux 3.8
|
||||
name: qa linux 3.9
|
||||
|
||||
on:
|
||||
push:
|
||||
|
@ -15,7 +15,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest]
|
||||
python-version: [3.8]
|
||||
python-version: [ "3.9" ]
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -l {0}
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -83,3 +83,6 @@ xonsh/webconfig/js/app.js
|
|||
# mypy
|
||||
.dmypy.json
|
||||
.mypy_cache
|
||||
|
||||
# testmon pytest-plugin
|
||||
.testmondata
|
||||
|
|
|
@ -8,7 +8,7 @@ xonsh
|
|||
The language is a superset of Python 3.6+ with additional shell primitives.
|
||||
xonsh (pronounced *conch*) is meant for the daily use of experts and novices alike.
|
||||
|
||||
.. image:: https://raw.githubusercontent.com/xonsh/xonsh/master/docs/_static/xonsh5.png
|
||||
.. image:: https://raw.githubusercontent.com/xonsh/xonsh/main/docs/_static/xonsh5.png
|
||||
:alt: What is xonsh?
|
||||
:align: center
|
||||
|
||||
|
@ -24,7 +24,7 @@ xonsh
|
|||
:target: https://matrix.to/#/#xonsh:feneas.org
|
||||
:alt: Matrix room: #xonsh:feneas.org
|
||||
|
||||
.. image:: https://travis-ci.org/xonsh/xonsh.svg?branch=master
|
||||
.. image:: https://travis-ci.org/xonsh/xonsh.svg?branch=main
|
||||
:target: https://travis-ci.org/xonsh/xonsh
|
||||
:alt: Travis
|
||||
|
||||
|
|
23
news/py_3.10_fix.rst
Normal file
23
news/py_3.10_fix.rst
Normal file
|
@ -0,0 +1,23 @@
|
|||
**Added:**
|
||||
|
||||
* Now xonsh will work with Python 3.10. (Match statement is not supported).
|
||||
|
||||
**Changed:**
|
||||
|
||||
* <news item>
|
||||
|
||||
**Deprecated:**
|
||||
|
||||
* <news item>
|
||||
|
||||
**Removed:**
|
||||
|
||||
* <news item>
|
||||
|
||||
**Fixed:**
|
||||
|
||||
* <news item>
|
||||
|
||||
**Security:**
|
||||
|
||||
* <news item>
|
|
@ -26,11 +26,12 @@ def test(ns: argparse.Namespace):
|
|||
|
||||
args = ns.pytest_args
|
||||
|
||||
if not $(xonsh -c "import xonsh.main; print(xonsh.main.__file__, end='')").endswith("__amalgam__.py"):
|
||||
if (not ns.no_amalgam) and not $(xonsh -c "import xonsh.main; print(xonsh.main.__file__, end='')").endswith("__amalgam__.py"):
|
||||
echo "Tests need to run from the amalgamated xonsh! install with `pip install .` (without `-e`)"
|
||||
exit(1)
|
||||
|
||||
if ns.report_coverage:
|
||||
$XONSH_NO_AMALGAMATE = True
|
||||
![pytest @(_replace_args(args, 0)) --cov --cov-report=xml --cov-report=term]
|
||||
else:
|
||||
![pytest @(_replace_args(args, 0))]
|
||||
|
@ -38,6 +39,7 @@ def test(ns: argparse.Namespace):
|
|||
|
||||
def qa(ns: argparse.Namespace):
|
||||
"""QA checks"""
|
||||
$XONSH_NO_AMALGAMATE = True
|
||||
|
||||
echo "---------- Check Black formatter -----------"
|
||||
black --check xonsh xontrib tests
|
||||
|
@ -66,10 +68,18 @@ if __name__ == '__main__':
|
|||
)
|
||||
test_parser.add_argument(
|
||||
'--report-coverage',
|
||||
'-c',
|
||||
action="store_true",
|
||||
default=False,
|
||||
help="Report coverage at the end of the test",
|
||||
)
|
||||
test_parser.add_argument(
|
||||
'--no-amalgam',
|
||||
'-n',
|
||||
action="store_true",
|
||||
default=False,
|
||||
help="Disable amalgamation check.",
|
||||
)
|
||||
test_parser.set_defaults(func=test)
|
||||
|
||||
qa_parser = commands.add_parser('qa', help=qa.__doc__)
|
||||
|
|
|
@ -129,6 +129,21 @@ def completion_context_parse():
|
|||
return CompletionContextParser().parse
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def ptk_shell(xonsh_execer):
|
||||
from prompt_toolkit.input import create_pipe_input
|
||||
from prompt_toolkit.output import DummyOutput
|
||||
from xonsh.ptk_shell.shell import PromptToolkitShell
|
||||
|
||||
inp = create_pipe_input()
|
||||
out = DummyOutput()
|
||||
shell = PromptToolkitShell(
|
||||
execer=xonsh_execer, ctx={}, ptk_args={"input": inp, "output": out}
|
||||
)
|
||||
yield inp, out, shell
|
||||
inp.close()
|
||||
|
||||
|
||||
def pytest_configure(config):
|
||||
"""Abort test run if --flake8 requested, since it would hang on parser_test.py"""
|
||||
if config.getoption("--flake8", ""):
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
import os
|
||||
import os.path
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
import pytest
|
||||
from xonsh import dirstack
|
||||
|
@ -31,6 +32,10 @@ pytestmark = pytest.mark.skipif(
|
|||
len(TEMP_DRIVE) < MAX_TEMP_DRIVES,
|
||||
reason="Too many drive letters are already used by Windows to run the tests.",
|
||||
)
|
||||
xfail_py310 = pytest.mark.xfail(
|
||||
sys.version_info >= (3, 10),
|
||||
reason="throws file-not-found error (todo: fix)",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
|
@ -287,6 +292,7 @@ def xonsh_builtins_cd(xession):
|
|||
|
||||
|
||||
@pytest.mark.skipif(not ON_WINDOWS, reason="Windows-only UNC functionality")
|
||||
@xfail_py310
|
||||
def test_uncpushd_cd_unc_auto_pushd(xonsh_builtins_cd, with_unc_check_enabled):
|
||||
xonsh_builtins_cd.env["AUTO_PUSHD"] = True
|
||||
so, se, rc = dirstack.cd([r"\\localhost\uncpushd_test_PARENT"])
|
||||
|
@ -298,6 +304,7 @@ def test_uncpushd_cd_unc_auto_pushd(xonsh_builtins_cd, with_unc_check_enabled):
|
|||
|
||||
|
||||
@pytest.mark.skipif(not ON_WINDOWS, reason="Windows-only UNC functionality")
|
||||
@xfail_py310
|
||||
def test_uncpushd_cd_unc_nocheck(xonsh_builtins_cd, with_unc_check_disabled):
|
||||
if with_unc_check_disabled == 0:
|
||||
return
|
||||
|
@ -306,6 +313,7 @@ def test_uncpushd_cd_unc_nocheck(xonsh_builtins_cd, with_unc_check_disabled):
|
|||
|
||||
|
||||
@pytest.mark.skipif(not ON_WINDOWS, reason="Windows-only UNC functionality")
|
||||
@xfail_py310
|
||||
def test_uncpushd_cd_unc_no_auto_pushd(xonsh_builtins_cd, with_unc_check_enabled):
|
||||
if with_unc_check_enabled == 0:
|
||||
return
|
||||
|
|
|
@ -158,3 +158,10 @@ def test_annotated_assign():
|
|||
def test_exec_eol():
|
||||
locs = dict()
|
||||
assert check_exec("a=0", locs=locs) and check_exec("a=0\n", locs=locs)
|
||||
|
||||
|
||||
def test_exec_print(capsys):
|
||||
ls = {"nested": "some long list"}
|
||||
check_exec("print(ls)", locs=dict(ls=ls))
|
||||
out, err = capsys.readouterr()
|
||||
assert out.strip() == repr(ls)
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
import sys
|
||||
import pytest
|
||||
|
||||
from xonsh.platform import minimum_required_ptk_version
|
||||
|
||||
# verify error if ptk not installed or below min
|
||||
|
@ -127,4 +126,10 @@ def test_remove_ansi_osc(raw_prompt, prompt, osc_tokens):
|
|||
assert removed == ref
|
||||
|
||||
|
||||
# someday: initialize PromptToolkitShell and have it actually do something.
|
||||
def test_ptk_prompt(ptk_shell):
|
||||
inp, out, shell = ptk_shell
|
||||
text = "hello"
|
||||
inp.send_text(f"{text}\n") # note: terminate with '\n'
|
||||
result = shell.singleline()
|
||||
# todo: check rendered output using https://pyte.readthedocs.io/
|
||||
assert result == text
|
||||
|
|
|
@ -149,7 +149,10 @@ def test_color_token_by_name(in_tuple, exp_ct, exp_ansi_colors, xs_LS_COLORS):
|
|||
assert ansi_colors == exp_ansi_colors, "color token mapped to correct color string"
|
||||
|
||||
|
||||
def test_XonshStyle_init_file_color_tokens(xs_LS_COLORS):
|
||||
def test_XonshStyle_init_file_color_tokens(xs_LS_COLORS, monkeypatch):
|
||||
keys = list(file_color_tokens)
|
||||
for n in keys:
|
||||
monkeypatch.delitem(file_color_tokens, n)
|
||||
xs = XonshStyle()
|
||||
assert xs.styles
|
||||
assert type(file_color_tokens) is dict
|
||||
|
|
|
@ -6,7 +6,9 @@ from xonsh.platform import PYTHON_VERSION_INFO
|
|||
|
||||
@lazyobject
|
||||
def Parser():
|
||||
if PYTHON_VERSION_INFO > (3, 9):
|
||||
if PYTHON_VERSION_INFO > (3, 10):
|
||||
from xonsh.parsers.v310 import Parser as p
|
||||
elif PYTHON_VERSION_INFO > (3, 9):
|
||||
from xonsh.parsers.v39 import Parser as p
|
||||
elif PYTHON_VERSION_INFO > (3, 8):
|
||||
from xonsh.parsers.v38 import Parser as p
|
||||
|
|
38
xonsh/parsers/v310.py
Normal file
38
xonsh/parsers/v310.py
Normal file
|
@ -0,0 +1,38 @@
|
|||
"""Handles changes since PY310
|
||||
|
||||
handle
|
||||
- import-alias requiring lineno
|
||||
"""
|
||||
|
||||
import ast
|
||||
|
||||
from xonsh.parsers.v39 import Parser as ThreeNineParser
|
||||
from xonsh.ply.ply import yacc
|
||||
|
||||
|
||||
class Parser(ThreeNineParser):
|
||||
def p_import_from_post_times(self, p):
|
||||
"""import_from_post : TIMES"""
|
||||
p[0] = [ast.alias(name=p[1], asname=None, **self.get_line_cols(p, 1))]
|
||||
|
||||
def p_import_as_name(self, p):
|
||||
"""import_as_name : NAME as_name_opt"""
|
||||
self.p_dotted_as_name(p)
|
||||
|
||||
def p_dotted_as_name(self, p: yacc.YaccProduction):
|
||||
"""dotted_as_name : dotted_name as_name_opt"""
|
||||
alias_idx = 2
|
||||
p[0] = ast.alias(
|
||||
name=p[1], asname=p[alias_idx], **self.get_line_cols(p, alias_idx)
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def get_line_cols(p: yacc.YaccProduction, idx: int):
|
||||
line_no, end_line_no = p.linespan(idx)
|
||||
col_offset, end_col_offset = p.lexspan(idx)
|
||||
return dict(
|
||||
lineno=line_no,
|
||||
end_lineno=end_line_no,
|
||||
col_offset=col_offset,
|
||||
end_col_offset=end_col_offset,
|
||||
)
|
|
@ -191,18 +191,19 @@ class PromptToolkitShell(BaseShell):
|
|||
}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
ptk_args = kwargs.pop("ptk_args", {})
|
||||
super().__init__(**kwargs)
|
||||
if ON_WINDOWS:
|
||||
winutils.enable_virtual_terminal_processing()
|
||||
self._first_prompt = True
|
||||
self.history = ThreadedHistory(PromptToolkitHistory())
|
||||
|
||||
ptk_args = {"history": self.history}
|
||||
ptk_args.setdefault("history", self.history)
|
||||
if not XSH.env.get("XONSH_COPY_ON_DELETE", False):
|
||||
disable_copy_on_deletion()
|
||||
if HAVE_SYS_CLIPBOARD:
|
||||
ptk_args["clipboard"] = PyperclipClipboard()
|
||||
self.prompter = PromptSession(**ptk_args)
|
||||
ptk_args.setdefault("clipboard", PyperclipClipboard())
|
||||
self.prompter: PromptSession = PromptSession(**ptk_args)
|
||||
|
||||
self.prompt_formatter = PTKPromptFormatter(self.prompter)
|
||||
self.pt_completer = PromptToolkitCompleter(self.completer, self.ctx, self)
|
||||
|
|
|
@ -7,6 +7,14 @@ from xonsh.built_ins import XSH
|
|||
__all__ = ()
|
||||
|
||||
|
||||
def _warn_not_supported(msg: str):
|
||||
print(
|
||||
f"""Not supported ``{msg}`` in xontrib bashisms.
|
||||
PRs are welcome - https://github.com/xonsh/xonsh/blob/main/xontrib/bashisms.py""",
|
||||
file=sys.stderr,
|
||||
)
|
||||
|
||||
|
||||
@XSH.builtins.events.on_transform_command
|
||||
def bash_preproc(cmd, **kw):
|
||||
bang_previous = {
|
||||
|
@ -105,10 +113,7 @@ def _set(args):
|
|||
elif arg == "+x":
|
||||
XSH.env["XONSH_TRACE_SUBPROC"] = False
|
||||
else:
|
||||
print(
|
||||
"Not supported in xontrib bashisms.\nPRs are welcome - https://github.com/xonsh/xonsh/blob/master/xontrib/bashisms.py",
|
||||
file=sys.stderr,
|
||||
)
|
||||
_warn_not_supported(f"set {arg}")
|
||||
|
||||
|
||||
XSH.aliases["set"] = _set
|
||||
|
@ -136,10 +141,7 @@ def _shopt(args):
|
|||
elif opt == "-u" and optname == "dotglob":
|
||||
XSH.env["DOTGLOB"] = False
|
||||
else:
|
||||
print(
|
||||
"Not supported in xontrib bashisms.\nPRs are welcome - https://github.com/xonsh/xonsh/blob/master/xontrib/bashisms.py",
|
||||
file=sys.stderr,
|
||||
)
|
||||
_warn_not_supported(f"shopt {args}")
|
||||
|
||||
|
||||
XSH.aliases["shopt"] = _shopt
|
||||
|
|
Loading…
Add table
Reference in a new issue