Skip to content

Commit 81e371c

Browse files
authored
Add python 3.12 support (#2045)
* Test python 3.12 and use as primary build env * Add python 3.12 classifier to setup.py (for PyPI) * Run `tox -e codegen` * Update changelog * Update tox-systems_tests.ini I somehow overlooked this in my first commit, where I was supposed to add testing * Stop using pkg_resources in Python 3.10 and later * sort package names * Update grpcio and friends deps for Python 3.12 compatibility * Regenerated pb2 files
1 parent f145329 commit 81e371c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+3855
-3698
lines changed

.travis.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ matrix:
55
include:
66
# We run tests on the latest supported version of Python first.
77
# This is where additional tests are run so we give it more time.
8-
- python: "3.11"
8+
- python: "3.12"
99
- python: "3.8"
1010
- python: "3.9"
1111
- python: "3.10"
12+
- python: "3.11"
1213

1314
install:
1415
- travis_retry sudo apt-get -y install python3-pip

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ All notable changes to this project will be documented in this file.
3737
## Unreleased
3838
* ### ALL
3939
* #### Added
40+
* Support for Python 3.12
4041
* #### Changed
4142
* #### Removed
4243
* ### `nidcpower` (NI-DCPower)

build/templates/__init__.py.mako

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ def get_diagnostic_information():
6969

7070
note: Python bitness may be incorrect when running in a virtual environment
7171
'''
72+
import importlib.metadata
7273
import os
73-
import pkg_resources
7474
import platform
7575
import struct
7676
import sys
@@ -107,8 +107,22 @@ def get_diagnostic_information():
107107
else:
108108
raise SystemError('Unsupported platform: {}'.format(platform.system()))
109109

110-
installed_packages = pkg_resources.working_set
111-
installed_packages_list = [{'name': i.key, 'version': i.version, } for i in installed_packages]
110+
if sys.version_info[1] >= 10:
111+
installed_packages_names = [
112+
name
113+
for name_list in importlib.metadata.packages_distributions().values()
114+
for name in name_list
115+
]
116+
installed_packages_names = set(installed_packages_names)
117+
installed_packages_list = [
118+
{'name': name, 'version': importlib.metadata.distribution(name).version}
119+
for name in sorted(installed_packages_names)
120+
]
121+
## TODO (ni-jfitzger): Delete use of pkg_resources when we drop Python 3.9 support. See https://github.com/ni/nimi-python/issues/2047
122+
else:
123+
import pkg_resources
124+
installed_packages = pkg_resources.working_set
125+
installed_packages_list = [{'name': i.key, 'version': i.version, } for i in installed_packages]
112126

113127
info['os']['name'] = os_name
114128
info['os']['version'] = platform.version()

build/templates/setup.py.mako

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ setup(
5656
% if grpc_supported:
5757
extras_require={
5858
'grpc': [
59-
'grpcio>=1.49.1,<2.0',
60-
'protobuf>=4.21,<5.0'
59+
'grpcio>=1.59.0,<2.0',
60+
'protobuf>=4.21.6,<5.0'
6161
],
6262
},
6363
% endif
@@ -77,6 +77,7 @@ setup(
7777
"Programming Language :: Python :: 3.9",
7878
"Programming Language :: Python :: 3.10",
7979
"Programming Language :: Python :: 3.11",
80+
"Programming Language :: Python :: 3.12",
8081
"Programming Language :: Python :: Implementation :: CPython",
8182
"Topic :: System :: Hardware :: Hardware Drivers"
8283
],

build/templates/tox-system_tests.ini.mako

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
# test suite on all supported python versions. To use it, "pip install tox"
2727
# and then run "tox -c tox-system_tests.ini" from the driver directory. (generated/${module_name})
2828
[tox]
29-
envlist = ${wheel_env}py{38,39,310,311}-${module_name}-system_tests, py311-${module_name}-coverage
29+
envlist = ${wheel_env}py{38,39,310,311,312}-${module_name}-system_tests, py312-${module_name}-coverage
3030
skip_missing_interpreters=True
3131
ignore_basepython_conflict=True
3232
# We put the .tox directory outside of the Jenkins workspace so that it isn't wiped with the rest of the repo
@@ -85,7 +85,7 @@ deps =
8585
${module_name}-coverage: coverage
8686

8787
depends =
88-
${module_name}-coverage: py{38,39,310,311}-${module_name}-system_tests
88+
${module_name}-coverage: py{38,39,310,311,312}-${module_name}-system_tests
8989
% if uses_other_wheel:
9090
${module_name}-system_tests: ${wheel_env}
9191
% endif

generated/nidcpower/nidcpower/__init__.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ def get_diagnostic_information():
2626
2727
note: Python bitness may be incorrect when running in a virtual environment
2828
'''
29+
import importlib.metadata
2930
import os
30-
import pkg_resources
3131
import platform
3232
import struct
3333
import sys
@@ -64,8 +64,21 @@ def is_venv():
6464
else:
6565
raise SystemError('Unsupported platform: {}'.format(platform.system()))
6666

67-
installed_packages = pkg_resources.working_set
68-
installed_packages_list = [{'name': i.key, 'version': i.version, } for i in installed_packages]
67+
if sys.version_info[1] >= 10:
68+
installed_packages_names = [
69+
name
70+
for name_list in importlib.metadata.packages_distributions().values()
71+
for name in name_list
72+
]
73+
installed_packages_names = set(installed_packages_names)
74+
installed_packages_list = [
75+
{'name': name, 'version': importlib.metadata.distribution(name).version}
76+
for name in sorted(installed_packages_names)
77+
]
78+
else:
79+
import pkg_resources
80+
installed_packages = pkg_resources.working_set
81+
installed_packages_list = [{'name': i.key, 'version': i.version, } for i in installed_packages]
6982

7083
info['os']['name'] = os_name
7184
info['os']['version'] = platform.version()

generated/nidcpower/nidcpower/nidcpower_pb2.py

Lines changed: 634 additions & 634 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

generated/nidcpower/nidcpower/nidevice_pb2.py

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

generated/nidcpower/nidcpower/session_pb2.py

Lines changed: 32 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

generated/nidcpower/setup.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ def read_contents(file_to_read):
4646
],
4747
extras_require={
4848
'grpc': [
49-
'grpcio>=1.49.1,<2.0',
50-
'protobuf>=4.21,<5.0'
49+
'grpcio>=1.59.0,<2.0',
50+
'protobuf>=4.21.6,<5.0'
5151
],
5252
},
5353
setup_requires=['pytest-runner', ],
@@ -66,6 +66,7 @@ def read_contents(file_to_read):
6666
"Programming Language :: Python :: 3.9",
6767
"Programming Language :: Python :: 3.10",
6868
"Programming Language :: Python :: 3.11",
69+
"Programming Language :: Python :: 3.12",
6970
"Programming Language :: Python :: Implementation :: CPython",
7071
"Topic :: System :: Hardware :: Hardware Drivers"
7172
],

0 commit comments

Comments
 (0)