nui-python-shared-utils 2.4.2__tar.gz → 2.5.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 (104) hide show
  1. nui_python_shared_utils-2.5.0/.github/workflows/lambda-validation.yml +71 -0
  2. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/AGENTS.md +9 -0
  3. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/MANIFEST.in +2 -0
  4. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/PKG-INFO +3 -1
  5. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/README.md +2 -0
  6. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_python_shared_utils.egg-info/SOURCES.txt +1 -0
  7. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/.editorconfig +0 -0
  8. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/.github/workflows/ci.yml +0 -0
  9. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/.github/workflows/publish.yml +0 -0
  10. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/.github/workflows/test.yml +0 -0
  11. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/.markdownlint-base.yaml +0 -0
  12. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/.markdownlint-cli2.yaml +0 -0
  13. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/CHANGELOG.md +0 -0
  14. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/CLAUDE.md +0 -0
  15. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/CONTRIBUTING.md +0 -0
  16. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/LICENSE +0 -0
  17. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/README.md +0 -0
  18. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/decisions/ADR-001-structured-logging-field-vocabulary.md +0 -0
  19. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/decisions/ADR-002-keep-shared-utilities-generic.md +0 -0
  20. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/decisions/ADR-003-lazy-load-integrations.md +0 -0
  21. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/decisions/ADR-004-credential-resolution-precedence.md +0 -0
  22. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/decisions/ADR-005-explicit-secrets-manager-region.md +0 -0
  23. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/decisions/ADR-006-snowflake-sql-api-client.md +0 -0
  24. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/decisions/ADR-007-elasticsearch-client-version-range.md +0 -0
  25. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/decisions/ADR-008-stdlib-zoneinfo-over-pytz.md +0 -0
  26. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/decisions/README.md +0 -0
  27. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/development/testing.md +0 -0
  28. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/getting-started/configuration.md +0 -0
  29. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/getting-started/installation.md +0 -0
  30. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/getting-started/quickstart.md +0 -0
  31. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/guides/cli-tools.md +0 -0
  32. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/guides/elasticsearch-integration.md +0 -0
  33. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/guides/jwt-authentication.md +0 -0
  34. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/guides/lambda-utilities.md +0 -0
  35. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/guides/llm-integration.md +0 -0
  36. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/guides/log-processing.md +0 -0
  37. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/guides/powertools-integration.md +0 -0
  38. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/guides/shared-types.md +0 -0
  39. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/guides/slack-integration.md +0 -0
  40. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/guides/snowflake-integration.md +0 -0
  41. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/docs/guides/structured-logging-contract.md +0 -0
  42. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/mypy.ini +0 -0
  43. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/__init__.py +0 -0
  44. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/base_client.py +0 -0
  45. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/cli.py +0 -0
  46. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/cloudwatch_metrics.py +0 -0
  47. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/config.py +0 -0
  48. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/db_client.py +0 -0
  49. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/error_handler.py +0 -0
  50. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/es_client.py +0 -0
  51. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/es_query_builder.py +0 -0
  52. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/jwt_auth.py +0 -0
  53. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/lambda_helpers.py +0 -0
  54. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/llm.py +0 -0
  55. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/log_processors.py +0 -0
  56. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/logging/__init__.py +0 -0
  57. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/logging/binding.py +0 -0
  58. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/logging/fields.py +0 -0
  59. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/logging/redaction.py +0 -0
  60. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/powertools_helpers.py +0 -0
  61. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/secrets_helper.py +0 -0
  62. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/slack_client.py +0 -0
  63. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/slack_formatter.py +0 -0
  64. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/slack_setup/__init__.py +0 -0
  65. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/slack_setup/channel_creator.py +0 -0
  66. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/slack_setup/channel_definitions.py +0 -0
  67. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/slack_setup/setup_helpers.py +0 -0
  68. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/snowflake_client.py +0 -0
  69. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/timezone.py +0 -0
  70. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/nui_shared_utils/utils.py +0 -0
  71. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/pyproject.toml +0 -0
  72. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/pytest.ini +0 -0
  73. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/redirect/README.md +0 -0
  74. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/redirect/pyproject.toml +0 -0
  75. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/redirect/setup.py +0 -0
  76. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/requirements-test.txt +0 -0
  77. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/scripts/bench_imports.py +0 -0
  78. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/setup.cfg +0 -0
  79. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/setup.py +0 -0
  80. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/__init__.py +0 -0
  81. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_aws_utils.py +0 -0
  82. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_base_client.py +0 -0
  83. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_cloudwatch_metrics.py +0 -0
  84. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_config.py +0 -0
  85. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_db_client.py +0 -0
  86. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_error_handler.py +0 -0
  87. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_es_client.py +0 -0
  88. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_es_client_compat.py +0 -0
  89. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_es_query_builder.py +0 -0
  90. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_jwt_auth.py +0 -0
  91. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_lambda_helpers.py +0 -0
  92. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_lazy_imports.py +0 -0
  93. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_llm.py +0 -0
  94. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_log_processors.py +0 -0
  95. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_logging_binding.py +0 -0
  96. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_logging_fields.py +0 -0
  97. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_powertools_helpers.py +0 -0
  98. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_redaction.py +0 -0
  99. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_secrets_helper.py +0 -0
  100. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_slack_client.py +0 -0
  101. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_slack_formatter.py +0 -0
  102. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_snowflake_client.py +0 -0
  103. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_timezone.py +0 -0
  104. {nui_python_shared_utils-2.4.2 → nui_python_shared_utils-2.5.0}/tests/test_utils.py +0 -0
@@ -0,0 +1,71 @@
1
+ name: Lambda validation tool
2
+
3
+ # tools/lambda-validation is a separately versioned build-time package. Its consumers
4
+ # pin it by commit, so every change runs its own suite, including the container checks.
5
+ on:
6
+ push:
7
+ branches: [master]
8
+ pull_request:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ tool:
15
+ runs-on: ubuntu-latest
16
+ timeout-minutes: 20
17
+ strategy:
18
+ matrix:
19
+ python-version: ['3.11', '3.12', '3.13', '3.14']
20
+ defaults:
21
+ run:
22
+ working-directory: tools/lambda-validation
23
+ steps:
24
+ - uses: actions/checkout@v5
25
+ with:
26
+ persist-credentials: false
27
+ - uses: actions/setup-python@v6
28
+ with:
29
+ python-version: ${{ matrix.python-version }}
30
+ - name: Install the tool and its test runner
31
+ run: |
32
+ python -m venv "$RUNNER_TEMP/lv"
33
+ "$RUNNER_TEMP/lv/bin/pip" install . pytest==8.4.2
34
+ - name: Lint the tool
35
+ run: |
36
+ python -m venv "$RUNNER_TEMP/lint"
37
+ "$RUNNER_TEMP/lint/bin/pip" install ruff==0.16.6 black==24.10.0
38
+ "$RUNNER_TEMP/lint/bin/ruff" check --select F,E9,B .
39
+ "$RUNNER_TEMP/lint/bin/black" -l 120 --check .
40
+ - name: Pull the Lambda runtime images the container tests use
41
+ run: |
42
+ for version in 3.11 3.12 3.13 3.14; do
43
+ docker pull --platform linux/amd64 "public.ecr.aws/lambda/python:$version"
44
+ done
45
+ - name: Tool tests, zero skips
46
+ run: |
47
+ "$RUNNER_TEMP/lv/bin/python" -m pytest -p no:cacheprovider -c /dev/null --rootdir . \
48
+ --junitxml="$RUNNER_TEMP/tool.xml" tests
49
+ "$RUNNER_TEMP/lv/bin/python" -c 'import os, xml.etree.ElementTree as ET; r = ET.parse(os.environ["RUNNER_TEMP"] + "/tool.xml").getroot(); assert sum(int(s.get("skipped", 0)) for s in r.iter("testsuite")) == 0'
50
+
51
+ root-distribution:
52
+ # The root nui-python-shared-utils wheel must never carry the tool.
53
+ runs-on: ubuntu-latest
54
+ timeout-minutes: 10
55
+ steps:
56
+ - uses: actions/checkout@v5
57
+ with:
58
+ persist-credentials: false
59
+ fetch-depth: 0
60
+ - uses: actions/setup-python@v6
61
+ with:
62
+ python-version: '3.12'
63
+ - run: python -m pip install build
64
+ - run: python -m build --outdir "$RUNNER_TEMP/dist" .
65
+ - name: No tool members in the root wheel or sdist
66
+ # `set -e` ignores a `!`-negated command, so each test exits explicitly.
67
+ run: |
68
+ if unzip -Z1 "$RUNNER_TEMP"/dist/*.whl | grep -E '(^|/)(tools/|nui_lambda_validation)'; then exit 1; fi
69
+ if tar -tzf "$RUNNER_TEMP"/dist/*.tar.gz | grep -E '/tools/'; then exit 1; fi
70
+ unzip -Z1 "$RUNNER_TEMP"/dist/*.whl | grep '^nui_shared_utils/__init__.py$' >/dev/null
71
+ tar -tzf "$RUNNER_TEMP"/dist/*.tar.gz | grep '/nui_shared_utils/__init__.py$' >/dev/null # no -q: an early exit would SIGPIPE the lister under pipefail
@@ -65,6 +65,15 @@ The `slack_setup/` submodule provides automated Slack workspace configuration:
65
65
  - **CLI Tool** - `slack-channel-setup` command for automation
66
66
  - **Generic Design** - Adaptable for any Slack workspace, not NUI-specific
67
67
 
68
+ ### Build-time tools (`tools/`)
69
+
70
+ `tools/lambda-validation/` is a separate distribution, `nui-lambda-validation`, with its own
71
+ `pyproject.toml`, tests and workflow (`.github/workflows/lambda-validation.yml`). It must not
72
+ import or depend on `nui_shared_utils`, and `MANIFEST.in` prunes `tools/` so it never ships in
73
+ this package. The root `pytest` run does not collect its tests; run them from the tool
74
+ directory as its README describes. Consumers pin it by full commit SHA, so a change there is a
75
+ new release for every repository that bumps its pin.
76
+
68
77
  ## Design Principles
69
78
 
70
79
  ### Keeping the Package Generic
@@ -7,6 +7,8 @@ recursive-include nui_shared_utils *.py
7
7
  recursive-include nui_shared_utils/slack_setup *.yaml
8
8
 
9
9
  # Exclude development and build files
10
+ # tools/ holds separately versioned build-time packages, never part of this distribution
11
+ prune tools
10
12
  exclude .gitignore
11
13
  exclude .github
12
14
  recursive-exclude * __pycache__
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nui-python-shared-utils
3
- Version: 2.4.2
3
+ Version: 2.5.0
4
4
  Summary: Shared Python utilities for AWS Lambda, CLI tools, and agents with Slack, Elasticsearch, and monitoring integrations
5
5
  Home-page: https://github.com/nuimarkets/nui-python-shared-utils
6
6
  Author: NUI Markets
@@ -152,6 +152,8 @@ Production-ready shared Python utilities for AWS Lambda functions, CLI tools, an
152
152
 
153
153
  **Complete documentation**: See [docs/](docs/README.md) for all guides and references.
154
154
 
155
+ **Build-time Lambda artifact checks** live in a separate package, `nui-lambda-validation`, pinned by commit and never shipped in this distribution or in a Lambda ZIP: [tools/lambda-validation/README.md](tools/lambda-validation/README.md).
156
+
155
157
  **Component Guides:**
156
158
 
157
159
  - **[AWS Powertools Integration Guide](docs/guides/powertools-integration.md)** - Logging, metrics, error handling
@@ -52,6 +52,8 @@ Production-ready shared Python utilities for AWS Lambda functions, CLI tools, an
52
52
 
53
53
  **Complete documentation**: See [docs/](docs/README.md) for all guides and references.
54
54
 
55
+ **Build-time Lambda artifact checks** live in a separate package, `nui-lambda-validation`, pinned by commit and never shipped in this distribution or in a Lambda ZIP: [tools/lambda-validation/README.md](tools/lambda-validation/README.md).
56
+
55
57
  **Component Guides:**
56
58
 
57
59
  - **[AWS Powertools Integration Guide](docs/guides/powertools-integration.md)** - Logging, metrics, error handling
@@ -14,6 +14,7 @@ pytest.ini
14
14
  requirements-test.txt
15
15
  setup.py
16
16
  .github/workflows/ci.yml
17
+ .github/workflows/lambda-validation.yml
17
18
  .github/workflows/publish.yml
18
19
  .github/workflows/test.yml
19
20
  docs/README.md