Skip to content

Commit 348050f

Browse files
authored
release: Prepare for v0.8.0 release (#108)
- Add v0.8.0 changelog entry with all changes since v0.7.0 - Update SECURITY.md supported versions (0.8.x and 0.7.x) - Update AGENTS.md and NOTICE with new version and date - Update dependency lock file
1 parent 955fecf commit 348050f

6 files changed

Lines changed: 418 additions & 344 deletions

File tree

AGENTS.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
HTTP client SDK for Itential Platform and Automation Gateway 4.x. Factory-based sync/async clients with auto-authentication, comprehensive logging, and sensitive data filtering. Production-ready despite beta status.
66

7-
**Current**: v0.7.0 (2025-12-16) | 3.7k LOC | 100% test coverage | Python 3.10-3.13
7+
**Current**: v0.8.0 (2026-02-25) | 3.7k LOC | 100% test coverage | Python 3.10-3.13
88

99
## Architecture
1010

@@ -18,7 +18,9 @@ Factory pattern creates dynamically-typed clients by composing auth mixins with
1818
- `heuristics.py`: Singleton PII scanner with extensible patterns
1919
- `http.py`: HTTPMethod enum + Request/Response wrappers
2020

21-
**New in 0.7.0**: Connection TTL (`ttl` param forces re-auth after N seconds)
21+
**New in 0.8.0**: License header checking with `make license` and `make license-fix` commands
22+
23+
**Previously in 0.7.0**: Connection TTL (`ttl` param forces re-auth after N seconds)
2224

2325
## Stack
2426

CHANGELOG.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,43 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.8.0] - 2026-02-25
9+
10+
### Added
11+
- License header checking and enforcement with automated script (#102)
12+
- Thread-safe locking to logger cache access (#106)
13+
- `__slots__` to ConnectionBase, Request, Response classes for 40% memory reduction (#106)
14+
15+
### Changed
16+
- Improved tox configuration with new environments and better organization (#101)
17+
- Enhanced Makefile with additional targets and better documentation (#101)
18+
- Renamed LICENSES.md to NOTICE for better clarity (#100)
19+
- Refactored to idiomatic Python boolean comparisons removing 'is True/False' patterns (#106)
20+
- Simplified complex validation logic for better readability (#106)
21+
- Improved resource cleanup patterns and explicit garbage collection in logging.initialize() (#106)
22+
23+
### Fixed
24+
- Critical TTL re-authentication TOCTOU race condition by moving check inside lock (#106)
25+
- Replaced assert statements with proper runtime validation for production safety (#106)
26+
- Added proper None guards to exception properties instead of raising AttributeError (#106)
27+
- Fixed union type syntax errors in type annotations (#106)
28+
- Fixed potential race conditions in concurrent logger access (#106)
29+
30+
### Performance
31+
- Cached TTL enabled flag to eliminate syscall overhead on every request (~100 cycles saved) (#106)
32+
- Optimized regex pattern compilation to class-level with singleton pattern (#106)
33+
- Replaced RLock with Lock for 2x performance improvement on simple flag protection (#106)
34+
- Implemented proper double-check locking pattern for authentication (#106)
35+
36+
### Documentation
37+
- Updated documentation to reflect current state of the project (#107)
38+
- Condensed CLAUDE.md for better maintainability (#105)
39+
- Updated SECURITY.md with improved best practices (#105)
40+
41+
### Testing
42+
- Achieved 100% test coverage across all modules (#104)
43+
- Added comprehensive test cases for logging and platform modules (#104)
44+
845
## [0.7.0] - 2025-12-16
946

1047
### Added

NOTICE

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ This document lists all third-party dependencies used in the Itential Python SDK
1313

1414
#### httpx Dependencies
1515

16-
**anyio (4.12.0)**
16+
**anyio (4.12.1)**
1717
- **License**: MIT
1818
- **Description**: High level compatibility layer for multiple asynchronous event loop implementations
1919
- **PyPI**: https://pypi.org/project/anyio/
2020

21-
**certifi (2025.11.12)**
21+
**certifi (2026.2.25)**
2222
- **License**: Mozilla Public License 2.0 (MPL 2.0)
2323
- **Description**: Python package for providing Mozilla's CA Bundle
2424
- **PyPI**: https://pypi.org/project/certifi/
@@ -57,24 +57,24 @@ This document lists all third-party dependencies used in the Itential Python SDK
5757
- **Description**: Pytest plugin for measuring coverage
5858
- **PyPI**: https://pypi.org/project/pytest-cov/
5959

60-
**coverage (7.13.0)**
60+
**coverage (7.13.4)**
6161
- **License**: Apache License 2.0
6262
- **Description**: Code coverage measurement for Python
6363
- **PyPI**: https://pypi.org/project/coverage/
6464

65-
**tox (4.32.0)**
65+
**tox (4.46.2)**
6666
- **License**: MIT
6767
- **Description**: Tox is a generic virtual environment management and test command line tool
6868
- **PyPI**: https://pypi.org/project/tox/
6969

70-
**tox-uv (1.29.0)**
70+
**tox-uv (1.33.0)**
7171
- **License**: MIT
7272
- **Description**: Use uv with tox for faster virtual environment management
7373
- **PyPI**: https://pypi.org/project/tox-uv/
7474

7575
### Code Quality and Linting
7676

77-
**ruff (0.14.9)**
77+
**ruff (0.15.2)**
7878
- **License**: MIT
7979
- **Description**: An extremely fast Python linter and code formatter
8080
- **PyPI**: https://pypi.org/project/ruff/
@@ -91,7 +91,7 @@ This document lists all third-party dependencies used in the Itential Python SDK
9191

9292
### Security Analysis
9393

94-
**bandit (1.9.2)**
94+
**bandit (1.9.4)**
9595
- **License**: Apache License 2.0
9696
- **Description**: Security oriented static analyser for python code
9797
- **PyPI**: https://pypi.org/project/bandit/
@@ -103,7 +103,7 @@ This document lists all third-party dependencies used in the Itential Python SDK
103103
- **Description**: A framework for managing and maintaining multi-language pre-commit hooks
104104
- **PyPI**: https://pypi.org/project/pre-commit/
105105

106-
**build (1.3.0)**
106+
**build (1.4.0)**
107107
- **License**: MIT
108108
- **Description**: A simple, correct Python build frontend
109109
- **PyPI**: https://pypi.org/project/build/
@@ -115,7 +115,7 @@ This document lists all third-party dependencies used in the Itential Python SDK
115115

116116
### Utility Dependencies
117117

118-
**packaging (25.0)**
118+
**packaging (26.0)**
119119
- **License**: Apache License 2.0 or BSD License
120120
- **Description**: Core utilities for Python packages
121121
- **PyPI**: https://pypi.org/project/packaging/
@@ -130,7 +130,7 @@ This document lists all third-party dependencies used in the Itential Python SDK
130130
- **Description**: API to interact with the python pyproject.toml based projects
131131
- **PyPI**: https://pypi.org/project/pyproject-api/
132132

133-
**pathspec (0.12.1)**
133+
**pathspec (1.0.4)**
134134
- **License**: Mozilla Public License 2.0 (MPL 2.0)
135135
- **Description**: Utility library for gitignore style pattern matching of file paths
136136
- **PyPI**: https://pypi.org/project/pathspec/
@@ -145,7 +145,7 @@ This document lists all third-party dependencies used in the Itential Python SDK
145145
- **Description**: Brain-dead simple parsing of ini files
146146
- **PyPI**: https://pypi.org/project/iniconfig/
147147

148-
**tomli (2.3.0)**
148+
**tomli (2.4.0)**
149149
- **License**: MIT
150150
- **Description**: A lil' TOML parser for Python
151151
- **PyPI**: https://pypi.org/project/tomli/
@@ -155,7 +155,7 @@ This document lists all third-party dependencies used in the Itential Python SDK
155155
- **Description**: Backported and Experimental Type Hints for Python
156156
- **PyPI**: https://pypi.org/project/typing-extensions/
157157

158-
**cachetools (6.2.4)**
158+
**cachetools (7.0.1)**
159159
- **License**: MIT
160160
- **Description**: Extensible memoizing collections and decorators
161161
- **PyPI**: https://pypi.org/project/cachetools/
@@ -165,7 +165,7 @@ This document lists all third-party dependencies used in the Itential Python SDK
165165
- **Description**: Validate configuration and produce human readable error messages
166166
- **PyPI**: https://pypi.org/project/cfgv/
167167

168-
**identify (2.6.15)**
168+
**identify (2.6.16)**
169169
- **License**: MIT
170170
- **Description**: File identification library for Python
171171
- **PyPI**: https://pypi.org/project/identify/
@@ -190,12 +190,12 @@ This document lists all third-party dependencies used in the Itential Python SDK
190190
- **Description**: Backport of Python 3.11 asyncio.Runner for older Python versions
191191
- **PyPI**: https://pypi.org/project/backports.asyncio.runner/
192192

193-
**nodeenv (1.9.1)**
193+
**nodeenv (1.10.0)**
194194
- **License**: BSD License
195195
- **Description**: Node.js virtual environment builder
196196
- **PyPI**: https://pypi.org/project/nodeenv/
197197

198-
**virtualenv (20.35.4)**
198+
**virtualenv (20.39.0)**
199199
- **License**: MIT
200200
- **Description**: Virtual Python Environment builder
201201
- **PyPI**: https://pypi.org/project/virtualenv/
@@ -205,24 +205,24 @@ This document lists all third-party dependencies used in the Itential Python SDK
205205
- **Description**: Distribution utilities for Python
206206
- **PyPI**: https://pypi.org/project/distlib/
207207

208-
**filelock (3.20.1)**
208+
**filelock (3.24.3)**
209209
- **License**: The Unlicense (Unlicense)
210210
- **Description**: A platform independent file lock
211211
- **PyPI**: https://pypi.org/project/filelock/
212212

213-
**platformdirs (4.5.1)**
213+
**platformdirs (4.9.2)**
214214
- **License**: MIT
215215
- **Description**: A small Python module for determining appropriate platform-specific dirs
216216
- **PyPI**: https://pypi.org/project/platformdirs/
217217

218-
**librt (0.7.4)**
218+
**librt (0.8.1)**
219219
- **License**: MIT AND PSF-2.0
220220
- **Description**: Mypyc runtime library with C implementations of Python standard library classes
221221
- **PyPI**: https://pypi.org/project/librt/
222222

223223
### Bandit Dependencies
224224

225-
**rich (14.2.0)**
225+
**rich (14.3.3)**
226226
- **License**: MIT
227227
- **Description**: Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
228228
- **PyPI**: https://pypi.org/project/rich/
@@ -232,6 +232,11 @@ This document lists all third-party dependencies used in the Itential Python SDK
232232
- **Description**: Python port of markdown-it
233233
- **PyPI**: https://pypi.org/project/markdown-it-py/
234234

235+
**mdurl (0.1.2)**
236+
- **License**: MIT
237+
- **Description**: Markdown URL utilities
238+
- **PyPI**: https://pypi.org/project/mdurl/
239+
235240
**pygments (2.19.2)**
236241
- **License**: BSD License
237242
- **Description**: Pygments is a syntax highlighting package written in Python
@@ -242,7 +247,7 @@ This document lists all third-party dependencies used in the Itential Python SDK
242247
- **Description**: YAML parser and emitter for Python
243248
- **PyPI**: https://pypi.org/project/pyyaml/
244249

245-
**stevedore (5.6.0)**
250+
**stevedore (5.7.0)**
246251
- **License**: Apache License 2.0
247252
- **Description**: Manage dynamic plugins for Python applications
248253
- **PyPI**: https://pypi.org/project/stevedore/
@@ -296,7 +301,7 @@ We gratefully acknowledge the contributions of all open source projects that mak
296301

297302
## License Information Updates
298303

299-
This file was last updated on: 2025-12-22
304+
This file was last updated on: 2026-02-25
300305

301306
For the most current license information, please check the individual project pages linked above. License information is subject to change with new versions of dependencies.
302307

SECURITY.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ We provide security updates for the following versions:
66

77
| Version | Supported |
88
| ------- | ------------------ |
9+
| 0.8.x | :white_check_mark: |
910
| 0.7.x | :white_check_mark: |
10-
| 0.6.x | :white_check_mark: |
11-
| < 0.6 | :x: |
11+
| < 0.7 | :x: |
1212

1313
## Reporting a Vulnerability
1414

src/ipsdk/heuristics.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,20 +110,20 @@ def _init_default_patterns(self) -> None:
110110
r"(?i)\b(?:api[_-]?key|apikey)\s*[=:]\s*[\"']?"
111111
r"([a-zA-Z0-9_\-]{16,})[\"']?"
112112
),
113-
"bearer_token": r"(?i)\bbearer\s+([a-zA-Z0-9_\-\.]{20,})",
114-
"jwt_token": (
113+
"bearer_token": r"(?i)\bbearer\s+([a-zA-Z0-9_\-\.]{20,})", # nosec B105
114+
"jwt_token": ( # nosec B105
115115
r"\b(eyJ[a-zA-Z0-9_\-]+\.eyJ[a-zA-Z0-9_\-]+"
116116
r"\.[a-zA-Z0-9_\-]+)\b"
117117
),
118118
"access_token": (
119119
r"(?i)\b(?:access[_-]?token|accesstoken)\s*[=:]\s*[\"']?"
120120
r"([a-zA-Z0-9_\-]{20,})[\"']?"
121121
),
122-
"password": (
122+
"password": ( # nosec B105
123123
r"(?i)\b(?:password|passwd|pwd)\s*[=:]\s*[\"']?"
124124
r"([^\s\"']{6,})[\"']?"
125125
),
126-
"secret": (
126+
"secret": ( # nosec B105
127127
r"(?i)\b(?:secret|client_secret)\s*[=:]\s*[\"']?"
128128
r"([a-zA-Z0-9_\-]{16,})[\"']?"
129129
),

0 commit comments

Comments
 (0)