Skip to content

Commit f5c1b79

Browse files
added tests
CI fixes remove python 3.9
1 parent 01c85b0 commit f5c1b79

22 files changed

+1450
-3182
lines changed

.github/workflows/tests.yml

Lines changed: 48 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,54 @@
1-
name: Run Unit Tests
1+
name: Test
2+
23
on:
34
push:
4-
branches:
5-
-'arm/**'
5+
branches: [ master ]
66
pull_request:
7-
branches:
8-
-'arm/**'
97

108
jobs:
11-
test_arm64:
12-
if: github.repository == 'intrepidcs/python_ics'
13-
name: Linux ARM64 unit tests
14-
runs-on: [ self-hosted, Linux, ARM64, Hardware ]
15-
steps:
16-
- uses: actions/checkout@v4
17-
with:
18-
submodules: recursive
19-
fetch-depth: 0 # needed for history/tags
9+
test:
10+
runs-on: ${{ matrix.os }}
11+
strategy:
12+
fail-fast: false
13+
matrix:
14+
os: [ubuntu-latest, windows-latest, macos-latest]
15+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
2016

21-
- name: Setup Python
22-
run: |
23-
python -m venv .venv
24-
source .venv/bin/activate
25-
python -m pip install --upgrade pip
26-
pip install .
27-
28-
- name: Run unit tests
29-
run: |
30-
source .venv/bin/activate
31-
sudo setcap cap_net_admin,cap_net_raw+ep $(realpath $(which python))
32-
python -m unittest discover -s tests.runner --verbose
17+
steps:
18+
- uses: actions/checkout@v4
19+
with:
20+
fetch-depth: 0
21+
submodules: recursive
22+
23+
# Install system dependencies
24+
- name: Install system dependencies (Ubuntu)
25+
if: runner.os == 'Linux'
26+
run: |
27+
sudo apt-get update
28+
sudo apt-get install -y cmake clang clang-format clang-tools flex bison build-essential
29+
30+
- name: Install system dependencies (macOS)
31+
if: runner.os == 'macOS'
32+
run: |
33+
brew install cmake clang-format
34+
35+
- name: Install system dependencies (Windows)
36+
if: runner.os == 'Windows'
37+
run: |
38+
choco install llvm cmake
39+
40+
- name: Set up Python ${{ matrix.python-version }}
41+
uses: actions/setup-python@v4
42+
with:
43+
python-version: ${{ matrix.python-version }}
44+
45+
- name: Install uv
46+
uses: astral-sh/setup-uv@v3
47+
48+
- name: Install dependencies
49+
run: |
50+
uv sync --all-extras --dev
51+
52+
- name: Run tests
53+
run: |
54+
uv run pytest tests/ --verbose

.github/workflows/wheels.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
run: echo $PYTHON_ICS_VERSION
3939

4040
- name: Install cibuildwheel
41-
run: python -m pip install cibuildwheel==2.22.0
41+
run: python -m pip install cibuildwheel
4242

4343
- name: Build wheels
4444
run: python -m cibuildwheel --output-dir wheelhouse

.vscode/settings.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"python.analysis.autoImportCompletions": false,
3+
"python.analysis.indexing": false,
4+
"python.analysis.packageIndexDepths": [
5+
{
6+
"name": "ics",
7+
"depth": 0
8+
}
9+
],
10+
"python.analysis.exclude": [
11+
"**/gen/**",
12+
"**/.venv/**"
13+
]
14+
}

cicsSpyStatusBits_processed.h

Lines changed: 243 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,243 @@
1+
// --------------------------------------------------------------------------
2+
// COPYRIGHT INTREPID CONTROL SYSTEMS, INC. (c) 1994-20xx
3+
// Confidential and proprietary. This document and its contents are the
4+
// property of Intrepid Control Systems, Inc. It is not to be copied,
5+
// distributed, or otherwise disclosed or used without the prior written
6+
// consent of Intrepid Control Systems Inc.
7+
// All rights reserved.
8+
// --------------------------------------------------------------------------
9+
10+
// SPY Status Bit Definitions
11+
// Generated automatically - DO NOT MODIFY
12+
// Modify cicsSpyStatusBits_config.yml and run cicsSpyStatusBits_gen.py
13+
// Generated on: 2025-07-14 14:31:40
14+
15+
#ifndef CICSSPYSTATUSBITS_H_
16+
#define CICSSPYSTATUSBITS_H_ 1
17+
18+
// WARNING: The following bit conflicts were detected:
19+
// spystatus value 0x10000000: // VSI value 'SPY_STATUS_VSI_IFR_CRC_BIT' conflicts with common value 'SPY_STATUS_PDU'
20+
// spystatus value 0x10000000: // A2B value 'SPY_STATUS_A2B_CONTROL' conflicts with common value 'SPY_STATUS_PDU'
21+
// spystatus value 0x08: // A2B value 'SPY_STATUS_A2B_SCF_VALID_WAITING' conflicts with common value 'SPY_STATUS_REMOTE_FRAME'
22+
// spystatus value 0x40000000: // A2B value 'SPY_STATUS_A2B_UPSTREAM' conflicts with common value 'SPY_STATUS_HIGH_SPEED'
23+
// spystatus value 0x10000000: // FLEXRAY value 'SPY_STATUS_FLEXRAY_PDU' conflicts with common value 'SPY_STATUS_PDU'
24+
// spystatus value 0x40000000: // FLEXRAY value 'SPY_STATUS_FLEXRAY_PDU_UPDATE_BIT_SET' conflicts with common value 'SPY_STATUS_HIGH_SPEED'
25+
// spystatus value 0x08: // FLEXRAY value 'SPY_STATUS_FLEXRAY_PDU_NO_UPDATE_BIT' conflicts with common value 'SPY_STATUS_REMOTE_FRAME'
26+
27+
// Glyph definitions
28+
// '|' - byte divider
29+
// '.' - nibble divider
30+
// '-' - unused bit
31+
// 'o' - common bit
32+
// 'x' - protocol specific bit
33+
// '!' - conflict bit
34+
35+
// SPYSTATUS bit definitions
36+
// SPYSTATUS - Common bits
37+
// |oo-o.oooo|oooo.oooo|oooo.oo-o|oo-o.oooo|
38+
#define SPY_STATUS_GLOBAL_ERR 0x01 // Global error flag
39+
#define SPY_STATUS_TX_MSG 0x02 // Transmitted message
40+
#define SPY_STATUS_XTD_FRAME 0x04 // Extended frame
41+
#define SPY_STATUS_REMOTE_FRAME 0x08 // Remote frame
42+
#define SPY_STATUS_CRC_ERROR 0x10 // CRC error
43+
#define SPY_STATUS_INCOMPLETE_FRAME 0x40 // Incomplete frame
44+
#define SPY_STATUS_LOST_ARBITRATION 0x80 // Lost arbitration
45+
#define SPY_STATUS_UNDEFINED_ERROR 0x0100 // Undefined error
46+
#define SPY_STATUS_BUS_RECOVERED 0x0400 // Bus recovered
47+
#define SPY_STATUS_BUS_SHORTED_PLUS 0x0800 // Bus shorted to plus
48+
#define SPY_STATUS_BUS_SHORTED_GND 0x1000 // Bus shorted to ground
49+
#define SPY_STATUS_CHECKSUM_ERROR 0x2000 // Checksum error
50+
#define SPY_STATUS_BAD_MESSAGE_BIT_TIME_ERROR 0x4000 // Bad message bit time error
51+
#define SPY_STATUS_TX_NOMATCH 0x8000 // TX no match
52+
#define SPY_STATUS_COMM_IN_OVERFLOW 0x010000 // Communication input overflow
53+
#define SPY_STATUS_EXPECTED_LEN_MISMATCH 0x020000 // Expected length mismatch
54+
#define SPY_STATUS_MSG_NO_MATCH 0x040000 // Message no match
55+
#define SPY_STATUS_BREAK 0x080000 // Break detected
56+
#define SPY_STATUS_AVSI_REC_OVERFLOW 0x100000 // AVSI record overflow
57+
#define SPY_STATUS_TEST_TRIGGER 0x200000 // Test trigger
58+
#define SPY_STATUS_AUDIO_COMMENT 0x400000 // Audio comment
59+
#define SPY_STATUS_GPS_DATA 0x800000 // GPS data
60+
#define SPY_STATUS_ANALOG_DIGITAL_INPUT 0x01000000 // Analog digital input
61+
#define SPY_STATUS_TEXT_COMMENT 0x02000000 // Text comment
62+
#define SPY_STATUS_NETWORK_MESSAGE_TYPE 0x04000000 // Network message type
63+
#define SPY_STATUS_VSI_TX_UNDERRUN 0x08000000 // VSI TX underrun
64+
#define SPY_STATUS_PDU 0x10000000 // PDU message
65+
#define SPY_STATUS_HIGH_SPEED 0x40000000 // High speed
66+
#define SPY_STATUS_EXTENDED 0x80000000 // Extended - if this bit is set than decode StatusBitField3 in AckBytes
67+
68+
// SPYSTATUS - A2B protocol bits
69+
// |o!x!.oooo|oooo.oooo|oooo.oo-o|oo-o.!ooo|
70+
#define SPY_STATUS_A2B_SCF_VALID_WAITING 0x08 // A2B SCF valid waiting
71+
#define SPY_STATUS_A2B_CONTROL 0x10000000 // A2B control message
72+
#define SPY_STATUS_A2B_MONITOR 0x20000000 // A2B monitor message
73+
#define SPY_STATUS_A2B_UPSTREAM 0x40000000 // A2B upstream message
74+
75+
// SPYSTATUS - CAN protocol bits
76+
// |ooxo.oooo|oooo.oooo|oooo.ooxo|ooxo.oooo|
77+
#define SPY_STATUS_CAN_ERROR_PASSIVE 0x20 // CAN error passive state
78+
#define SPY_STATUS_CAN_BUS_OFF 0x0200 // CAN bus off state
79+
#define SPY_STATUS_CANFD 0x20000000 // CAN FD frame
80+
81+
// SPYSTATUS - ETHERNET protocol bits
82+
// |oo-o.oooo|oooo.oooo|oooo.oo-o|ooxo.oooo|
83+
#define SPY_STATUS_HEADERCRC_ERROR 0x20 // Header CRC error
84+
85+
// SPYSTATUS - FLEXRAY protocol bits
86+
// |o!-!.oooo|oooo.oooo|oooo.oo-o|oo-o.!ooo|
87+
#define SPY_STATUS_FLEXRAY_PDU_NO_UPDATE_BIT 0x08 // FlexRay PDU no update bit
88+
#define SPY_STATUS_FLEXRAY_PDU 0x10000000 // FlexRay PDU (alias for SPY_STATUS_PDU)
89+
#define SPY_STATUS_FLEXRAY_PDU_UPDATE_BIT_SET 0x40000000 // FlexRay PDU update bit set
90+
91+
// SPYSTATUS - LIN protocol bits
92+
// |ooxo.oooo|oooo.oooo|oooo.oo-o|oo-o.oooo|
93+
#define SPY_STATUS_LIN_MASTER 0x20000000 // LIN master message
94+
95+
// SPYSTATUS - VSI protocol bits
96+
// |oox!.oooo|oooo.oooo|oooo.oo-o|oo-o.oooo|
97+
#define SPY_STATUS_VSI_IFR_CRC_BIT 0x10000000 // VSI IFR CRC bit
98+
#define SPY_STATUS_INIT_MESSAGE 0x20000000 // Initialization message
99+
100+
// SPYSTATUS2 bit definitions
101+
// SPYSTATUS2 - Common bits
102+
// |----.----|---o.--oo|----.----|----.oooo|
103+
#define SPY_STATUS2_HAS_VALUE 0x01
104+
#define SPY_STATUS2_VALUE_IS_BOOLEAN 0x02
105+
#define SPY_STATUS2_HIGH_VOLTAGE 0x04
106+
#define SPY_STATUS2_LONG_MESSAGE 0x08
107+
#define SPY_STATUS2_GLOBAL_CHANGE 0x010000
108+
#define SPY_STATUS2_ERROR_FRAME 0x020000
109+
#define SPY_STATUS2_END_OF_LONG_MESSAGE 0x100000
110+
111+
// SPYSTATUS2 - CAN protocol bits
112+
// |----.----|-xxo.--oo|----.----|----.oooo|
113+
#define SPY_STATUS2_CAN_ISO15765_LOGICAL_FRAME 0x200000
114+
#define SPY_STATUS2_CAN_HAVE_LINK_DATA 0x400000
115+
116+
// SPYSTATUS2 - ETHERNET protocol bits
117+
// |xxxx.xxxx|xxxo.--oo|----.----|----.oooo|
118+
#define SPY_STATUS2_ETHERNET_CRC_ERROR 0x200000
119+
#define SPY_STATUS2_ETHERNET_FRAME_TOO_SHORT 0x400000
120+
#define SPY_STATUS2_ETHERNET_FCS_AVAILABLE 0x800000 // This frame contains FCS (4 bytes) obtained from ICS Ethernet hardware (ex. RAD-STAR)
121+
#define SPY_STATUS2_ETHERNET_NO_PADDING 0x01000000
122+
#define SPY_STATUS2_ETHERNET_PREEMPTION_ENABLED 0x02000000
123+
#define SPY_STATUS2_ETHERNET_UPDATE_CHECKSUMS 0x04000000
124+
#define SPY_STATUS2_ETHERNET_MANUALFCS_ENABLED 0x08000000
125+
#define SPY_STATUS2_ETHERNET_FCS_VERIFIED 0x10000000
126+
#define SPY_STATUS2_ETHERNET_T1S_SYMBOL 0x20000000
127+
#define SPY_STATUS2_ETHERNET_T1S_BURST 0x40000000
128+
#define SPY_STATUS2_ETHERNET_T1S_ETHERNET 0x80000000
129+
130+
// SPYSTATUS2 - FLEXRAY protocol bits
131+
// |----.-xxx|xxxo.--oo|----.----|----.oooo|
132+
#define SPY_STATUS2_FLEXRAY_TX_AB 0x200000
133+
#define SPY_STATUS2_FLEXRAY_TX_AB_NO_A 0x400000
134+
#define SPY_STATUS2_FLEXRAY_TX_AB_NO_B 0x800000
135+
#define SPY_STATUS2_FLEXRAY_TX_AB_NO_MATCH 0x01000000
136+
#define SPY_STATUS2_FLEXRAY_NO_CRC 0x02000000
137+
#define SPY_STATUS2_FLEXRAY_NO_HEADERCRC 0x04000000 //
138+
139+
// SPYSTATUS2 - I2C protocol bits
140+
// |----.----|xxxo.--oo|----.----|----.oooo|
141+
#define SPY_STATUS2_I2C_ERR_TIMEOUT 0x200000
142+
#define SPY_STATUS2_I2C_ERR_NACK 0x400000
143+
#define SPY_STATUS2_I2C_DIR_READ 0x800000
144+
145+
// SPYSTATUS2 - ISO protocol bits
146+
// |-xxx.x---|---o.--oo|----.----|----.oooo|
147+
#define SPY_STATUS2_ISO_FRAME_ERROR 0x08000000 // ISO frame error
148+
#define SPY_STATUS2_ISO_OVERFLOW_ERROR 0x10000000 // ISO overflow error
149+
#define SPY_STATUS2_ISO_PARITY_ERROR 0x20000000 // ISO parity error
150+
#define SPY_STATUS2_ISO_RX_TIMEOUT_ERROR 0x40000000 // ISO specific timeout error
151+
152+
// SPYSTATUS2 - LIN protocol bits
153+
// |xxxx.xxxx|xxxo.--oo|----.----|----.oooo|
154+
#define SPY_STATUS2_LIN_ERR_RX_BREAK_NOT_0 0x200000 // LIN RX break not 0 error
155+
#define SPY_STATUS2_LIN_ERR_RX_BREAK_TOO_SHORT 0x400000 // LIN RX break too short error
156+
#define SPY_STATUS2_LIN_ERR_RX_SYNC_NOT_55 0x800000 // LIN RX sync not 0x55 error
157+
#define SPY_STATUS2_LIN_ERR_RX_DATA_GREATER_8 0x01000000 // LIN RX data greater than 8 bytes error
158+
#define SPY_STATUS2_LIN_ERR_TX_RX_MISMATCH 0x02000000 // LIN TX/RX mismatch error
159+
#define SPY_STATUS2_LIN_ERR_MSG_ID_PARITY 0x04000000 // LIN message ID parity error
160+
#define SPY_STATUS2_LIN_SYNC_FRAME_ERROR 0x08000000 // LIN sync frame error
161+
#define SPY_STATUS2_LIN_ID_FRAME_ERROR 0x10000000 // LIN ID frame error
162+
#define SPY_STATUS2_LIN_SLAVE_BYTE_ERROR 0x20000000 // LIN slave byte error
163+
#define SPY_STATUS2_LIN_RX_TIMEOUT_ERROR 0x40000000 // RX timeout error
164+
#define SPY_STATUS2_LIN_NO_SLAVE_DATA 0x80000000 // LIN no slave data
165+
166+
// SPYSTATUS2 - MDIO protocol bits
167+
// |-xxx.xxxx|xxxo.--oo|----.----|----.oooo|
168+
#define SPY_STATUS2_MDIO_ERR_TIMEOUT 0x200000
169+
#define SPY_STATUS2_MDIO_JOB_CANCELLED 0x400000
170+
#define SPY_STATUS2_MDIO_INVALID_BUS 0x800000
171+
#define SPY_STATUS2_MDIO_INVALID_PHYADDR 0x01000000
172+
#define SPY_STATUS2_MDIO_INVALID_REGADDR 0x02000000
173+
#define SPY_STATUS2_MDIO_UNSUPPORTED_CLAUSE 0x04000000
174+
#define SPY_STATUS2_MDIO_UNSUPPORTED_OPCODE 0x08000000
175+
#define SPY_STATUS2_MDIO_OVERFLOW 0x10000000
176+
#define SPY_STATUS2_MDIO_CLAUSE45 0x20000000
177+
#define SPY_STATUS2_MDIO_READ 0x40000000
178+
179+
// SPYSTATUS2 - MOST protocol bits
180+
// |xxxx.xxxx|xxxo.--oo|----.----|----.oooo|
181+
#define SPY_STATUS2_MOST_PACKET_DATA 0x200000
182+
#define SPY_STATUS2_MOST_STATUS 0x400000 // reflects changes in light/lock/MPR/SBC/etc...
183+
#define SPY_STATUS2_MOST_LOW_LEVEL 0x800000 // MOST low level message, allocs, deallocs, remote requests...*/
184+
#define SPY_STATUS2_MOST_CONTROL_DATA 0x01000000
185+
#define SPY_STATUS2_MOST_MHP_USER_DATA 0x02000000 // MOST HIGH User Data Frame
186+
#define SPY_STATUS2_MOST_MHP_CONTROL_DATA 0x04000000 // MOST HIGH Control Data
187+
#define SPY_STATUS2_MOST_I2S_DUMP 0x08000000
188+
#define SPY_STATUS2_MOST_TOO_SHORT 0x10000000
189+
#define SPY_STATUS2_MOST_MOST50 0x20000000 // absence of MOST50 and MOST150 implies it's MOST25
190+
#define SPY_STATUS2_MOST_MOST150 0x40000000
191+
#define SPY_STATUS2_MOST_CHANGED_PAR 0x80000000 // first byte in ack reflects what changed.
192+
193+
// SPYSTATUS2 - WBMS protocol bits
194+
// |----.----|--xo.--oo|----.----|----.oooo|
195+
#define SPY_STATUS2_WBMS_API_IS_CALLBACK 0x200000
196+
197+
// SPYSTATUS3 bit definitions
198+
// SPYSTATUS3 - CAN protocol bits
199+
// |----.----|-xxx.xxxx|-xxx.xxxx|----.-xxx|
200+
#define SPY_STATUS3_CAN_ERR_PASSIVE 0x01 // CAN error passive state: typically when error counter is > 127
201+
#define SPY_STATUS3_CAN_BUS_OFF 0x02 // CAN bus off state
202+
#define SPY_STATUS3_CAN_ERR_WARNING 0x04 // CAN error warning: typically when error counter is > 96
203+
#define SPY_STATUS3_CAN_DATAERR_STUFF_ERROR 0x0100 // CAN stuff error during the data payload phase
204+
#define SPY_STATUS3_CAN_DATAERR_FORM_ERROR 0x0200 // CAN form error during the data payload phase
205+
#define SPY_STATUS3_CAN_DATAERR_ACK_ERROR 0x0400 // CAN ack error during the data payload phase
206+
#define SPY_STATUS3_CAN_DATAERR_BIT1_ERROR 0x0800 // CAN bit1 error during the data payload phase
207+
#define SPY_STATUS3_CAN_DATAERR_BIT0_ERROR 0x1000 // CAN bit0 error during the data payload phase
208+
#define SPY_STATUS3_CAN_DATAERR_CRC_ERROR 0x2000 // CAN CRC error during the data payload phase
209+
#define SPY_STATUS3_CAN_DATAERR_NOCHANGE 0x4000 // CAN data error occurred before and no change yet
210+
#define SPY_STATUS3_CAN_GENERR_STUFF_ERROR 0x010000 // CAN stuff error at the general frame level
211+
#define SPY_STATUS3_CAN_GENERR_FORM_ERROR 0x020000 // CAN form error at the general frame level
212+
#define SPY_STATUS3_CAN_GENERR_ACK_ERROR 0x040000 // CAN ack error at the general frame level
213+
#define SPY_STATUS3_CAN_GENERR_BIT1_ERROR 0x080000 // CAN bit1 error at the general frame level
214+
#define SPY_STATUS3_CAN_GENERR_BIT0_ERROR 0x100000 // CAN bit0 error at the general frame level
215+
#define SPY_STATUS3_CAN_GENERR_CRC_ERROR 0x200000 // CAN CRC error at the general frame level
216+
#define SPY_STATUS3_CAN_GENERR_NOCHANGE 0x400000 // CAN frame Error occurred before and no change yet
217+
218+
// SPYSTATUS3 - CANFD protocol bits
219+
// |----.----|----.----|----.----|---x.xxxx|
220+
#define SPY_STATUS3_CANFD_ESI 0x01 // CAN FD Error State Indicator (ESI) reflects the error state of the transmitting node
221+
#define SPY_STATUS3_CANFD_IDE 0x02 // CAN FD Identifier Extension (IDE) indicates if standard or extended IDs are in use
222+
#define SPY_STATUS3_CANFD_RTR 0x04
223+
#define SPY_STATUS3_CANFD_FDF 0x08 // CAN FD Format (FDF) flag -- distinguishes classic CAN from CANFD
224+
#define SPY_STATUS3_CANFD_BRS 0x10 // CANFD Baud Rate Select (BRS) flag, indicates if the data portion transmits at a higher bitrate
225+
226+
// SPYSTATUS3 - ETHERNET protocol bits
227+
// |----.----|----.----|----.----|----.--xx|
228+
#define SPY_STATUS3_ETHERNET_TX_COLLISION 0x01
229+
#define SPY_STATUS3_ETHERNET_T1S_WAKE 0x02
230+
231+
// SPYSTATUS3 - LIN protocol bits
232+
// |----.----|----.----|----.----|----.-xxx|
233+
#define SPY_STATUS3_LIN_JUST_BREAK_SYNC 0x01
234+
#define SPY_STATUS3_LIN_SLAVE_DATA_TOO_SHORT 0x02
235+
#define SPY_STATUS3_LIN_ONLY_UPDATE_SLAVE_TABLE_ONCE 0x04
236+
237+
// SPYSTATUS4 bit definitions
238+
// SPYSTATUS4 - ETHERNET protocol bits
239+
// |----.----|----.----|----.----|----.--xx|
240+
#define SPY_STATUS4_ETH_CRC_ERROR 0x01 // Ethernet CRC error
241+
#define SPY_STATUS4_ETH_FRAME_TOO_LONG 0x02 // Ethernet frame too long
242+
243+
#endif // CICSSPYSTATUSBITS_H_

pyproject.toml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ maintainers = [{ name = "David Rebbe", email = "drebbe@intrepidcs.com" }]
66
description = "Python wrapper for interfacing to IntrepidCS Hardware."
77
keywords = ["intrepidcs", "CAN", "Ethernet", "Automotive", "ICS"]
88
readme = { file = "README.md", content-type = "text/markdown" }
9-
requires-python = ">=3.9"
9+
requires-python = ">=3.10"
1010
license = { file = "LICENSE.md" }
1111
classifiers = [
1212
"Development Status :: 5 - Production/Stable",
@@ -15,11 +15,11 @@ classifiers = [
1515
"Topic :: Software Development :: Libraries :: Python Modules",
1616
"Programming Language :: Python",
1717
"Programming Language :: Python :: 3",
18-
"Programming Language :: Python :: 3.9",
1918
"Programming Language :: Python :: 3.10",
2019
"Programming Language :: Python :: 3.11",
2120
"Programming Language :: Python :: 3.12",
2221
"Programming Language :: Python :: 3.13",
22+
"Programming Language :: Python :: 3.14",
2323
]
2424

2525
[project.urls]
@@ -36,12 +36,13 @@ requires = [
3636
"setuptools",
3737
"wheel",
3838
"dunamai",
39+
"pytest>=8.4.2",
3940
]
4041

4142

4243
[tool.cibuildwheel]
43-
build = "{*-win32,*-win_amd64,*-macosx_universal2,*-manylinux_x86_64,*-manylinux_aarch64}"
44-
skip = "cp36-* cp37-* pp* *-manylinux_i686 *-musllinux_*"
44+
build = "cp{310,311,312,313,314}-{win32,win_amd64,macosx_universal2,manylinux_x86_64,manylinux_aarch64}"
45+
skip = "cp36-* cp37-* cp38-* cp39-* pp* *-manylinux_i686 *-musllinux_*"
4546
environment = { CIBW_BUILD_VERBOSITY = 1, DISTUTILS_DEBUG = 1, MACOSX_DEPLOYMENT_TARGET = "10.13", CIBW_ARCHS_LINUX = "auto aarch64" }
4647
before-build = "python -m pip install wheel"
4748
manylinux-x86_64-image = "quay.io/pypa/manylinux_2_28_x86_64"

0 commit comments

Comments
 (0)