Skip to content

Commit ff46021

Browse files
authored
Merge branch 'master' into missing-lzma
2 parents 8b639b9 + 65cdf34 commit ff46021

30 files changed

+156
-184
lines changed

.github/CONTRIBUTING.md

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ We welcome pull requests from cmd2 users and seasoned Python developers alike! F
1010

1111
Remember to feel free to ask for help by leaving a comment within the Issue.
1212

13-
Working on your first pull request? You can learn how from this *free* series
13+
Working on your first pull request? You can learn how from this *free* series
1414
[How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github).
1515

1616
###### If you've found a bug that is not on the board, [follow these steps](README.md#found-a-bug).
@@ -47,7 +47,7 @@ The tables below list all prerequisites along with the minimum required version
4747

4848
| Prerequisite | Minimum Version |
4949
| --------------------------------------------------- |-----------------|
50-
| [python](https://www.python.org/downloads/) | `3.7` |
50+
| [python](https://www.python.org/downloads/) | `3.8` |
5151
| [pyperclip](https://github.com/asweigart/pyperclip) | `1.6` |
5252
| [setuptools](https://pypi.org/project/setuptools/) | `34.4` |
5353
| [wcwidth](https://pypi.python.org/pypi/wcwidth) | `0.1.7` |
@@ -81,32 +81,32 @@ $ pip freeze | grep pyperclip
8181

8282
If your versions are lower than the prerequisite versions, you should update.
8383

84-
If you do not already have Python installed on your machine, we recommend using the
85-
[Anaconda](https://www.continuum.io/downloads) distribution because it provides an excellent out-of-the-box install on
86-
all platforms (Windows, Mac, and Linux) and because it supports having multiple Python environments (versions of Python)
84+
If you do not already have Python installed on your machine, we recommend using the
85+
[Anaconda](https://www.continuum.io/downloads) distribution because it provides an excellent out-of-the-box install on
86+
all platforms (Windows, Mac, and Linux) and because it supports having multiple Python environments (versions of Python)
8787
installed simultaneously.
8888

8989
### Forking the project
9090

9191
#### Setting up your system
9292

93-
1. Install [Git](https://git-scm.com/) or your favorite Git client. If you aren't comfortable with Git at the
94-
command-line, then both [SmartGit](http://www.syntevo.com/smartgit/) and [GitKraken](https://www.gitkraken.com) are
93+
1. Install [Git](https://git-scm.com/) or your favorite Git client. If you aren't comfortable with Git at the
94+
command-line, then both [SmartGit](http://www.syntevo.com/smartgit/) and [GitKraken](https://www.gitkraken.com) are
9595
excellent cross-platform graphical Git clients.
9696
2. (Optional) [Set up an SSH key](https://help.github.com/articles/generating-an-ssh-key/) for GitHub.
9797
3. Create a parent projects directory on your system. For this guide, it will be assumed that it is `~/src`.
9898

9999
#### Forking cmd2
100100

101101
1. Go to the top-level cmd2 repository: <https://github.com/python-cmd2/cmd2>
102-
2. Click the "Fork" button in the upper right hand corner of the interface
102+
2. Click the "Fork" button in the upper right hand corner of the interface
103103
([more details here](https://help.github.com/articles/fork-a-repo/))
104104
3. After the repository has been forked, you will be taken to your copy of the cmd2 repo at `yourUsername/cmd2`
105105

106106
#### Cloning your fork
107107

108108
1. Open a terminal / command line / Bash shell in your projects directory (_e.g.: `~/src/`_)
109-
2. Clone your fork of cmd2, making sure to replace `yourUsername` with your GitHub username. This will download the
109+
2. Clone your fork of cmd2, making sure to replace `yourUsername` with your GitHub username. This will download the
110110
entire cmd2 repo to your projects directory.
111111

112112
```sh
@@ -164,13 +164,13 @@ Do this prior to every time you create a branch for a PR:
164164
165165
### Creating a branch
166166
167-
Before you start working, you will need to create a separate branch specific to the issue or feature you're working on.
167+
Before you start working, you will need to create a separate branch specific to the issue or feature you're working on.
168168
You will push your work to this branch.
169169
170170
#### Naming your branch
171171
172-
Name the branch something like `fix/xxx` or `feature/xxx` where `xxx` is a short description of the changes or feature
173-
you are attempting to add. For example `fix/script-files` would be a branch where you fix something specific to script
172+
Name the branch something like `fix/xxx` or `feature/xxx` where `xxx` is a short description of the changes or feature
173+
you are attempting to add. For example `fix/script-files` would be a branch where you fix something specific to script
174174
files.
175175
176176
#### Adding your branch
@@ -191,22 +191,22 @@ $ git push origin [name_of_your_new_branch]
191191

192192

193193
### Setting up for cmd2 development
194-
For doing cmd2 development, it is recommended you create a virtual environment using Conda or Virtualenv and install the
194+
For doing cmd2 development, it is recommended you create a virtual environment using Conda or Virtualenv and install the
195195
package from the source.
196196

197197
#### Create a new environment for cmd2 using Pipenv
198-
`cmd2` has support for using [Pipenv](https://docs.pipenv.org/en/latest/) for development.
198+
`cmd2` has support for using [Pipenv](https://docs.pipenv.org/en/latest/) for development.
199199

200200
`Pipenv` essentially combines the features of `pip` and `virtualenv` into a single tool. `cmd2` contains a Pipfile which
201-
makes it extremely easy to setup a `cmd2` development environment using `pipenv`.
201+
makes it extremely easy to setup a `cmd2` development environment using `pipenv`.
202202

203-
To create a virtual environment and install everything needed for `cmd2` development using `pipenv`, do the following
203+
To create a virtual environment and install everything needed for `cmd2` development using `pipenv`, do the following
204204
from a GitHub checkout:
205205
```sh
206206
pipenv install --dev
207207
```
208208

209-
To create a new virtualenv, using a specific version of Python you have installed (and on your PATH), use the
209+
To create a new virtualenv, using a specific version of Python you have installed (and on your PATH), use the
210210
--python VERSION flag, like so:
211211
```sh
212212
pipenv install --dev --python 3.8
@@ -219,8 +219,8 @@ pipenv shell
219219

220220
#### Create a new environment for cmd2 using Conda
221221
```sh
222-
$ conda create -n cmd2_py37 python=3.7
223-
$ conda activate cmd2_py37
222+
$ conda create -n cmd2_py38 python=3.8
223+
$ conda activate cmd2_py38
224224
```
225225

226226
#### Create a new environment for cmd using Virtualenv
@@ -233,15 +233,15 @@ pyenv versions
233233
# Install python version defined
234234
pyenv install 3.8.2
235235
```
236-
With the Python version installed, you can set the virtualenv properly.
236+
With the Python version installed, you can set the virtualenv properly.
237237

238238
```sh
239239
$ cd ~/src/cmd2
240-
$ virtualenv -p $(pyenv root)/versions/3.8.2/ cmd_py38
240+
$ virtualenv -p $(pyenv root)/versions/3.8.2/ cmd_py38
241241
$ source ~/src/cmd2/bin/activate
242242
```
243243

244-
Assuming you cloned the repository to `~/src/cmd2` you can install cmd2 in
244+
Assuming you cloned the repository to `~/src/cmd2` you can install cmd2 in
245245
[editable mode](https://pip.pypa.io/en/stable/reference/pip_install/#editable-installs).
246246
Changes to the source code are immediately available when the python interpreter
247247
imports `cmd2`, there is no need to re-install the module after every change. This
@@ -326,9 +326,9 @@ served (usually [http://localhost:8000](http://localhost:8000)).
326326

327327
### Static code analysis
328328

329-
You should have some sort of [PEP 8](https://www.python.org/dev/peps/pep-0008/)-based linting running in your editor or
329+
You should have some sort of [PEP 8](https://www.python.org/dev/peps/pep-0008/)-based linting running in your editor or
330330
IDE or at the command line before you commit code. `cmd2` uses [flake8](http://flake8.pycqa.org/en/latest/) as part of
331-
its continuous integration (CI) process. [pylint](https://www.pylint.org) is another good Python linter which can be
331+
its continuous integration (CI) process. [pylint](https://www.pylint.org) is another good Python linter which can be
332332
run at the command line but also can integrate with many IDEs and editors.
333333

334334
> Please do not ignore any linting errors in code you write or modify, as they are meant to **help** you and to ensure a clean and simple code base. Don't worry about linting errors in code you don't touch though - cleaning up the legacy code is a work in progress.
@@ -579,7 +579,7 @@ mostly automated. The manual steps are all git operations. Here's the checklist:
579579
1. Make sure all the unit tests pass with `invoke pytest` or `py.test`
580580
1. Make sure latest year in `LICENSE` matches current year
581581
1. Make sure `CHANGELOG.md` describes the version and has the correct release date
582-
1. Add a git tag representing the version number using ``invoke tag x.y.z``
582+
1. Add a git tag representing the version number using ``invoke tag x.y.z``
583583
* Where x, y, and z are all small non-negative integers
584584
1. (Optional) Run `invoke pypi-test` to clean, build, and upload a new release to [Test PyPi](https://test.pypi.org)
585585
1. Run `invoke pypi` to clean, build, and upload a new release to [PyPi](https://pypi.org/)

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
strategy:
1010
matrix:
1111
os: [ubuntu-latest, macos-latest, windows-latest]
12-
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
12+
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
1313
fail-fast: false
1414
runs-on: ${{ matrix.os }}
1515
steps:

.github/workflows/codeql-analysis.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ jobs:
4545

4646
# Initializes the CodeQL tools for scanning.
4747
- name: Initialize CodeQL
48-
uses: github/codeql-action/init@v2
48+
uses: github/codeql-action/init@v3
4949
with:
5050
languages: ${{ matrix.language }}
5151
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -56,7 +56,7 @@ jobs:
5656
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
5757
# If this step fails, then you should remove it and run the build manually (see below)
5858
- name: Autobuild
59-
uses: github/codeql-action/autobuild@v2
59+
uses: github/codeql-action/autobuild@v3
6060

6161
# ℹ️ Command-line programs to run using the OS shell.
6262
# 📚 https://git.io/JvXDl
@@ -70,4 +70,4 @@ jobs:
7070
# make release
7171

7272
- name: Perform CodeQL Analysis
73-
uses: github/codeql-action/analyze@v2
73+
uses: github/codeql-action/analyze@v3

.github/workflows/doc.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
strategy:
1313
matrix:
1414
os: [ubuntu-latest]
15-
python-version: ["3.11"]
15+
python-version: ["3.12"]
1616
fail-fast: false
1717
runs-on: ${{ matrix.os }}
1818
steps:

.github/workflows/format.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
strategy:
1313
matrix:
1414
os: [ubuntu-latest]
15-
python-version: ["3.11"]
15+
python-version: ["3.12"]
1616
fail-fast: false
1717
runs-on: ${{ matrix.os }}
1818
steps:

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
strategy:
1313
matrix:
1414
os: [ubuntu-latest]
15-
python-version: ["3.11"]
15+
python-version: ["3.12"]
1616
fail-fast: false
1717
runs-on: ${{ matrix.os }}
1818
steps:

.github/workflows/mypy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
strategy:
1313
matrix:
1414
os: [ubuntu-latest]
15-
python-version: ["3.11"]
15+
python-version: ["3.12"]
1616
fail-fast: false
1717
runs-on: ${{ matrix.os }}
1818
steps:

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
## 2.5.0 (TBD)
22
* Breaking Change
3-
* `cmd2` 2.5 supports Python 3.7+ (removed support for Python 3.6)
3+
* `cmd2` 2.5 supports Python 3.8+ (removed support for Python 3.6 and 3.7)
4+
* Bug Fixes
5+
* Fixed issue where persistent history file was not saved upon SIGHUP and SIGTERM signals.
46
* Enhancements
57
* Removed dependency on `attrs` and replaced with [dataclasses](https://docs.python.org/3/library/dataclasses.html)
68
* add `allow_clipboard` initialization parameter and attribute to disable ability to
79
add output to the operating system clipboard
10+
* Updated unit tests to be Python 3.12 compliant.
11+
* Deletions (potentially breaking changes)
12+
* Removed `apply_style` from `Cmd.pwarning()`.
813

914

1015
## 2.4.3 (January 27, 2023)

README.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ The developers toolbox
3232
![system schema](https://raw.githubusercontent.com/python-cmd2/cmd2/master/.github/images/graph.drawio.png)
3333

3434

35-
When creating solutions developers have no shortage of tools to create rich and smart user interfaces.
36-
System administrators have long been duct taping together brittle workflows based on a menagerie of simple command line tools created by strangers on github and the guy down the hall.
37-
Unfortunately, when CLIs become significantly complex the ease of command discoverability tends to fade quickly.
38-
On the other hand, Web and traditional desktop GUIs are first in class when it comes to easily discovering functionality.
35+
When creating solutions developers have no shortage of tools to create rich and smart user interfaces.
36+
System administrators have long been duct taping together brittle workflows based on a menagerie of simple command line tools created by strangers on github and the guy down the hall.
37+
Unfortunately, when CLIs become significantly complex the ease of command discoverability tends to fade quickly.
38+
On the other hand, Web and traditional desktop GUIs are first in class when it comes to easily discovering functionality.
3939
The price we pay for beautifully colored displays is complexity required to aggregate disperate applications into larger systems.
40-
`cmd2` fills the niche between high [ease of command discovery](https://clig.dev/#ease-of-discovery) applications and smart workflow automation systems.
40+
`cmd2` fills the niche between high [ease of command discovery](https://clig.dev/#ease-of-discovery) applications and smart workflow automation systems.
4141

42-
The `cmd2` framework provides a great mixture of both worlds. Application designers can easily create complex applications and rely on the cmd2 library to offer effortless user facing help and extensive tab completion.
42+
The `cmd2` framework provides a great mixture of both worlds. Application designers can easily create complex applications and rely on the cmd2 library to offer effortless user facing help and extensive tab completion.
4343
When users become comfortable with functionality, cmd2 turns into a feature rich library enabling a smooth transition to full automation. If designed with enough forethought, a well implemented cmd2 application can serve as a boutique workflow tool. `cmd2` pulls off this flexibility based on two pillars of philosophy:
4444

4545
* Tab Completion
@@ -78,7 +78,7 @@ On all operating systems, the latest stable version of `cmd2` can be installed u
7878
pip install -U cmd2
7979
```
8080

81-
cmd2 works with Python 3.7+ on Windows, macOS, and Linux. It is pure Python code with few 3rd-party dependencies.
81+
cmd2 works with Python 3.8+ on Windows, macOS, and Linux. It is pure Python code with few 3rd-party dependencies.
8282

8383
For information on other installation options, see
8484
[Installation Instructions](https://cmd2.readthedocs.io/en/latest/overview/installation.html) in the cmd2
@@ -97,7 +97,7 @@ The best way to learn the cmd2 api is to delve into the example applications loc
9797
Tutorials
9898
---------
9999

100-
* PyOhio 2019 presentation:
100+
* PyOhio 2019 presentation:
101101
* [video](https://www.youtube.com/watch?v=pebeWrTqIIw)
102102
* [slides](https://github.com/python-cmd2/talks/blob/master/PyOhio_2019/cmd2-PyOhio_2019.pdf)
103103
* [example code](https://github.com/python-cmd2/talks/tree/master/PyOhio_2019/examples)
@@ -161,4 +161,4 @@ Projects using cmd2
161161
Possibly defunct but still good examples
162162

163163
* [JSShell](https://github.com/Den1al/JSShell)
164-
* [FLASHMINGO](https://github.com/fireeye/flashmingo)
164+
* [FLASHMINGO](https://github.com/fireeye/flashmingo)

cmd2/__init__.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,8 @@
55

66
import sys
77

8-
# For python 3.8 and later
9-
if sys.version_info >= (3, 8):
10-
import importlib.metadata as importlib_metadata
11-
else:
12-
# For everyone else
13-
import importlib_metadata
8+
import importlib.metadata as importlib_metadata
9+
1410
try:
1511
__version__ = importlib_metadata.version(__name__)
1612
except importlib_metadata.PackageNotFoundError: # pragma: no cover

cmd2/argparse_custom.py

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -257,32 +257,21 @@ def my_completer(self, text, line, begidx, endidx, arg_tokens)
257257
List,
258258
NoReturn,
259259
Optional,
260+
Protocol,
260261
Sequence,
261262
Set,
262263
Tuple,
263264
Type,
264265
Union,
265266
cast,
267+
runtime_checkable,
266268
)
267269

268270
from . import (
269271
ansi,
270272
constants,
271273
)
272274

273-
try:
274-
from typing import (
275-
Protocol,
276-
runtime_checkable,
277-
)
278-
except ImportError:
279-
# Remove these imports when we no longer support Python 3.7
280-
from typing_extensions import ( # type: ignore[assignment]
281-
Protocol,
282-
runtime_checkable,
283-
)
284-
285-
286275
if TYPE_CHECKING: # pragma: no cover
287276
from .argparse_completer import (
288277
ArgparseCompleter,
@@ -352,8 +341,7 @@ class ChoicesProviderFuncBase(Protocol):
352341
Function that returns a list of choices in support of tab completion
353342
"""
354343

355-
def __call__(self) -> List[str]:
356-
... # pragma: no cover
344+
def __call__(self) -> List[str]: ... # pragma: no cover
357345

358346

359347
@runtime_checkable
@@ -362,8 +350,7 @@ class ChoicesProviderFuncWithTokens(Protocol):
362350
Function that returns a list of choices in support of tab completion and accepts a dictionary of prior arguments.
363351
"""
364352

365-
def __call__(self, *, arg_tokens: Dict[str, List[str]] = {}) -> List[str]:
366-
... # pragma: no cover
353+
def __call__(self, *, arg_tokens: Dict[str, List[str]] = {}) -> List[str]: ... # pragma: no cover
367354

368355

369356
ChoicesProviderFunc = Union[ChoicesProviderFuncBase, ChoicesProviderFuncWithTokens]
@@ -381,8 +368,7 @@ def __call__(
381368
line: str,
382369
begidx: int,
383370
endidx: int,
384-
) -> List[str]:
385-
... # pragma: no cover
371+
) -> List[str]: ... # pragma: no cover
386372

387373

388374
@runtime_checkable
@@ -400,8 +386,7 @@ def __call__(
400386
endidx: int,
401387
*,
402388
arg_tokens: Dict[str, List[str]] = {},
403-
) -> List[str]:
404-
... # pragma: no cover
389+
) -> List[str]: ... # pragma: no cover
405390

406391

407392
CompleterFunc = Union[CompleterFuncBase, CompleterFuncWithTokens]

0 commit comments

Comments
 (0)