tha-wright-stuff 0.1.37__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/.github/workflows/bump-dep-floors.yml +25 -9
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/.github/workflows/dep-floors-check.yml +2 -2
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/.github/workflows/publish.yml +1 -1
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/CHANGELOG.md +10 -0
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/PKG-INFO +11 -11
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/README.md +2 -2
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/pyproject.toml +9 -9
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/.github/dependabot.yml +0 -0
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/.github/pull_request_template.md +0 -0
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/.github/workflows/auto-assign-pr.yml +0 -0
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/.github/workflows/check-yanked-floors.yml +0 -0
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/.github/workflows/ci.yml +0 -0
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/.github/workflows/dependabot-auto-merge.yml +0 -0
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/.gitignore +0 -0
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/.pre-commit-config.yaml +0 -0
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/LICENSE +0 -0
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/src/tha_wright_stuff/__init__.py +0 -0
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/src/tha_wright_stuff/py.typed +0 -0
- {tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/tests/test_imports.py +0 -0
|
@@ -28,14 +28,15 @@ jobs:
|
|
|
28
28
|
with open("pyproject.toml") as f:
|
|
29
29
|
content = f.read()
|
|
30
30
|
|
|
31
|
-
pattern = r'"(tha-[a-z-]+)(\[[a-
|
|
31
|
+
pattern = r'"(tha-[a-z-]+)(\[[a-z0-9, _-]+\])?==([\d]+\.[\d]+\.[\d]+)"'
|
|
32
32
|
deps = [(pkg, extra or "", floor) for pkg, extra, floor in re.findall(pattern, content)]
|
|
33
33
|
|
|
34
34
|
bumps = []
|
|
35
35
|
for pkg, extra, floor in deps:
|
|
36
36
|
try:
|
|
37
37
|
with urlopen(f"https://pypi.org/pypi/{pkg}/json", timeout=10) as r:
|
|
38
|
-
|
|
38
|
+
info = json.load(r)["info"]
|
|
39
|
+
latest = info["version"]
|
|
39
40
|
except Exception:
|
|
40
41
|
print(f" skipping {pkg} (PyPI lookup failed)")
|
|
41
42
|
continue
|
|
@@ -44,10 +45,25 @@ jobs:
|
|
|
44
45
|
latest_t = tuple(int(x) for x in latest.split("."))
|
|
45
46
|
|
|
46
47
|
if latest_t > floor_t:
|
|
48
|
+
if extra:
|
|
49
|
+
# `extra` is a bracket carried forward as literal text (e.g. "[httpx]") --
|
|
50
|
+
# this script has no way to know an extra was renamed upstream, so verify
|
|
51
|
+
# it still exists on the target version rather than silently bumping to a
|
|
52
|
+
# version/extra combo that doesn't resolve.
|
|
53
|
+
extra_names = [e.strip() for e in extra.strip("[]").split(",") if e.strip()]
|
|
54
|
+
provided = set(info.get("provides_extra") or [])
|
|
55
|
+
missing = [e for e in extra_names if e not in provided]
|
|
56
|
+
if missing:
|
|
57
|
+
print(
|
|
58
|
+
f" WARNING: {pkg}{extra}: extra(s) {missing} not found on "
|
|
59
|
+
f"{pkg} {latest} (available: {sorted(provided)}) -- "
|
|
60
|
+
f"SKIPPING auto-bump, needs a manual PR"
|
|
61
|
+
)
|
|
62
|
+
continue
|
|
47
63
|
bumps.append((pkg, extra, floor, latest))
|
|
48
|
-
print(f" {pkg}{extra}:
|
|
64
|
+
print(f" {pkg}{extra}: =={floor} -> =={latest}")
|
|
49
65
|
else:
|
|
50
|
-
print(f" {pkg}{extra}:
|
|
66
|
+
print(f" {pkg}{extra}: =={floor} ok (latest={latest})")
|
|
51
67
|
|
|
52
68
|
gho = os.environ["GITHUB_OUTPUT"]
|
|
53
69
|
if not bumps:
|
|
@@ -58,7 +74,7 @@ jobs:
|
|
|
58
74
|
|
|
59
75
|
new_content = content
|
|
60
76
|
for pkg, extra, old, new in bumps:
|
|
61
|
-
new_content = new_content.replace(f'"{pkg}{extra}
|
|
77
|
+
new_content = new_content.replace(f'"{pkg}{extra}=={old}"', f'"{pkg}{extra}=={new}"')
|
|
62
78
|
|
|
63
79
|
ver_m = re.search(r'^version = "(\d+)\.(\d+)\.(\d+)"', new_content, re.MULTILINE)
|
|
64
80
|
major, minor, patch = int(ver_m.group(1)), int(ver_m.group(2)), int(ver_m.group(3))
|
|
@@ -70,11 +86,11 @@ jobs:
|
|
|
70
86
|
f.write(new_content)
|
|
71
87
|
|
|
72
88
|
today = date.today().isoformat()
|
|
73
|
-
bumped_summary = ", ".join(f"{pkg}{extra}
|
|
89
|
+
bumped_summary = ", ".join(f"{pkg}{extra}=={new}" for pkg, extra, _, new in bumps)
|
|
74
90
|
changelog_entry = (
|
|
75
91
|
f"## [{new_ver}] - {today}\n"
|
|
76
92
|
f"### Changed\n"
|
|
77
|
-
f"- Bumped dep
|
|
93
|
+
f"- Bumped dep pins: {bumped_summary}.\n"
|
|
78
94
|
)
|
|
79
95
|
with open("CHANGELOG.md") as f:
|
|
80
96
|
cl = f.read()
|
|
@@ -82,9 +98,9 @@ jobs:
|
|
|
82
98
|
with open("CHANGELOG.md", "w") as f:
|
|
83
99
|
f.write(cl)
|
|
84
100
|
|
|
85
|
-
pr_lines = [f"- `{pkg}{extra}`:
|
|
101
|
+
pr_lines = [f"- `{pkg}{extra}`: `=={old}` -> `=={new}`" for pkg, extra, old, new in bumps]
|
|
86
102
|
pr_body = (
|
|
87
|
-
"## Dependency
|
|
103
|
+
"## Dependency Pin Bumps\n\n"
|
|
88
104
|
+ "\n".join(pr_lines)
|
|
89
105
|
+ f"\n\nVersion bumped `{old_ver}` -> `{new_ver}`."
|
|
90
106
|
)
|
|
@@ -20,7 +20,7 @@ jobs:
|
|
|
20
20
|
with open("pyproject.toml") as f:
|
|
21
21
|
content = f.read()
|
|
22
22
|
|
|
23
|
-
pattern = r'"(tha-[a-z-]+)(\[[a-
|
|
23
|
+
pattern = r'"(tha-[a-z-]+)(\[[a-z0-9, _-]+\])?==([\d]+\.[\d]+\.[\d]+)"'
|
|
24
24
|
deps = [(pkg, extra or "", floor) for pkg, extra, floor in re.findall(pattern, content)]
|
|
25
25
|
|
|
26
26
|
stale = []
|
|
@@ -32,7 +32,7 @@ jobs:
|
|
|
32
32
|
print(f" skipping {pkg}{extra}")
|
|
33
33
|
continue
|
|
34
34
|
if tuple(int(x) for x in latest.split(".")) > tuple(int(x) for x in floor.split(".")):
|
|
35
|
-
stale.append(f"{pkg}{extra} (
|
|
35
|
+
stale.append(f"{pkg}{extra} (=={floor}, latest {latest})")
|
|
36
36
|
print(f" stale: {stale[-1]}")
|
|
37
37
|
|
|
38
38
|
if not stale:
|
|
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.2.0] - 2026-09-25
|
|
11
|
+
### Changed
|
|
12
|
+
- Pinned all tha-* dependencies to exact versions (`==`) instead of minimum floors (`>=`). Installing `tha-wright-stuff` now yields one known-good, CI-tested set of family versions; installing a different version of a member lib alongside it will now conflict at resolve time.
|
|
13
|
+
- `bump-dep-floors.yml` and `dep-floors-check.yml` now match and rewrite `==` pins.
|
|
14
|
+
- Fixed both workflows' extras regex, which could not match extras containing digits (e.g. `[httpx2]`), so `tha-req-runner` was silently skipped by the bump and status checks.
|
|
15
|
+
|
|
16
|
+
## [0.1.38] - 2026-09-22
|
|
17
|
+
### Changed
|
|
18
|
+
- Bumped dep floors: tha-req-runner[httpx2]>=0.3.0 (renamed from the `httpx` extra — tha-req-runner 0.3.0 replaced the `httpx` backend with `httpx2`), tha-edfi-runner>=0.1.15, tha-google-runner>=0.3.0.
|
|
19
|
+
|
|
10
20
|
## [0.1.37] - 2026-09-08
|
|
11
21
|
### Changed
|
|
12
22
|
- Bumped dep floors: tha-edfi-runner>=0.1.14.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: tha-wright-stuff
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: A Tabular Helper meta-package that bundles the full tha-* library family in a single install.
|
|
5
5
|
Project-URL: Homepage, https://github.com/tha-guy-nate/tha-wright-stuff
|
|
6
6
|
Project-URL: Issues, https://github.com/tha-guy-nate/tha-wright-stuff/issues
|
|
@@ -21,14 +21,14 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
21
21
|
Classifier: Topic :: Utilities
|
|
22
22
|
Classifier: Typing :: Typed
|
|
23
23
|
Requires-Python: >=3.10
|
|
24
|
-
Requires-Dist: tha-aws-runner
|
|
25
|
-
Requires-Dist: tha-csv-runner
|
|
26
|
-
Requires-Dist: tha-edfi-runner
|
|
27
|
-
Requires-Dist: tha-google-runner
|
|
28
|
-
Requires-Dist: tha-map-runner
|
|
29
|
-
Requires-Dist: tha-req-runner[
|
|
30
|
-
Requires-Dist: tha-snowflake-runner
|
|
31
|
-
Requires-Dist: tha-utils-helper
|
|
24
|
+
Requires-Dist: tha-aws-runner==0.2.10
|
|
25
|
+
Requires-Dist: tha-csv-runner==0.4.2
|
|
26
|
+
Requires-Dist: tha-edfi-runner==0.1.15
|
|
27
|
+
Requires-Dist: tha-google-runner==0.3.0
|
|
28
|
+
Requires-Dist: tha-map-runner==0.3.1
|
|
29
|
+
Requires-Dist: tha-req-runner[httpx2]==0.3.0
|
|
30
|
+
Requires-Dist: tha-snowflake-runner==0.3.4
|
|
31
|
+
Requires-Dist: tha-utils-helper==0.2.6
|
|
32
32
|
Provides-Extra: dev
|
|
33
33
|
Requires-Dist: mypy>=2.1.0; extra == 'dev'
|
|
34
34
|
Requires-Dist: pip-audit>=2.10.1; extra == 'dev'
|
|
@@ -95,7 +95,7 @@ Every public class, function, and error type from all eight libraries is availab
|
|
|
95
95
|
|---|---|---|---|---|
|
|
96
96
|
| **tha-csv-runner** | [](https://pypi.org/project/tha-csv-runner/) | [](https://pypi.org/project/tha-csv-runner/#files) | [tha-csv-runner](https://github.com/tha-guy-nate/tha-csv-runner) | Read and write CSVs with progress bars, header validation, chunking, sort/filter, and an optional per-row validator callback. |
|
|
97
97
|
| **tha-map-runner** | [](https://pypi.org/project/tha-map-runner/) | [](https://pypi.org/project/tha-map-runner/#files) | [tha-map-runner](https://github.com/tha-guy-nate/tha-map-runner) | Enrich and join dicts using dotted-path projection and O(n+m) index-based lookups. Supports left / inner / anti joins and DynamoDB result shapes. |
|
|
98
|
-
| **tha-req-runner** | [](https://pypi.org/project/tha-req-runner/) | [](https://pypi.org/project/tha-req-runner/#files) | [tha-req-runner](https://github.com/tha-guy-nate/tha-req-runner) | Transport layer for API runners — session management, retries, `safe_call`, and a normalized `parse_response` dict. Supports both `requests` and `
|
|
98
|
+
| **tha-req-runner** | [](https://pypi.org/project/tha-req-runner/) | [](https://pypi.org/project/tha-req-runner/#files) | [tha-req-runner](https://github.com/tha-guy-nate/tha-req-runner) | Transport layer for API runners — session management, retries, `safe_call`, and a normalized `parse_response` dict. Supports both `requests` and `httpx2` backends. |
|
|
99
99
|
| **tha-aws-runner** | [](https://pypi.org/project/tha-aws-runner/) | [](https://pypi.org/project/tha-aws-runner/#files) | [tha-aws-runner](https://github.com/tha-guy-nate/tha-aws-runner) | DynamoDB (`ThaDdb`), GSI queries (`ThaGsi`), S3 (`ThaS3`), SSM Parameter Store (`ThaSSM`), a `DdbCostTracker` context manager that tallies RCU/WCU and USD cost per run, and standalone helpers (`cli_auth_check`, `current_identity`, `parse_arn`, `parse_assumed_role_arn`). |
|
|
100
100
|
| **tha-utils-helper** | [](https://pypi.org/project/tha-utils-helper/) | [](https://pypi.org/project/tha-utils-helper/#files) | [tha-utils-helper](https://github.com/tha-guy-nate/tha-utils-helper) | Zero-dependency utilities: `ThaStr` (slugify, format), `ThaNum` (currency, parens-as-negative, cast), `ThaDT` (auto-detect date formats), `ThaDict` (pick, omit, rename), `ThaList` (chunk, flatten), `ThaType` (bool/int/float coercion). All include matching `*_rows` batch methods. |
|
|
101
101
|
| **tha-edfi-runner** | [](https://pypi.org/project/tha-edfi-runner/) | [](https://pypi.org/project/tha-edfi-runner/#files) | [tha-edfi-runner](https://github.com/tha-guy-nate/tha-edfi-runner) | Ed-Fi ODS API client — OAuth client-credentials auth, pagination, and chunked parallel posting via `ThreadPoolExecutor`. |
|
|
@@ -108,7 +108,7 @@ Every public class, function, and error type from all eight libraries is availab
|
|
|
108
108
|
|
|
109
109
|
- Python 3.10+
|
|
110
110
|
|
|
111
|
-
All eight libraries are installed automatically as dependencies, including the `
|
|
111
|
+
All eight libraries are installed automatically as dependencies, including the `httpx2` transport backend for `tha-req-runner`.
|
|
112
112
|
|
|
113
113
|
---
|
|
114
114
|
|
|
@@ -56,7 +56,7 @@ Every public class, function, and error type from all eight libraries is availab
|
|
|
56
56
|
|---|---|---|---|---|
|
|
57
57
|
| **tha-csv-runner** | [](https://pypi.org/project/tha-csv-runner/) | [](https://pypi.org/project/tha-csv-runner/#files) | [tha-csv-runner](https://github.com/tha-guy-nate/tha-csv-runner) | Read and write CSVs with progress bars, header validation, chunking, sort/filter, and an optional per-row validator callback. |
|
|
58
58
|
| **tha-map-runner** | [](https://pypi.org/project/tha-map-runner/) | [](https://pypi.org/project/tha-map-runner/#files) | [tha-map-runner](https://github.com/tha-guy-nate/tha-map-runner) | Enrich and join dicts using dotted-path projection and O(n+m) index-based lookups. Supports left / inner / anti joins and DynamoDB result shapes. |
|
|
59
|
-
| **tha-req-runner** | [](https://pypi.org/project/tha-req-runner/) | [](https://pypi.org/project/tha-req-runner/#files) | [tha-req-runner](https://github.com/tha-guy-nate/tha-req-runner) | Transport layer for API runners — session management, retries, `safe_call`, and a normalized `parse_response` dict. Supports both `requests` and `
|
|
59
|
+
| **tha-req-runner** | [](https://pypi.org/project/tha-req-runner/) | [](https://pypi.org/project/tha-req-runner/#files) | [tha-req-runner](https://github.com/tha-guy-nate/tha-req-runner) | Transport layer for API runners — session management, retries, `safe_call`, and a normalized `parse_response` dict. Supports both `requests` and `httpx2` backends. |
|
|
60
60
|
| **tha-aws-runner** | [](https://pypi.org/project/tha-aws-runner/) | [](https://pypi.org/project/tha-aws-runner/#files) | [tha-aws-runner](https://github.com/tha-guy-nate/tha-aws-runner) | DynamoDB (`ThaDdb`), GSI queries (`ThaGsi`), S3 (`ThaS3`), SSM Parameter Store (`ThaSSM`), a `DdbCostTracker` context manager that tallies RCU/WCU and USD cost per run, and standalone helpers (`cli_auth_check`, `current_identity`, `parse_arn`, `parse_assumed_role_arn`). |
|
|
61
61
|
| **tha-utils-helper** | [](https://pypi.org/project/tha-utils-helper/) | [](https://pypi.org/project/tha-utils-helper/#files) | [tha-utils-helper](https://github.com/tha-guy-nate/tha-utils-helper) | Zero-dependency utilities: `ThaStr` (slugify, format), `ThaNum` (currency, parens-as-negative, cast), `ThaDT` (auto-detect date formats), `ThaDict` (pick, omit, rename), `ThaList` (chunk, flatten), `ThaType` (bool/int/float coercion). All include matching `*_rows` batch methods. |
|
|
62
62
|
| **tha-edfi-runner** | [](https://pypi.org/project/tha-edfi-runner/) | [](https://pypi.org/project/tha-edfi-runner/#files) | [tha-edfi-runner](https://github.com/tha-guy-nate/tha-edfi-runner) | Ed-Fi ODS API client — OAuth client-credentials auth, pagination, and chunked parallel posting via `ThreadPoolExecutor`. |
|
|
@@ -69,7 +69,7 @@ Every public class, function, and error type from all eight libraries is availab
|
|
|
69
69
|
|
|
70
70
|
- Python 3.10+
|
|
71
71
|
|
|
72
|
-
All eight libraries are installed automatically as dependencies, including the `
|
|
72
|
+
All eight libraries are installed automatically as dependencies, including the `httpx2` transport backend for `tha-req-runner`.
|
|
73
73
|
|
|
74
74
|
---
|
|
75
75
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tha-wright-stuff"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.2.0"
|
|
8
8
|
description = "A Tabular Helper meta-package that bundles the full tha-* library family in a single install."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -25,14 +25,14 @@ classifiers = [
|
|
|
25
25
|
]
|
|
26
26
|
keywords = ["tabular", "helper", "api", "csv", "aws", "edfi", "google", "snowflake", "utilities", "meta"]
|
|
27
27
|
dependencies = [
|
|
28
|
-
"tha-csv-runner
|
|
29
|
-
"tha-map-runner
|
|
30
|
-
"tha-req-runner[
|
|
31
|
-
"tha-aws-runner
|
|
32
|
-
"tha-utils-helper
|
|
33
|
-
"tha-edfi-runner
|
|
34
|
-
"tha-google-runner
|
|
35
|
-
"tha-snowflake-runner
|
|
28
|
+
"tha-csv-runner==0.4.2",
|
|
29
|
+
"tha-map-runner==0.3.1",
|
|
30
|
+
"tha-req-runner[httpx2]==0.3.0",
|
|
31
|
+
"tha-aws-runner==0.2.10",
|
|
32
|
+
"tha-utils-helper==0.2.6",
|
|
33
|
+
"tha-edfi-runner==0.1.15",
|
|
34
|
+
"tha-google-runner==0.3.0",
|
|
35
|
+
"tha-snowflake-runner==0.3.4",
|
|
36
36
|
]
|
|
37
37
|
|
|
38
38
|
[project.optional-dependencies]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/.github/workflows/check-yanked-floors.yml
RENAMED
|
File without changes
|
|
File without changes
|
{tha_wright_stuff-0.1.37 → tha_wright_stuff-0.2.0}/.github/workflows/dependabot-auto-merge.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|