Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-subprocess-tee for 
openSUSE:Factory checked in at 2022-12-08 16:52:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-subprocess-tee (Old)
 and      /work/SRC/openSUSE:Factory/.python-subprocess-tee.new.1835 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-subprocess-tee"

Thu Dec  8 16:52:24 2022 rev:4 rq:1041381 version:0.4.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-subprocess-tee/python-subprocess-tee.changes  
    2022-09-11 21:57:35.669669474 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-subprocess-tee.new.1835/python-subprocess-tee.changes
    2022-12-08 16:52:33.431904716 +0100
@@ -1,0 +2,10 @@
+Wed Dec  7 22:28:03 UTC 2022 - Yogalakshmi Arunachalam <yarunacha...@suse.com>
+
+- * Update to version 0.4.0 
+  * Minor Changes
+  Enable support for py311 (#72) @ssbarnea
+  * Bugfixes
+  Remove support for py37 (#70) @ssbarnea
+  Remove support for py36 (#65) @ssbarnea
+  Mark test test_rich_console_ex as broken (#64) @ssbarnea
+-------------------------------------------------------------------

Old:
----
  subprocess-tee-0.3.5.tar.gz

New:
----
  subprocess-tee-0.4.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-subprocess-tee.spec ++++++
--- /var/tmp/diff_new_pack.u6L2Hk/_old  2022-12-08 16:52:33.919907219 +0100
+++ /var/tmp/diff_new_pack.u6L2Hk/_new  2022-12-08 16:52:33.927907260 +0100
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-subprocess-tee
-Version:        0.3.5
+Version:        0.4.0
 Release:        0
 Summary:        Captures the output of subprocesses in real-time
 License:        MIT

++++++ subprocess-tee-0.3.5.tar.gz -> subprocess-tee-0.4.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/.flake8 
new/subprocess-tee-0.4.0/.flake8
--- old/subprocess-tee-0.3.5/.flake8    1970-01-01 01:00:00.000000000 +0100
+++ new/subprocess-tee-0.4.0/.flake8    2022-11-25 01:45:26.000000000 +0100
@@ -0,0 +1,2 @@
+[flake8]
+max-line-length = 88
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/.github/CODEOWNERS 
new/subprocess-tee-0.4.0/.github/CODEOWNERS
--- old/subprocess-tee-0.3.5/.github/CODEOWNERS 2021-10-05 12:08:12.000000000 
+0200
+++ new/subprocess-tee-0.4.0/.github/CODEOWNERS 2022-11-25 01:45:26.000000000 
+0100
@@ -1,2 +1 @@
 *       @ssbarnea
-*       @webknjaz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/.github/dependabot.yml 
new/subprocess-tee-0.4.0/.github/dependabot.yml
--- old/subprocess-tee-0.3.5/.github/dependabot.yml     1970-01-01 
01:00:00.000000000 +0100
+++ new/subprocess-tee-0.4.0/.github/dependabot.yml     2022-11-25 
01:45:26.000000000 +0100
@@ -0,0 +1,17 @@
+---
+version: 2
+updates:
+  - package-ecosystem: pip
+    directory: /
+    schedule:
+      interval: daily
+    labels:
+      - skip-changelog
+    versioning-strategy: lockfile-only
+    open-pull-requests-limit: 0 # neutered
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: daily
+    labels:
+      - "skip-changelog"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/.github/release-drafter.yml 
new/subprocess-tee-0.4.0/.github/release-drafter.yml
--- old/subprocess-tee-0.3.5/.github/release-drafter.yml        2021-10-05 
12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/.github/release-drafter.yml        2022-11-25 
01:45:26.000000000 +0100
@@ -1,51 +1,3 @@
-# Format and labels used aim to match those used by Ansible project
-name-template: '$RESOLVED_VERSION'
-tag-template: '$RESOLVED_VERSION'
-categories:
-  - title: 'Major Changes'
-    labels:
-      - 'major'  # c6476b
-  - title: 'Minor Changes'
-    labels:
-      - 'feature'  # 006b75
-      - 'enhancement'  # ededed
-      - 'refactoring'
-  - title: 'Bugfixes'
-    labels:
-      - 'bug'  # fbca04
-  - title: 'Deprecations'
-    labels:
-      - 'deprecated'  # fef2c0
-exclude-labels:
-  - 'skip-changelog'
-version-resolver:
-  major:
-    labels:
-      - 'major'
-  minor:
-    labels:
-      - 'minor'
-      - 'feature'
-      - 'enhancement'
-      - 'refactoring'
-  patch:
-    labels:
-      - 'patch'
-      - 'bug'
-      - 'deprecated'
-  default: patch
-autolabeler:
-  - label: 'skip-changelog'
-    title: '/chore/i'
-  - label: 'bug'
-    title: '/fix/i'
-  - label: 'enhancement'
-    title: '/(enhance|improve)/i'
-  - label: 'feature'
-    title: '/feature/i'
-  - label: 'dreprecated'
-    title: '/deprecat/i'
-template: |
-  $CHANGES
-
-  Kudos goes to: $CONTRIBUTORS
+---
+# see https://github.com/ansible/devtools
+_extends: ansible/devtools
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/.github/workflows/ack.yml 
new/subprocess-tee-0.4.0/.github/workflows/ack.yml
--- old/subprocess-tee-0.3.5/.github/workflows/ack.yml  1970-01-01 
01:00:00.000000000 +0100
+++ new/subprocess-tee-0.4.0/.github/workflows/ack.yml  2022-11-25 
01:45:26.000000000 +0100
@@ -0,0 +1,10 @@
+---
+# See https://github.com/ansible/devtools/blob/main/.github/workflows/ack.yml
+name: ack
+on:
+  pull_request_target:
+    types: [opened, labeled, unlabeled, synchronize]
+
+jobs:
+  ack:
+    uses: ansible/devtools/.github/workflows/ack.yml@main
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/.github/workflows/labels.yml 
new/subprocess-tee-0.4.0/.github/workflows/labels.yml
--- old/subprocess-tee-0.3.5/.github/workflows/labels.yml       2021-10-05 
12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/.github/workflows/labels.yml       1970-01-01 
01:00:00.000000000 +0100
@@ -1,21 +0,0 @@
-# See https://github.com/jesusvasquez333/verify-pr-label-action
-name: labels
-on:
-  pull_request_target:
-    types: [opened, labeled, unlabeled, synchronize]
-
-jobs:
-  check_pr_labels:
-    runs-on: ubuntu-latest
-    name: verify
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v2
-      - name: Verify PR label action
-        uses: jesusvasquez333/verify-pr-label-action@v1.4.0
-        with:
-          github-token: '${{ secrets.GITHUB_TOKEN }}'
-          valid-labels: 'bug, enhancement, feature, refactoring, major, 
deprecated, skip-changelog'
-          invalid-labels: 'help wanted, invalid, feedback-needed, incomplete'
-          pull-request-number: '${{ github.event.pull_request.number }}'
-          disable-reviews: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/.github/workflows/push.yml 
new/subprocess-tee-0.4.0/.github/workflows/push.yml
--- old/subprocess-tee-0.3.5/.github/workflows/push.yml 1970-01-01 
01:00:00.000000000 +0100
+++ new/subprocess-tee-0.4.0/.github/workflows/push.yml 2022-11-25 
01:45:26.000000000 +0100
@@ -0,0 +1,13 @@
+---
+# See https://github.com/ansible/devtools/blob/main/.github/workflows/push.yml
+name: push
+on:
+  push:
+    branches:
+      - main
+      - "releases/**"
+      - "stable/**"
+
+jobs:
+  ack:
+    uses: ansible/devtools/.github/workflows/push.yml@main
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/.github/workflows/release-drafter.yml 
new/subprocess-tee-0.4.0/.github/workflows/release-drafter.yml
--- old/subprocess-tee-0.3.5/.github/workflows/release-drafter.yml      
2021-10-05 12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/.github/workflows/release-drafter.yml      
1970-01-01 01:00:00.000000000 +0100
@@ -1,18 +0,0 @@
-name: release-drafter
-
-on:
-  push:
-    # branches to consider in the event; optional, defaults to all
-    branches:
-      - main
-      - 'releases/**'
-      - 'stable/**'
-
-jobs:
-  update_release_draft:
-    runs-on: ubuntu-20.04
-    steps:
-      # Drafts your next Release notes as Pull Requests are merged into "main"
-      - uses: release-drafter/release-drafter@v5
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/.github/workflows/release.yml 
new/subprocess-tee-0.4.0/.github/workflows/release.yml
--- old/subprocess-tee-0.3.5/.github/workflows/release.yml      2021-10-05 
12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/.github/workflows/release.yml      2022-11-25 
01:45:26.000000000 +0100
@@ -1,3 +1,4 @@
+---
 name: release
 
 on:
@@ -17,32 +18,32 @@
       TOX_PARALLEL_NO_SPINNER: 1
 
     steps:
-    - name: Switch to using Python 3.8 by default
-      uses: actions/setup-python@v2
-      with:
-        python-version: 3.8
-    - name: Install tox
-      run: >-
-        python3 -m
-        pip install
-        --user
-        tox
-    - name: Check out src from Git
-      uses: actions/checkout@v2
-      with:
-        fetch-depth: 0  # needed by setuptools-scm
-    - name: Build dists
-      run: python -m tox
-    - name: Publish to test.pypi.org
-      if: >-  # "create" workflows run separately from "push" & "pull_request"
-        github.event_name == 'release'
-      uses: pypa/gh-action-pypi-publish@master
-      with:
-        password: ${{ secrets.testpypi_password }}
-        repository_url: https://test.pypi.org/legacy/
-    - name: Publish to pypi.org
-      if: >-  # "create" workflows run separately from "push" & "pull_request"
-        github.event_name == 'release'
-      uses: pypa/gh-action-pypi-publish@master
-      with:
-        password: ${{ secrets.pypi_password }}
+      - name: Switch to using Python 3.8 by default
+        uses: actions/setup-python@v4
+        with:
+          python-version: 3.8
+      - name: Install tox
+        run: >-
+          python3 -m
+          pip install
+          --user
+          tox
+      - name: Check out src from Git
+        uses: actions/checkout@v3
+        with:
+          fetch-depth: 0 # needed by setuptools-scm
+      - name: Build dists
+        run: python -m tox
+      - name: Publish to test.pypi.org
+        if: >- # "create" workflows run separately from "push" & "pull_request"
+          github.event_name == 'release'
+        uses: pypa/gh-action-pypi-publish@release/v1
+        with:
+          password: ${{ secrets.testpypi_password }}
+          repository_url: https://test.pypi.org/legacy/
+      - name: Publish to pypi.org
+        if: >- # "create" workflows run separately from "push" & "pull_request"
+          github.event_name == 'release'
+        uses: pypa/gh-action-pypi-publish@release/v1
+        with:
+          password: ${{ secrets.pypi_password }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/.github/workflows/tox.yml 
new/subprocess-tee-0.4.0/.github/workflows/tox.yml
--- old/subprocess-tee-0.3.5/.github/workflows/tox.yml  2021-10-05 
12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/.github/workflows/tox.yml  2022-11-25 
01:45:26.000000000 +0100
@@ -1,21 +1,16 @@
 name: tox
 
 on:
-  create:  # is used for publishing to PyPI and TestPyPI
-    tags:  # any tag regardless of its name, no branches
   push:  # only publishes pushes to the main branch to TestPyPI
     branches:  # any integration branch but not tag
-      - $default-branch
+      - main
     tags-ignore:
       - "**"
   pull_request:
-  schedule:
-    - cron: 1 0 * * *  # Run daily at 0:01 UTC
 
 jobs:
   linters:
-    name: >-
-      ${{ matrix.env.TOXENV }}
+    name: ${{ matrix.env.TOXENV }}
     runs-on: ${{ matrix.os }}
     strategy:
       fail-fast: false
@@ -27,9 +22,6 @@
         env:
         - TOXENV: lint
         - TOXENV: packaging
-    env:
-      TOX_PARALLEL_NO_SPINNER: 1
-
     steps:
     - uses: actions/checkout@master
     - name: Set up Python ${{ matrix.python-version }}
@@ -37,15 +29,14 @@
       with:
         python-version: ${{ matrix.python-version }}
     - name: set PY_SHA256
-      run: |
-        echo "PY_SHA256=$(python -VV | sha256sum | cut -d' ' -f1)" >> 
$GITHUB_ENV
+      run: echo "PY_SHA256=$(python -VV | sha256sum | cut -d' ' -f1)" >> 
$GITHUB_ENV
     - name: Pre-commit cache
-      uses: actions/cache@v1
+      uses: actions/cache@v3
       with:
         path: ~/.cache/pre-commit
         key: ${{ runner.os }}-pre-commit-${{ env.PY_SHA256 }}-${{ 
hashFiles('setup.cfg') }}-${{ hashFiles('tox.ini') }}-${{ 
hashFiles('pyproject.toml') }}-${{ hashFiles('.pre-commit-config.yaml') }}-${{ 
hashFiles('pytest.ini') }}
     - name: Pip cache
-      uses: actions/cache@v1
+      uses: actions/cache@v3
       with:
         path: ~/.cache/pip
         key: ${{ runner.os }}-pip-${{ env.PY_SHA256 }}-${{ 
hashFiles('setup.cfg') }}-${{ hashFiles('tox.ini') }}-${{ 
hashFiles('pyproject.toml') }}-${{ hashFiles('.pre-commit-config.yaml') }}-${{ 
hashFiles('pytest.ini') }}
@@ -53,28 +44,17 @@
           ${{ runner.os }}-pip-
           ${{ runner.os }}-
     - name: Install tox
-      run: |
-        python -m pip install --upgrade tox
+      run: python -m pip install --upgrade tox
     - name: Log installed dists
-      run: >-
-        python -m pip freeze --all
-    - name: >-
-        Initialize tox envs
-      run: >-
-        python -m
-        tox
-        --parallel auto
-        --parallel-live
-        --notest
-        --skip-missing-interpreters false
-        -vv
+      run: python -m pip freeze --all
+    - name: Initialize tox envs
+      run: python -m tox --notest --skip-missing-interpreters false -vv
       env: ${{ matrix.env }}
     - name: Test with tox
-      run: |
-        python -m tox --parallel auto --parallel-live
+      run: python -m tox
       env: ${{ matrix.env }}
     - name: Archive logs
-      uses: actions/upload-artifact@v2
+      uses: actions/upload-artifact@v3
       with:
         name: logs.zip
         path: .tox/**/log/
@@ -89,8 +69,7 @@
         run: docker build .
 
   unit:
-    name: >-
-      py${{ matrix.python-version }}@${{ matrix.os }}
+    name: py${{ matrix.python-version }}@${{ matrix.os }}
     runs-on: ${{ matrix.os }}
     strategy:
       # fail-fast: false
@@ -107,19 +86,11 @@
         # - windows-latest
         # - windows-2016
         python-version:
-        - "3.6"
-        - "3.7"
         - "3.8"
         - "3.9"
         - "3.10"
         include:
         - os: ubuntu-latest
-          python-version: "3.6"
-          tox_env: py36
-        - os: ubuntu-latest
-          python-version: "3.7"
-          tox_env: py37
-        - os: ubuntu-latest
           python-version: "3.8"
           tox_env: py38
         - os: ubuntu-latest
@@ -128,16 +99,15 @@
         - os: ubuntu-latest
           python-version: "3.10"
           tox_env: py310
+        - os: ubuntu-latest
+          python-version: "3.11"
+          tox_env: py311
         - os: macOS-latest
-          python-version: "3.6"
-          tox_env: py36
+          python-version: "3.8"
+          tox_env: py38
         - os: macOS-latest
-          python-version: "3.10"
-          tox_env: py39
-
-    env:
-      TOX_PARALLEL_NO_SPINNER: 1
-
+          python-version: "3.11"
+          tox_env: py311
     steps:
     - uses: actions/checkout@master
     - name: Get history and tags for SCM versioning to work
@@ -145,25 +115,15 @@
         git fetch --prune --unshallow
         git fetch --depth=1 origin +refs/tags/*:refs/tags/*
     - name: Set up stock Python ${{ matrix.python-version }} from GitHub
-      if: >-
-        !endsWith(matrix.python-version, '-dev')
       uses: actions/setup-python@v2
       with:
         python-version: ${{ matrix.python-version }}
-    - name: Set up Python ${{ matrix.python-version }} from deadsnakes
-      if: >-
-        endsWith(matrix.python-version, '-dev')
-      uses: deadsnakes/action@v1.0.0
-      with:
-        python-version: ${{ matrix.python-version }}
-    - name: >-
-        Log the currently selected Python
-        version info (${{ matrix.python-version }})
+    - name: Log the currently selected Python version info (${{ 
matrix.python-version }})
       run: |
         python --version --version
         which python
     - name: Pip cache
-      uses: actions/cache@v1
+      uses: actions/cache@v3
       with:
         path: ~/.cache/pip
         key: ${{ runner.os }}-pip-${{ env.PY_SHA256 }}-${{ 
hashFiles('setup.cfg') }}-${{ hashFiles('tox.ini') }}-${{ 
hashFiles('pyproject.toml') }}-${{ hashFiles('.pre-commit-config.yaml') }}-${{ 
hashFiles('pytest.ini') }}
@@ -175,5 +135,17 @@
           python -m pip install -U pip
           pip install tox
     - name: Run tox -e ${{ matrix.tox_env }}
-      run: |
-          tox -e ${{ matrix.tox_env }}
+      run: tox -e ${{ matrix.tox_env }}
+
+  check: # This job does nothing and is only used for the branch protection
+    if: always()
+    needs:
+      - alpine
+      - linters
+      - unit
+    runs-on: ubuntu-latest
+    steps:
+      - name: Decide whether the needed jobs succeeded or failed
+        uses: re-actors/alls-green@release/v1
+        with:
+          jobs: ${{ toJSON(needs) }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/.pre-commit-config.yaml 
new/subprocess-tee-0.4.0/.pre-commit-config.yaml
--- old/subprocess-tee-0.3.5/.pre-commit-config.yaml    2021-10-05 
12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/.pre-commit-config.yaml    2022-11-25 
01:45:26.000000000 +0100
@@ -5,16 +5,16 @@
     )
 repos:
   - repo: https://github.com/PyCQA/isort
-    rev: 5.9.3
+    rev: 5.10.1
     hooks:
       - id: isort
-  - repo: https://github.com/python/black.git
-    rev: 21.8b0
+  - repo: https://github.com/psf/black
+    rev: 22.10.0
     hooks:
       - id: black
         language_version: python3
   - repo: https://github.com/pre-commit/pre-commit-hooks.git
-    rev: v4.0.1
+    rev: v4.4.0
     hooks:
       - id: end-of-file-fixer
       - id: trailing-whitespace
@@ -25,24 +25,24 @@
       - id: debug-statements
         language_version: python3
   - repo: https://github.com/pycqa/flake8.git
-    rev: 3.9.2
+    rev: 6.0.0
     hooks:
       - id: flake8
         additional_dependencies:
-          - pydocstyle>=5.1.1
           - flake8-absolute-import
           - flake8-black>=0.1.1
           - flake8-docstrings>=1.5.0
+          - pydocstyle>=5.1.1
         language_version: python3
   - repo: https://github.com/adrienverge/yamllint.git
-    rev: v1.26.3
+    rev: v1.28.0
     hooks:
       - id: yamllint
         files: \.(yaml|yml)$
         types: [file, yaml]
         entry: yamllint --strict
   - repo: https://github.com/pre-commit/mirrors-mypy
-    rev: v0.910
+    rev: v0.991
     hooks:
       - id: mypy
         # empty args needed in order to match mypy cli behavior
@@ -54,7 +54,7 @@
           - packaging
           - enrich>=1.2.5
   - repo: https://github.com/PyCQA/pylint
-    rev: v2.10.2
+    rev: v2.15.6
     hooks:
       - id: pylint
         additional_dependencies:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi
 
new/subprocess-tee-0.4.0/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi
--- 
old/subprocess-tee-0.3.5/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi
 2021-10-05 12:08:21.000000000 +0200
+++ 
new/subprocess-tee-0.4.0/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi
 1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-def check_pkcs7_padding(data: bytes) -> bool: ...
-def check_ansix923_padding(data: bytes) -> bool: ...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi
 
new/subprocess-tee-0.4.0/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi
--- 
old/subprocess-tee-0.3.5/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi
     2021-10-05 12:08:21.000000000 +0200
+++ 
new/subprocess-tee-0.4.0/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi
     1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-import typing
-
-from cryptography.x509 import TLSFeature, PrecertPoison
-
-class TestCertificate:
-    not_after_tag: int
-    not_before_tag: int
-    issuer_value_tags: typing.List[int]
-    subject_value_tags: typing.List[int]
-
-def decode_dss_signature(signature: bytes) -> typing.Tuple[int, int]: ...
-def encode_dss_signature(r: int, s: int) -> bytes: ...
-def encode_tls_feature(ext: TLSFeature) -> bytes: ...
-def encode_precert_poison(ext: PrecertPoison) -> bytes: ...
-def parse_spki_for_data(data: bytes) -> bytes: ...
-def test_parse_certificate(data: bytes) -> TestCertificate: ...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi
 
new/subprocess-tee-0.4.0/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi
--- 
old/subprocess-tee-0.3.5/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi
     2021-10-05 12:08:21.000000000 +0200
+++ 
new/subprocess-tee-0.4.0/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi
     1970-01-01 01:00:00.000000000 +0100
@@ -1,5 +0,0 @@
-from cryptography.x509 import ExtensionType
-from cryptography.x509.ocsp import OCSPRequest, OCSPResponse
-
-def load_der_ocsp_request(data: bytes) -> OCSPRequest: ...
-def load_der_ocsp_response(data: bytes) -> OCSPResponse: ...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi
 
new/subprocess-tee-0.4.0/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi
--- 
old/subprocess-tee-0.3.5/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi
     2021-10-05 12:08:21.000000000 +0200
+++ 
new/subprocess-tee-0.4.0/.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi
     1970-01-01 01:00:00.000000000 +0100
@@ -1,23 +0,0 @@
-import datetime
-import typing
-
-from cryptography import x509
-
-def parse_csr_extension(
-    der_oid: bytes, ext_data: bytes
-) -> x509.ExtensionType: ...
-def load_pem_x509_certificate(data: bytes) -> x509.Certificate: ...
-def load_der_x509_certificate(data: bytes) -> x509.Certificate: ...
-def load_pem_x509_crl(data: bytes) -> x509.CertificateRevocationList: ...
-def load_der_x509_crl(data: bytes) -> x509.CertificateRevocationList: ...
-def load_pem_x509_csr(data: bytes) -> x509.CertificateSigningRequest: ...
-def load_der_x509_csr(data: bytes) -> x509.CertificateSigningRequest: ...
-def encode_precertificate_signed_certificate_timestamps(
-    extension: x509.PrecertificateSignedCertificateTimestamps,
-) -> bytes: ...
-
-class Sct: ...
-class Certificate: ...
-class RevokedCertificate: ...
-class CertificateRevocationList: ...
-class CertificateSigningRequest: ...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/.tox/packaging/lib/python3.8/site-packages/pip/py.typed
 
new/subprocess-tee-0.4.0/.tox/packaging/lib/python3.8/site-packages/pip/py.typed
--- 
old/subprocess-tee-0.3.5/.tox/packaging/lib/python3.8/site-packages/pip/py.typed
    2021-10-05 12:08:13.000000000 +0200
+++ 
new/subprocess-tee-0.4.0/.tox/packaging/lib/python3.8/site-packages/pip/py.typed
    1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-pip is a command line program. While it is implemented in Python, and so is
-available for import, you must not use pip's internal APIs in this way. Typing
-information is provided as a convenience only and is not a guarantee. Expect
-unannounced changes to the API and types in releases.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/.tox/packaging/lib/python3.8/site-packages/tomli/py.typed
 
new/subprocess-tee-0.4.0/.tox/packaging/lib/python3.8/site-packages/tomli/py.typed
--- 
old/subprocess-tee-0.3.5/.tox/packaging/lib/python3.8/site-packages/tomli/py.typed
  2021-10-05 12:08:21.000000000 +0200
+++ 
new/subprocess-tee-0.4.0/.tox/packaging/lib/python3.8/site-packages/tomli/py.typed
  1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-# Marker file for PEP 561
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/Dockerfile 
new/subprocess-tee-0.4.0/Dockerfile
--- old/subprocess-tee-0.3.5/Dockerfile 2021-10-05 12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/Dockerfile 2022-11-25 01:45:26.000000000 +0100
@@ -2,7 +2,7 @@
 # Alpine is used on purpose because it does not come with bash, and we
 # want to test that subprocess-tee works even on systems without bash shell.
 ENV BUILD_DEPS="\
-ansible-base \
+ansible-core \
 gcc \
 git \
 libffi-dev \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/MANIFEST.in 
new/subprocess-tee-0.4.0/MANIFEST.in
--- old/subprocess-tee-0.3.5/MANIFEST.in        2021-10-05 12:08:12.000000000 
+0200
+++ new/subprocess-tee-0.4.0/MANIFEST.in        1970-01-01 01:00:00.000000000 
+0100
@@ -1,3 +0,0 @@
-prune asset
-global-include *.pyi
-global-include *.typed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/PKG-INFO 
new/subprocess-tee-0.4.0/PKG-INFO
--- old/subprocess-tee-0.3.5/PKG-INFO   2021-10-05 12:08:31.247003000 +0200
+++ new/subprocess-tee-0.4.0/PKG-INFO   2022-11-25 01:45:47.561314000 +0100
@@ -1,40 +1,31 @@
 Metadata-Version: 2.1
 Name: subprocess-tee
-Version: 0.3.5
+Version: 0.4.0
 Summary: subprocess-tee
-Home-page: https://github.com/pycontribs/subprocess-tee
-Author: Sorin Sbarnea
-Author-email: sorin.sbar...@gmail.com
-Maintainer: Sorin Sbarnea
-Maintainer-email: sorin.sbar...@gmail.com
+Author-email: Sorin Sbarnea <sorin.sbar...@gmail.com>
+Maintainer-email: Sorin Sbarnea <sorin.sbar...@gmail.com>
 License: MIT
-Project-URL: Bug Tracker, https://github.com/pycontribs/subprocess-tee/issues
-Project-URL: Release Management, 
https://github.com/pycontribs/subprocess-tee/releases
-Project-URL: CI, https://github.com/pycontribs/subprocess-tee/actions
-Project-URL: Code of Conduct, 
https://docs.ansible.com/ansible/latest/community/code_of_conduct.html
-Project-URL: Documentation, https://subprocess-tee.readthedocs.io
-Project-URL: Discussions, 
https://github.com/pycontribs/subprocess-tee/discussions
-Project-URL: Source Code, https://github.com/pycontribs/subprocess-tee
+Project-URL: homepage, https://github.com/pycontribs/subprocess-tee
+Project-URL: documentation, https://subprocess-tee.readthedocs.io
+Project-URL: repository, https://github.com/pycontribs/subprocess-tee
+Project-URL: changelog, https://github.com/pycontribs/subprocess-tee/releases
 Keywords: subprocess,asyncio
-Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Environment :: Console
 Classifier: Intended Audience :: Developers
 Classifier: Intended Audience :: Information Technology
 Classifier: Intended Audience :: System Administrators
-Classifier: Operating System :: OS Independent
 Classifier: License :: OSI Approved :: MIT License
-Classifier: Programming Language :: Python
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.6
-Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python
 Classifier: Topic :: System :: Systems Administration
 Classifier: Topic :: Utilities
-Requires-Python: >=3.6
+Requires-Python: >=3.8
 Description-Content-Type: text/markdown
 Provides-Extra: test
 License-File: LICENSE
@@ -66,5 +57,3 @@
 
 You can still use `check=True` in order to make it raise CompletedProcess
 exception when the result code is not zero.
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/pyproject.toml 
new/subprocess-tee-0.4.0/pyproject.toml
--- old/subprocess-tee-0.3.5/pyproject.toml     2021-10-05 12:08:12.000000000 
+0200
+++ new/subprocess-tee-0.4.0/pyproject.toml     2022-11-25 01:45:26.000000000 
+0100
@@ -8,6 +8,57 @@
 ]
 build-backend = "setuptools.build_meta"
 
+[project]
+# https://peps.python.org/pep-0621/#readme
+requires-python = ">=3.8"
+dynamic = ["version"]
+
+name = "subprocess-tee"
+
+description = "subprocess-tee"
+readme = "README.md"
+authors = [
+    {"name"="Sorin Sbarnea", "email"="sorin.sbar...@gmail.com"}
+]
+maintainers = [
+    {"name"="Sorin Sbarnea", "email"="sorin.sbar...@gmail.com"}
+]
+license = {text = "MIT"}
+classifiers = [
+    "Development Status :: 5 - Production/Stable",
+    "Environment :: Console",
+    "Intended Audience :: Developers",
+    "Intended Audience :: Information Technology",
+    "Intended Audience :: System Administrators",
+    "License :: OSI Approved :: MIT License",
+    "Operating System :: OS Independent",
+    "Programming Language :: Python :: 3",
+    "Programming Language :: Python :: 3.8",
+    "Programming Language :: Python :: 3.9",
+    "Programming Language :: Python :: 3.10",
+    "Programming Language :: Python :: 3.11",
+    "Programming Language :: Python",
+    "Topic :: System :: Systems Administration",
+    "Topic :: Utilities",
+]
+keywords = ["subprocess", "asyncio"]
+
+[project.urls]
+homepage = "https://github.com/pycontribs/subprocess-tee";
+documentation = "https://subprocess-tee.readthedocs.io";
+repository = "https://github.com/pycontribs/subprocess-tee";
+changelog = "https://github.com/pycontribs/subprocess-tee/releases";
+
+[project.optional-dependencies]
+test =[
+    "enrich>=1.2.6",
+    "molecule>=3.4.0",  # ansible is needed but no direct imports are made
+    "pytest-cov>=2.12.1",
+    "pytest-plus>=0.2",
+    "pytest-xdist>=2.3.0",
+    "pytest>=6.2.5",
+]
+
 [tool.black]
 skip-string-normalization = false
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/setup.cfg 
new/subprocess-tee-0.4.0/setup.cfg
--- old/subprocess-tee-0.3.5/setup.cfg  2021-10-05 12:08:31.247003000 +0200
+++ new/subprocess-tee-0.4.0/setup.cfg  2022-11-25 01:45:47.561314000 +0100
@@ -1,97 +1,3 @@
-[metadata]
-name = subprocess-tee
-url = https://github.com/pycontribs/subprocess-tee
-project_urls = 
-       Bug Tracker = https://github.com/pycontribs/subprocess-tee/issues
-       Release Management = 
https://github.com/pycontribs/subprocess-tee/releases
-       CI = https://github.com/pycontribs/subprocess-tee/actions
-       Code of Conduct = 
https://docs.ansible.com/ansible/latest/community/code_of_conduct.html
-       Documentation = https://subprocess-tee.readthedocs.io
-       Discussions = https://github.com/pycontribs/subprocess-tee/discussions
-       Source Code = https://github.com/pycontribs/subprocess-tee
-description = subprocess-tee
-long_description = file: README.md
-long_description_content_type = text/markdown
-author = Sorin Sbarnea
-author_email = sorin.sbar...@gmail.com
-maintainer = Sorin Sbarnea
-maintainer_email = sorin.sbar...@gmail.com
-license = MIT
-license_file = LICENSE
-classifiers = 
-       Development Status :: 5 - Production/Stable
-       
-       Environment :: Console
-       
-       Intended Audience :: Developers
-       Intended Audience :: Information Technology
-       Intended Audience :: System Administrators
-       
-       Operating System :: OS Independent
-       
-       License :: OSI Approved :: MIT License
-       
-       Programming Language :: Python
-       
-       Operating System :: OS Independent
-       
-       Programming Language :: Python :: 3
-       Programming Language :: Python :: 3.6
-       Programming Language :: Python :: 3.7
-       Programming Language :: Python :: 3.8
-       Programming Language :: Python :: 3.9
-       Programming Language :: Python :: 3.10
-       
-       Topic :: System :: Systems Administration
-       Topic :: Utilities
-keywords = 
-       subprocess
-       asyncio
-
-[options]
-use_scm_version = True
-python_requires = >=3.6
-package_dir = 
-       = src
-packages = find:
-include_package_data = True
-zip_safe = False
-setup_requires = 
-       setuptools_scm >= 1.15.0
-       setuptools_scm_git_archive >= 1.0
-
-[options.extras_require]
-test = 
-       enrich>=1.2.6
-       mock>=4.0.3
-       molecule>=3.4.0  # ansible is needed but no direct imports are made
-       pytest-cov>=2.12.1
-       pytest-plus>=0.2
-       pytest-xdist>=2.3.0
-       pytest>=6.2.5
-
-[options.packages.find]
-where = src
-
-[options.package_data]
-subprocess_tee = 
-       *.typed
-       *.pyi
-
-[tool:pytest]
-addopts = --doctest-modules --durations 10 --durations-min=3 --color=yes
-doctest_optionflags = ALLOW_UNICODE ELLIPSIS
-norecursedirs = dist doc build .tox .eggs
-testpaths = src
-filterwarnings = 
-       error
-
-[flake8]
-exclude = .venv/,.tox/,dist/,build/,.eggs/
-format = pylint
-ignore = E741,W503,W504,H,E501,E203,D
-max-line-length = 88
-
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/setup.py 
new/subprocess-tee-0.4.0/setup.py
--- old/subprocess-tee-0.3.5/setup.py   2021-10-05 12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/setup.py   1970-01-01 01:00:00.000000000 +0100
@@ -1,17 +0,0 @@
-#! /usr/bin/env python
-"""Distribution package setuptools installer."""
-
-import site
-import sys
-
-import setuptools
-
-# See https://github.com/pypa/pip/issues/7953
-site.ENABLE_USER_SITE = "--user" in sys.argv[1:]
-
-
-if __name__ == "__main__":
-    setuptools.setup(
-        use_scm_version={"local_scheme": "no-local-version"},
-        setup_requires=["setuptools_scm[toml]>=3.5.0"],
-    )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/src/subprocess_tee/__init__.py 
new/subprocess-tee-0.4.0/src/subprocess_tee/__init__.py
--- old/subprocess-tee-0.3.5/src/subprocess_tee/__init__.py     2021-10-05 
12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/src/subprocess_tee/__init__.py     2022-11-25 
01:45:26.000000000 +0100
@@ -18,7 +18,7 @@
     from subprocess import list2cmdline as join  # pylint: 
disable=ungrouped-imports
 
 
-STREAM_LIMIT = 2 ** 23  # 8MB instead of default 64kb, override it if you need
+STREAM_LIMIT = 2**23  # 8MB instead of default 64kb, override it if you need
 
 
 async def _read_stream(stream: StreamReader, callback: Callable[..., Any]) -> 
None:
@@ -85,13 +85,13 @@
         if process.stdout:
             tasks.append(
                 loop.create_task(
-                    _read_stream(process.stdout, lambda l: tee_func(l, out, 
stdout))
+                    _read_stream(process.stdout, lambda x: tee_func(x, out, 
stdout))
                 )
             )
         if process.stderr:
             tasks.append(
                 loop.create_task(
-                    _read_stream(process.stderr, lambda l: tee_func(l, err, 
stderr))
+                    _read_stream(process.stderr, lambda x: tee_func(x, err, 
stderr))
                 )
             )
 
@@ -116,7 +116,7 @@
 
 
 def run(args: Union[str, List[str]], **kwargs: Any) -> CompletedProcess:
-    """Drop-in replacement for subprocerss.run that behaves like tee.
+    """Drop-in replacement for subprocess.run that behaves like tee.
 
     Extra arguments added by our version:
     echo: False - Prints command before executing it.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/src/subprocess_tee/test/__init__.py 
new/subprocess-tee-0.4.0/src/subprocess_tee/test/__init__.py
--- old/subprocess-tee-0.3.5/src/subprocess_tee/test/__init__.py        
2021-10-05 12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/src/subprocess_tee/test/__init__.py        
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-"""Unitests."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/src/subprocess_tee/test/test_func.py 
new/subprocess-tee-0.4.0/src/subprocess_tee/test/test_func.py
--- old/subprocess-tee-0.3.5/src/subprocess_tee/test/test_func.py       
2021-10-05 12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/src/subprocess_tee/test/test_func.py       
1970-01-01 01:00:00.000000000 +0100
@@ -1,15 +0,0 @@
-"""Functional tests for subprocess-tee library."""
-import subprocess
-
-
-def test_molecule() -> None:
-    """Ensures molecule does display output of its subprocesses."""
-    result = subprocess.run(
-        ["molecule", "test"],
-        stdout=subprocess.PIPE,
-        stderr=subprocess.PIPE,
-        universal_newlines=True,
-        check=False,
-    )  # type: ignore
-    assert result.returncode == 0
-    assert "Past glories are poor feeding." in result.stdout
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/src/subprocess_tee/test/test_rich.py 
new/subprocess-tee-0.4.0/src/subprocess_tee/test/test_rich.py
--- old/subprocess-tee-0.3.5/src/subprocess_tee/test/test_rich.py       
2021-10-05 12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/src/subprocess_tee/test/test_rich.py       
1970-01-01 01:00:00.000000000 +0100
@@ -1,41 +0,0 @@
-"""Tests for rich module."""
-import sys
-
-from enrich.console import Console
-
-from subprocess_tee import run
-
-
-def test_rich_console_ex() -> None:
-    """Validate that ConsoleEx can capture output from print() calls."""
-    console = Console(record=True, redirect=True)
-    console.print("alpha")
-    print("beta")
-    sys.stdout.write("gamma\n")
-    sys.stderr.write("delta\n")
-    # While not supposed to happen we want to be sure that this will not raise
-    # an exception. Some libraries may still sometimes send bytes to the
-    # streams, notable example being click.
-    # sys.stdout.write(b"epsilon\n")  # type: ignore
-    proc = run("echo 123")
-    assert proc.stdout == "123\n"
-    text = console.export_text()
-    assert text == "alpha\nbeta\ngamma\ndelta\n123\n"
-
-
-def test_rich_console_ex_ansi() -> None:
-    """Validate that ANSI sent to sys.stdout does not become garbage in 
record."""
-    print()
-    console = Console(force_terminal=True, record=True, redirect=True)
-    console.print("[green]this from Console.print()[/green]", style="red")
-    proc = run(r'echo -e "\033[31mred\033[0m"')
-    assert proc.returncode == 0
-    assert "red" in proc.stdout
-
-    # validate that what rich recorded is the same as what the subprocess 
produced
-    text = console.export_text(clear=False)
-    assert "red" in text
-
-    # validate that html export also contains at least the "red" text
-    html = console.export_html(clear=False)
-    assert '<span class="r3">red</span>' in html
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/src/subprocess_tee/test/test_unit.py 
new/subprocess-tee-0.4.0/src/subprocess_tee/test/test_unit.py
--- old/subprocess-tee-0.3.5/src/subprocess_tee/test/test_unit.py       
2021-10-05 12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/src/subprocess_tee/test/test_unit.py       
1970-01-01 01:00:00.000000000 +0100
@@ -1,143 +0,0 @@
-"""Unittests."""
-import subprocess
-from typing import Dict
-
-import pytest
-from _pytest.capture import CaptureFixture
-
-from subprocess_tee import run
-
-
-def test_run_string() -> None:
-    """Valida run() called with a single string command."""
-    cmd = "echo 111 && >&2 echo 222"
-    old_result = subprocess.run(
-        cmd,
-        shell=True,
-        universal_newlines=True,
-        stdout=subprocess.PIPE,
-        stderr=subprocess.PIPE,
-        check=False,
-    )
-    result = run(cmd)
-    assert result.returncode == old_result.returncode
-    assert result.stdout == old_result.stdout
-    assert result.stderr == old_result.stderr
-
-
-def test_run_list() -> None:
-    """Validate run call with a command made of list of strings."""
-    # NOTICE: subprocess.run() does fail to capture any output when cmd is
-    # a list and you specific shell=True. Still, when not mentioning shell,
-    # it does work.
-    cmd = ["python3", "--version"]
-    old_result = subprocess.run(
-        cmd,
-        # shell=True,
-        universal_newlines=True,
-        stdout=subprocess.PIPE,
-        stderr=subprocess.PIPE,
-        check=False,
-    )
-    result = run(cmd)
-    assert result.returncode == old_result.returncode
-    assert result.stdout == old_result.stdout
-    assert result.stderr == old_result.stderr
-
-
-def test_run_echo(capsys: CaptureFixture[str]) -> None:
-    """Validate run call with echo dumps command."""
-    cmd = ["python3", "--version"]
-    old_result = subprocess.run(
-        cmd,
-        # shell=True,
-        universal_newlines=True,
-        stdout=subprocess.PIPE,
-        stderr=subprocess.PIPE,
-        check=False,
-    )
-    result = run(cmd, echo=True)
-    assert result.returncode == old_result.returncode
-    assert result.stdout == old_result.stdout
-    assert result.stderr == old_result.stderr
-    out, err = capsys.readouterr()
-    assert out.startswith("COMMAND:")
-    assert err == ""
-
-
-@pytest.mark.parametrize(
-    "env",
-    [{}, {"SHELL": "/bin/sh"}, {"SHELL": "/bin/bash"}, {"SHELL": "/bin/zsh"}],
-    ids=["auto", "sh", "bash", "zsh"],
-)
-def test_run_with_env(env: Dict[str, str]) -> None:
-    """Validate that passing custom env to run() works."""
-    env["FOO"] = "BAR"
-    result = run("echo $FOO", env=env, echo=True)
-    assert result.stdout == "BAR\n"
-
-
-def test_run_shell() -> None:
-    """Validate run call with multiple shell commands works."""
-    cmd = "echo a && echo b && false || exit 4"
-    # "python --version"
-    result = run(cmd, echo=True)
-    assert result.returncode == 4
-    assert result.stdout == "a\nb\n"
-
-
-def test_run_shell_undefined() -> None:
-    """Validate run call with multiple shell commands works."""
-    cmd = "echo a && echo b && false || exit 4"
-    # "python --version"
-    result = run(cmd, echo=True, env={})
-    assert result.returncode == 4
-    assert result.stdout == "a\nb\n"
-
-
-def test_run_cwd() -> None:
-    """Validate that run accepts cwd and respects it."""
-    cmd = "pwd"
-    result = run(cmd, echo=True, cwd="/")
-    assert result.returncode == 0
-    assert result.stdout == "/\n"
-
-
-def test_run_with_check_raise() -> None:
-    """Asure compatibility with subprocess.run when using check (return 1)."""
-    with pytest.raises(subprocess.CalledProcessError) as ours:
-        run("false", check=True)
-    with pytest.raises(subprocess.CalledProcessError) as original:
-        subprocess.run("false", check=True, universal_newlines=True)
-    assert ours.value.returncode == original.value.returncode
-    assert ours.value.cmd == original.value.cmd
-    assert ours.value.output == original.value.output
-    assert ours.value.stdout == original.value.stdout
-    assert ours.value.stderr == original.value.stderr
-
-
-def test_run_with_check_pass() -> None:
-    """Asure compatibility with subprocess.run when using check (return 0)."""
-    ours = run("true", check=True)
-    original = subprocess.run("true", check=True, universal_newlines=True)
-    assert ours.returncode == original.returncode
-    assert ours.args == original.args
-    assert ours.stdout == original.stdout
-    assert ours.stderr == original.stderr
-
-
-def test_run_compat() -> None:
-    """Assure compatiblity with subprocess.run()"""
-    cmd = ["seq", "10"]
-    ours = run(cmd)
-    original = subprocess.run(
-        cmd,
-        stdout=subprocess.PIPE,
-        stderr=subprocess.PIPE,
-        universal_newlines=True,
-        check=False,
-    )
-    assert ours.returncode == original.returncode
-    assert ours.stdout == original.stdout
-    assert ours.stderr == original.stderr
-    assert ours.args == original.args
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/src/subprocess_tee.egg-info/PKG-INFO 
new/subprocess-tee-0.4.0/src/subprocess_tee.egg-info/PKG-INFO
--- old/subprocess-tee-0.3.5/src/subprocess_tee.egg-info/PKG-INFO       
2021-10-05 12:08:31.000000000 +0200
+++ new/subprocess-tee-0.4.0/src/subprocess_tee.egg-info/PKG-INFO       
2022-11-25 01:45:47.000000000 +0100
@@ -1,40 +1,31 @@
 Metadata-Version: 2.1
 Name: subprocess-tee
-Version: 0.3.5
+Version: 0.4.0
 Summary: subprocess-tee
-Home-page: https://github.com/pycontribs/subprocess-tee
-Author: Sorin Sbarnea
-Author-email: sorin.sbar...@gmail.com
-Maintainer: Sorin Sbarnea
-Maintainer-email: sorin.sbar...@gmail.com
+Author-email: Sorin Sbarnea <sorin.sbar...@gmail.com>
+Maintainer-email: Sorin Sbarnea <sorin.sbar...@gmail.com>
 License: MIT
-Project-URL: Bug Tracker, https://github.com/pycontribs/subprocess-tee/issues
-Project-URL: Release Management, 
https://github.com/pycontribs/subprocess-tee/releases
-Project-URL: CI, https://github.com/pycontribs/subprocess-tee/actions
-Project-URL: Code of Conduct, 
https://docs.ansible.com/ansible/latest/community/code_of_conduct.html
-Project-URL: Documentation, https://subprocess-tee.readthedocs.io
-Project-URL: Discussions, 
https://github.com/pycontribs/subprocess-tee/discussions
-Project-URL: Source Code, https://github.com/pycontribs/subprocess-tee
+Project-URL: homepage, https://github.com/pycontribs/subprocess-tee
+Project-URL: documentation, https://subprocess-tee.readthedocs.io
+Project-URL: repository, https://github.com/pycontribs/subprocess-tee
+Project-URL: changelog, https://github.com/pycontribs/subprocess-tee/releases
 Keywords: subprocess,asyncio
-Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Environment :: Console
 Classifier: Intended Audience :: Developers
 Classifier: Intended Audience :: Information Technology
 Classifier: Intended Audience :: System Administrators
-Classifier: Operating System :: OS Independent
 Classifier: License :: OSI Approved :: MIT License
-Classifier: Programming Language :: Python
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.6
-Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python
 Classifier: Topic :: System :: Systems Administration
 Classifier: Topic :: Utilities
-Requires-Python: >=3.6
+Requires-Python: >=3.8
 Description-Content-Type: text/markdown
 Provides-Extra: test
 License-File: LICENSE
@@ -66,5 +57,3 @@
 
 You can still use `check=True` in order to make it raise CompletedProcess
 exception when the result code is not zero.
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/src/subprocess_tee.egg-info/SOURCES.txt 
new/subprocess-tee-0.4.0/src/subprocess_tee.egg-info/SOURCES.txt
--- old/subprocess-tee-0.3.5/src/subprocess_tee.egg-info/SOURCES.txt    
2021-10-05 12:08:31.000000000 +0200
+++ new/subprocess-tee-0.4.0/src/subprocess_tee.egg-info/SOURCES.txt    
2022-11-25 01:45:47.000000000 +0100
@@ -1,38 +1,22 @@
 .dockerignore
+.flake8
 .gitignore
 .pre-commit-config.yaml
 .yamllint
 Dockerfile
 LICENSE
-MANIFEST.in
 README.md
 mypy.ini
 pyproject.toml
-setup.cfg
-setup.py
 tox.ini
 .github/CODEOWNERS
 .github/FUNDING.yml
+.github/dependabot.yml
 .github/release-drafter.yml
-.github/workflows/labels.yml
-.github/workflows/release-drafter.yml
+.github/workflows/ack.yml
+.github/workflows/push.yml
 .github/workflows/release.yml
 .github/workflows/tox.yml
-.tox/packaging/lib/python3.8/site-packages/build/py.typed
-.tox/packaging/lib/python3.8/site-packages/charset_normalizer/py.typed
-.tox/packaging/lib/python3.8/site-packages/cryptography/py.typed
-.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi
-.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi
-.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi
-.tox/packaging/lib/python3.8/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi
-.tox/packaging/lib/python3.8/site-packages/idna/py.typed
-.tox/packaging/lib/python3.8/site-packages/importlib_metadata/py.typed
-.tox/packaging/lib/python3.8/site-packages/keyring/py.typed
-.tox/packaging/lib/python3.8/site-packages/packaging/py.typed
-.tox/packaging/lib/python3.8/site-packages/pip/py.typed
-.tox/packaging/lib/python3.8/site-packages/secretstorage/py.typed
-.tox/packaging/lib/python3.8/site-packages/tomli/py.typed
-.tox/packaging/lib/python3.8/site-packages/twine/py.typed
 molecule/default/converge.yml
 molecule/default/molecule.yml
 src/subprocess_tee/__init__.py
@@ -40,10 +24,9 @@
 src/subprocess_tee.egg-info/PKG-INFO
 src/subprocess_tee.egg-info/SOURCES.txt
 src/subprocess_tee.egg-info/dependency_links.txt
-src/subprocess_tee.egg-info/not-zip-safe
 src/subprocess_tee.egg-info/requires.txt
 src/subprocess_tee.egg-info/top_level.txt
-src/subprocess_tee/test/__init__.py
-src/subprocess_tee/test/test_func.py
-src/subprocess_tee/test/test_rich.py
-src/subprocess_tee/test/test_unit.py
\ No newline at end of file
+test/__init__.py
+test/test_func.py
+test/test_rich.py
+test/test_unit.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/src/subprocess_tee.egg-info/not-zip-safe 
new/subprocess-tee-0.4.0/src/subprocess_tee.egg-info/not-zip-safe
--- old/subprocess-tee-0.3.5/src/subprocess_tee.egg-info/not-zip-safe   
2021-10-05 12:08:31.000000000 +0200
+++ new/subprocess-tee-0.4.0/src/subprocess_tee.egg-info/not-zip-safe   
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/subprocess-tee-0.3.5/src/subprocess_tee.egg-info/requires.txt 
new/subprocess-tee-0.4.0/src/subprocess_tee.egg-info/requires.txt
--- old/subprocess-tee-0.3.5/src/subprocess_tee.egg-info/requires.txt   
2021-10-05 12:08:31.000000000 +0200
+++ new/subprocess-tee-0.4.0/src/subprocess_tee.egg-info/requires.txt   
2022-11-25 01:45:47.000000000 +0100
@@ -1,7 +1,6 @@
 
 [test]
 enrich>=1.2.6
-mock>=4.0.3
 molecule>=3.4.0
 pytest-cov>=2.12.1
 pytest-plus>=0.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/test/__init__.py 
new/subprocess-tee-0.4.0/test/__init__.py
--- old/subprocess-tee-0.3.5/test/__init__.py   1970-01-01 01:00:00.000000000 
+0100
+++ new/subprocess-tee-0.4.0/test/__init__.py   2022-11-25 01:45:26.000000000 
+0100
@@ -0,0 +1 @@
+"""Unitests."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/test/test_func.py 
new/subprocess-tee-0.4.0/test/test_func.py
--- old/subprocess-tee-0.3.5/test/test_func.py  1970-01-01 01:00:00.000000000 
+0100
+++ new/subprocess-tee-0.4.0/test/test_func.py  2022-11-25 01:45:26.000000000 
+0100
@@ -0,0 +1,15 @@
+"""Functional tests for subprocess-tee library."""
+import subprocess
+
+
+def test_molecule() -> None:
+    """Ensures molecule does display output of its subprocesses."""
+    result = subprocess.run(
+        ["molecule", "test"],
+        stdout=subprocess.PIPE,
+        stderr=subprocess.PIPE,
+        universal_newlines=True,
+        check=False,
+    )  # type: ignore
+    assert result.returncode == 0
+    assert "Past glories are poor feeding." in result.stdout
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/test/test_rich.py 
new/subprocess-tee-0.4.0/test/test_rich.py
--- old/subprocess-tee-0.3.5/test/test_rich.py  1970-01-01 01:00:00.000000000 
+0100
+++ new/subprocess-tee-0.4.0/test/test_rich.py  2022-11-25 01:45:26.000000000 
+0100
@@ -0,0 +1,43 @@
+"""Tests for rich module."""
+import sys
+
+import pytest
+from enrich.console import Console
+
+from subprocess_tee import run
+
+
+@pytest.mark.xfail(reason="Bug 
https://github.com/pycontribs/subprocess-tee/issues/58";)
+def test_rich_console_ex() -> None:
+    """Validate that ConsoleEx can capture output from print() calls."""
+    console = Console(record=True, redirect=True)
+    console.print("alpha")
+    print("beta")
+    sys.stdout.write("gamma\n")
+    sys.stderr.write("delta\n")
+    # While not supposed to happen we want to be sure that this will not raise
+    # an exception. Some libraries may still sometimes send bytes to the
+    # streams, notable example being click.
+    # sys.stdout.write(b"epsilon\n")  # type: ignore
+    proc = run("echo 123")
+    assert proc.stdout == "123\n"
+    text = console.export_text()
+    assert text == "alpha\nbeta\ngamma\ndelta\n123\n"
+
+
+def test_rich_console_ex_ansi() -> None:
+    """Validate that ANSI sent to sys.stdout does not become garbage in 
record."""
+    print()
+    console = Console(force_terminal=True, record=True, redirect=True)
+    console.print("[green]this from Console.print()[/green]", style="red")
+    proc = run(r'echo -e "\033[31mred\033[0m"')
+    assert proc.returncode == 0
+    assert "red" in proc.stdout
+
+    # validate that what rich recorded is the same as what the subprocess 
produced
+    text = console.export_text(clear=False)
+    assert "red" in text
+
+    # validate that html export also contains at least the "red" text
+    html = console.export_html(clear=False)
+    assert '<span class="r3">red</span>' in html
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/test/test_unit.py 
new/subprocess-tee-0.4.0/test/test_unit.py
--- old/subprocess-tee-0.3.5/test/test_unit.py  1970-01-01 01:00:00.000000000 
+0100
+++ new/subprocess-tee-0.4.0/test/test_unit.py  2022-11-25 01:45:26.000000000 
+0100
@@ -0,0 +1,143 @@
+"""Unittests."""
+import subprocess
+from typing import Dict
+
+import pytest
+from _pytest.capture import CaptureFixture
+
+from subprocess_tee import run
+
+
+def test_run_string() -> None:
+    """Valida run() called with a single string command."""
+    cmd = "echo 111 && >&2 echo 222"
+    old_result = subprocess.run(
+        cmd,
+        shell=True,
+        universal_newlines=True,
+        stdout=subprocess.PIPE,
+        stderr=subprocess.PIPE,
+        check=False,
+    )
+    result = run(cmd)
+    assert result.returncode == old_result.returncode
+    assert result.stdout == old_result.stdout
+    assert result.stderr == old_result.stderr
+
+
+def test_run_list() -> None:
+    """Validate run call with a command made of list of strings."""
+    # NOTICE: subprocess.run() does fail to capture any output when cmd is
+    # a list and you specific shell=True. Still, when not mentioning shell,
+    # it does work.
+    cmd = ["python3", "--version"]
+    old_result = subprocess.run(
+        cmd,
+        # shell=True,
+        universal_newlines=True,
+        stdout=subprocess.PIPE,
+        stderr=subprocess.PIPE,
+        check=False,
+    )
+    result = run(cmd)
+    assert result.returncode == old_result.returncode
+    assert result.stdout == old_result.stdout
+    assert result.stderr == old_result.stderr
+
+
+def test_run_echo(capsys: CaptureFixture[str]) -> None:
+    """Validate run call with echo dumps command."""
+    cmd = ["python3", "--version"]
+    old_result = subprocess.run(
+        cmd,
+        # shell=True,
+        universal_newlines=True,
+        stdout=subprocess.PIPE,
+        stderr=subprocess.PIPE,
+        check=False,
+    )
+    result = run(cmd, echo=True)
+    assert result.returncode == old_result.returncode
+    assert result.stdout == old_result.stdout
+    assert result.stderr == old_result.stderr
+    out, err = capsys.readouterr()
+    assert out.startswith("COMMAND:")
+    assert err == ""
+
+
+@pytest.mark.parametrize(
+    "env",
+    [{}, {"SHELL": "/bin/sh"}, {"SHELL": "/bin/bash"}, {"SHELL": "/bin/zsh"}],
+    ids=["auto", "sh", "bash", "zsh"],
+)
+def test_run_with_env(env: Dict[str, str]) -> None:
+    """Validate that passing custom env to run() works."""
+    env["FOO"] = "BAR"
+    result = run("echo $FOO", env=env, echo=True)
+    assert result.stdout == "BAR\n"
+
+
+def test_run_shell() -> None:
+    """Validate run call with multiple shell commands works."""
+    cmd = "echo a && echo b && false || exit 4"
+    # "python --version"
+    result = run(cmd, echo=True)
+    assert result.returncode == 4
+    assert result.stdout == "a\nb\n"
+
+
+def test_run_shell_undefined() -> None:
+    """Validate run call with multiple shell commands works."""
+    cmd = "echo a && echo b && false || exit 4"
+    # "python --version"
+    result = run(cmd, echo=True, env={})
+    assert result.returncode == 4
+    assert result.stdout == "a\nb\n"
+
+
+def test_run_cwd() -> None:
+    """Validate that run accepts cwd and respects it."""
+    cmd = "pwd"
+    result = run(cmd, echo=True, cwd="/")
+    assert result.returncode == 0
+    assert result.stdout == "/\n"
+
+
+def test_run_with_check_raise() -> None:
+    """Asure compatibility with subprocess.run when using check (return 1)."""
+    with pytest.raises(subprocess.CalledProcessError) as ours:
+        run("false", check=True)
+    with pytest.raises(subprocess.CalledProcessError) as original:
+        subprocess.run("false", check=True, universal_newlines=True)
+    assert ours.value.returncode == original.value.returncode
+    assert ours.value.cmd == original.value.cmd
+    assert ours.value.output == original.value.output
+    assert ours.value.stdout == original.value.stdout
+    assert ours.value.stderr == original.value.stderr
+
+
+def test_run_with_check_pass() -> None:
+    """Asure compatibility with subprocess.run when using check (return 0)."""
+    ours = run("true", check=True)
+    original = subprocess.run("true", check=True, universal_newlines=True)
+    assert ours.returncode == original.returncode
+    assert ours.args == original.args
+    assert ours.stdout == original.stdout
+    assert ours.stderr == original.stderr
+
+
+def test_run_compat() -> None:
+    """Assure compatiblity with subprocess.run()."""
+    cmd = ["seq", "10"]
+    ours = run(cmd)
+    original = subprocess.run(
+        cmd,
+        stdout=subprocess.PIPE,
+        stderr=subprocess.PIPE,
+        universal_newlines=True,
+        check=False,
+    )
+    assert ours.returncode == original.returncode
+    assert ours.stdout == original.stdout
+    assert ours.stderr == original.stderr
+    assert ours.args == original.args
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/subprocess-tee-0.3.5/tox.ini 
new/subprocess-tee-0.4.0/tox.ini
--- old/subprocess-tee-0.3.5/tox.ini    2021-10-05 12:08:12.000000000 +0200
+++ new/subprocess-tee-0.4.0/tox.ini    2022-11-25 01:45:26.000000000 +0100
@@ -27,7 +27,7 @@
     TERM
 setenv =
     PIP_DISABLE_VERSION_CHECK=1
-    PYTEST_REQPASS=16
+    PYTEST_REQPASS=15
     PYTHONDONTWRITEBYTECODE=1
     PYTHONUNBUFFERED=1
 commands =
@@ -63,16 +63,13 @@
 # don't install package in this env
 skip_install = true
 deps =
-    collective.checkdocs >= 0.2
-    build >= 0.3.1.post1
-    twine >= 1.14.0
+    build >= 0.9.0
+    twine >= 4.0.1
 setenv =
 commands =
     rm -rfv {toxinidir}/dist/
     python -m build \
-      --sdist \
-      --wheel \
       --outdir {toxinidir}/dist/ \
       {toxinidir}
     # metadata validation
-    python -m twine check {toxinidir}/dist/*
+    python -m twine check --strict {toxinidir}/dist/*

Reply via email to