tha-wright-stuff 0.1.38__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.
Files changed (19) hide show
  1. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/.github/workflows/bump-dep-floors.yml +25 -9
  2. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/.github/workflows/dep-floors-check.yml +2 -2
  3. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/CHANGELOG.md +6 -0
  4. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/PKG-INFO +9 -9
  5. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/pyproject.toml +9 -9
  6. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/.github/dependabot.yml +0 -0
  7. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/.github/pull_request_template.md +0 -0
  8. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/.github/workflows/auto-assign-pr.yml +0 -0
  9. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/.github/workflows/check-yanked-floors.yml +0 -0
  10. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/.github/workflows/ci.yml +0 -0
  11. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/.github/workflows/dependabot-auto-merge.yml +0 -0
  12. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/.github/workflows/publish.yml +0 -0
  13. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/.gitignore +0 -0
  14. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/.pre-commit-config.yaml +0 -0
  15. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/LICENSE +0 -0
  16. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/README.md +0 -0
  17. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/src/tha_wright_stuff/__init__.py +0 -0
  18. {tha_wright_stuff-0.1.38 → tha_wright_stuff-0.2.0}/src/tha_wright_stuff/py.typed +0 -0
  19. {tha_wright_stuff-0.1.38 → 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-z, ]+\])?>=([\d]+\.[\d]+\.[\d]+)"'
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
- latest = json.load(r)["info"]["version"]
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}: >={floor} -> >={latest}")
64
+ print(f" {pkg}{extra}: =={floor} -> =={latest}")
49
65
  else:
50
- print(f" {pkg}{extra}: >={floor} ok (latest={latest})")
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}>={old}"', f'"{pkg}{extra}>={new}"')
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}>={new}" for pkg, extra, _, new in bumps)
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 floors: {bumped_summary}.\n"
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}`: `>={old}` -> `>={new}`" for pkg, extra, old, new in bumps]
101
+ pr_lines = [f"- `{pkg}{extra}`: `=={old}` -> `=={new}`" for pkg, extra, old, new in bumps]
86
102
  pr_body = (
87
- "## Dependency Floor Bumps\n\n"
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-z, ]+\])?>=([\d]+\.[\d]+\.[\d]+)"'
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} (>={floor}, latest {latest})")
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,12 @@ 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
+
10
16
  ## [0.1.38] - 2026-09-22
11
17
  ### Changed
12
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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: tha-wright-stuff
3
- Version: 0.1.38
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>=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
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'
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "tha-wright-stuff"
7
- version = "0.1.38"
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>=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",
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]