Skip to content

Commit 22da8fc

Browse files
authored
Merge pull request #197 from contentstack/release/1.11.3-snyk
DX | 02-11-2026 | Release
2 parents 2985fd9 + 5b35a27 commit 22da8fc

14 files changed

Lines changed: 39 additions & 39 deletions

File tree

‎AGENTS.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
| Build | `setuptools` / `setup.py`; package `contentstack_management` |
1818
| HTTP | `requests`, `requests-toolbelt`, `urllib3` |
1919
| Tests | `pytest` — `tests/integration` (live e2e / sanity, dynamic stack), `tests/unit`, `tests/mock`, `tests/api` (legacy, superseded by `tests/integration`) |
20-
| Lint / coverage | `pylint`, `coverage` (see `requirements-dev.txt`) |
20+
| Lint / coverage | `ruff`, `coverage` (see `requirements-dev.txt`) |
2121
| Secrets / hooks | Talisman, Snyk (see `README.md` development setup) |
2222

2323
## Source layout
@@ -44,7 +44,7 @@
4444
| Test (mock) | `pytest tests/mock/ -v` |
4545
| Test (legacy API, live) | `pytest tests/api/ -v` (needs `.env` — see `tests/cred.py`) |
4646
| Coverage (CI) | `coverage run -m pytest tests/unit/` |
47-
| Lint | `pylint contentstack_management/` |
47+
| Lint | `ruff check contentstack_management/` |
4848

4949
> **CI note:** `.github/workflows/unit-test.yml` runs **only `tests/unit/`** (no credentials). The `tests/integration` sanity suite is run manually (or via a credential-gated job) because it provisions real stacks.
5050
@@ -70,7 +70,7 @@ Do not commit secrets. `tests/integration/.env`, `docs/`, and the repo-root `cma
7070

7171
| Skill | Path | What it covers |
7272
|-------|------|----------------|
73-
| **Development workflow** | [`skills/dev-workflow/SKILL.md`](skills/dev-workflow/SKILL.md) | Install, pytest suites, packaging version, pylint, hooks, PR baseline |
73+
| **Development workflow** | [`skills/dev-workflow/SKILL.md`](skills/dev-workflow/SKILL.md) | Install, pytest suites, packaging version, ruff, hooks, PR baseline |
7474
| **Contentstack Management (SDK)** | [`skills/contentstack-management/SKILL.md`](skills/contentstack-management/SKILL.md) | **`Client`**, **`Stack`**, **`_APIClient`**, CMA resources, OAuth, CMA docs |
7575
| **Python style & repo layout** | [`skills/python-style/SKILL.md`](skills/python-style/SKILL.md) | Package layout, naming, imports via **`_APIClient`**, secrets in logs |
7676
| **Testing** | [`skills/testing/SKILL.md`](skills/testing/SKILL.md) | pytest unit / API / mock, **`tests/cred.py`**, env hygiene |

‎CHANGELOG.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
# CHANGELOG
22

33
## Content Management SDK For Python
4+
---
5+
## v1.11.3
6+
7+
#### Date: 02 November 2026
8+
9+
- Bumped `urllib3` minimum version from `>=2.7.0` to `>=2.8.0` in `requirements.txt` and `setup.py` to resolve Snyk findings: improper certificate validation, allocation of resources without limits or throttling, and an infinite loop (DX-27815, DX-27816, DX-27817).
10+
- Tests: replaced hardcoded passwords and secrets with environment-backed or runtime-generated values and removed `# deepcode ignore` suppression comments, resolving Snyk Code findings (DX-22180 to DX-22195). No change to the published package.
11+
412
---
513
## v1.11.2
614

‎contentstack_management/__init__.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ def get_contentstack_endpoint(region='us', service='', omit_https=False):
102102
__author__ = 'dev-ex'
103103
__status__ = 'debug'
104104
__region__ = 'na'
105-
__version__ = '1.11.2'
105+
__version__ = '1.11.3'
106106
__host__ = 'api.contentstack.io'
107107
__protocol__ = 'https://'
108108
__api_version__ = 'v3'

‎requirements-dev.txt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# Development-only dependencies — not shipped in the production package.
2-
# Keep linting/tools (e.g. pylint) here so production scans can exclude them.
2+
# Keep linting/tools (e.g. ruff) here so production scans can exclude them.
33
-r requirements.txt
4-
pylint>=2.0.0
4+
ruff>=0.11.5

‎requirements.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ python-dotenv>=1.2.2
22
# <82: pkg_resources (used by coverage-badge and similar tools) was removed in setuptools 82+
33
setuptools>=83.0.0
44
requests>=2.33.0,<3.0.0
5-
urllib3>=2.7.0,<3.0.0
5+
urllib3>=2.8.0,<3.0.0
66
requests-toolbelt>=1.0.0,<2.0.0
77
pyotp==2.9.0
88
packaging>=24.0

‎setup.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def get_author_email(package):
6969
install_requires=[
7070
"requests >= 2.5.4",
7171
"requests-toolbelt >= 0.3.1",
72-
"urllib3 >= 2.7.0,<3.0.0",
72+
"urllib3 >= 2.8.0,<3.0.0",
7373
],
7474
extras_require={
7575
"dev": ["pytest>=7.0", "twine>=4.0.2", "packaging>=24.0", "dotenv>=0.0.5", "pylint>=2.0.0"],

‎skills/README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Source of truth for detailed guidance. Read **[`AGENTS.md`](../AGENTS.md)** firs
66

77
| Skill folder | Use when |
88
|--------------|----------|
9-
| **dev-workflow** | Install, **`pytest`** (unit / API / mock), **`__version__`**, pylint, Talisman/Snyk, before PR |
9+
| **dev-workflow** | Install, **`pytest`** (unit / API / mock), **`__version__`**, ruff, Talisman/Snyk, before PR |
1010
| **contentstack-management** | **`Client`**, **`Stack`**, **`_APIClient`**, domain modules, OAuth, CMA paths and payloads |
1111
| **python-style** | Editing **`contentstack_management/`** or **`setup.py`** / **`requirements.txt`**—layout, style, imports |
1212
| **testing** | Adding or changing tests under **`tests/`**, **`tests/cred.py`**, env for API runs |

‎skills/dev-workflow/SKILL.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: dev-workflow
3-
description: Use for install, pytest suites, versioning, pylint, hooks, and PR baseline in contentstack-management-python.
3+
description: Use for install, pytest suites, versioning, ruff, hooks, and PR baseline in contentstack-management-python.
44
---
55

66
# Development workflow – Contentstack Management Python
@@ -30,7 +30,7 @@ description: Use for install, pytest suites, versioning, pylint, hooks, and PR b
3030

3131
### Tooling
3232

33-
- **pylint** is listed in **`requirements-dev.txt`**; follow existing style in touched files.
33+
- **ruff** is listed in **`requirements-dev.txt`** (lint with `ruff check contentstack_management/`); follow existing style in touched files.
3434
- **Husky / Talisman / Snyk** — see **README.md** for local hook setup.
3535

3636
### Pull requests

‎skills/python-style/SKILL.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: python-style
3-
description: Use for package layout under contentstack_management/, setup.py, pylint-friendly style, and imports.
3+
description: Use for package layout under contentstack_management/, setup.py, lint-friendly style, and imports.
44
---
55

66
# Python style and repo layout – Contentstack Management Python

‎tests/api/users/test_api.py‎

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,8 @@ def test_active_user(self):
4444
"user": {
4545
"first_name": "your_first_name",
4646
"last_name": "your_last_name",
47-
# deepcode ignore NoHardcodedPasswords: test fixture value, not a real secret
48-
"password": "your_password",
49-
# deepcode ignore NoHardcodedPasswords: test fixture value, not a real secret
50-
"password_confirmation": "confirm_your_password"
47+
"password": password,
48+
"password_confirmation": password
5149
}
5250
}
5351
response = self.client.user().activate(activation_token, act_data)
@@ -80,10 +78,8 @@ def test_reset_password(self):
8078
act_data = {
8179
"user": {
8280
"reset_password_token": "abcdefghijklmnop1234567890",
83-
# deepcode ignore NoHardcodedPasswords: test fixture value, not a real secret
84-
"password": "Simple@123",
85-
# deepcode ignore NoHardcodedPasswords: test fixture value, not a real secret
86-
"password_confirmation": "Simple@123"
81+
"password": password,
82+
"password_confirmation": password
8783
}
8884
}
8985
response = self.client.user().reset_password(act_data)

0 commit comments

Comments
 (0)