log-foundry 0.8.1.dev11__tar.gz → 0.8.1.dev12__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 (53) hide show
  1. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/PKG-INFO +49 -7
  2. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/README.md +48 -6
  3. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/pyproject.toml +1 -1
  4. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/LICENSE +0 -0
  5. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/__init__.py +0 -0
  6. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/api.py +0 -0
  7. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/config.py +0 -0
  8. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/console.py +0 -0
  9. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/context.py +0 -0
  10. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/decorator.py +0 -0
  11. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/ids.py +0 -0
  12. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/model.py +0 -0
  13. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/py.typed +0 -0
  14. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sanitize.py +0 -0
  15. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/__init__.py +0 -0
  16. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/_batch.py +0 -0
  17. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/_chunk.py +0 -0
  18. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/_socket.py +0 -0
  19. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/_time.py +0 -0
  20. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/base.py +0 -0
  21. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/callback.py +0 -0
  22. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/clickhouse.py +0 -0
  23. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/datadog.py +0 -0
  24. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/elasticsearch.py +0 -0
  25. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/eventhubs.py +0 -0
  26. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/file.py +0 -0
  27. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/filtering.py +0 -0
  28. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/firehose.py +0 -0
  29. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/honeycomb.py +0 -0
  30. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/http.py +0 -0
  31. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/kafka.py +0 -0
  32. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/kinesis.py +0 -0
  33. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/logging_sink.py +0 -0
  34. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/logstash.py +0 -0
  35. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/loki.py +0 -0
  36. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/mongodb.py +0 -0
  37. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/multi.py +0 -0
  38. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/nats.py +0 -0
  39. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/newrelic.py +0 -0
  40. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/postgres.py +0 -0
  41. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/pubsub.py +0 -0
  42. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/rabbitmq.py +0 -0
  43. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/redis.py +0 -0
  44. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/sentry.py +0 -0
  45. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/sns.py +0 -0
  46. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/splunk.py +0 -0
  47. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/sqlite.py +0 -0
  48. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/sqs.py +0 -0
  49. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/stdout.py +0 -0
  50. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/syslog.py +0 -0
  51. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/transform.py +0 -0
  52. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/util.py +0 -0
  53. {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/worker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: log-foundry
3
- Version: 0.8.1.dev11
3
+ Version: 0.8.1.dev12
4
4
  Summary: Generate logs for your console and JSON events for downstream consumption.
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -798,15 +798,52 @@ poetry run ruff check . # lint (line-length 100)
798
798
  poetry run mypy # typecheck (strict, over src/)
799
799
  ```
800
800
 
801
- **CI** ([`.github/workflows/ci.yml`](.github/workflows/ci.yml)) runs ruff → mypy → pytest on
802
- every pull request and on push to `main`. A second workflow
803
- ([`spec-lint.yml`](.github/workflows/spec-lint.yml)) lints the design specs under `docs/specs/`.
804
-
805
801
  The library uses a src layout (`src/log_foundry/`) with a single concept per module: `config`,
806
802
  `ids`, `model`, `context`, `decorator`, `api`, `console`, `worker`, and the `sinks/` package (the
807
803
  `base` protocol, `stdout`, and one module per sink family — see [Sinks](#sinks)).
808
804
  Deeper design docs live in [`docs/`](docs/) — start with [`docs/architecture.md`](docs/architecture.md).
809
805
 
806
+ ### Continuous integration
807
+
808
+ Every pull request and every push to `main` runs the same set of checks:
809
+
810
+ | Check | Does | Fails the build |
811
+ |---|---|---|
812
+ | [`ci.yml`](.github/workflows/ci.yml) | ruff → mypy → pytest, on 3.12 **and** 3.13 | yes |
813
+ | [`spec-lint.yml`](.github/workflows/spec-lint.yml) | lints the design specs under `docs/specs/` | yes |
814
+ | [`dependency-review.yml`](.github/workflows/dependency-review.yml) | fails a PR that *introduces* a dependency with a known advisory (`moderate`+) | yes |
815
+ | [`zizmor.yml`](.github/workflows/zizmor.yml) | static analysis of the workflow files themselves | no — reports to code scanning |
816
+ | CodeQL | `python` + `actions`, `extended` query suite; also weekly | no — reports to code scanning |
817
+
818
+ CodeQL runs as GitHub's **default setup** — a repository setting, not a workflow file, which is
819
+ why there is no `codeql.yml` here (adding one would disable the default setup and silently stop
820
+ the uploads). The two scanners that don't fail a build report findings to code scanning
821
+ deliberately: the alert count is the verdict there, not the green check mark.
822
+
823
+ [`dependabot.yml`](.github/dependabot.yml) opens scheduled version updates for `pip` and
824
+ `github-actions` on top of the security updates GitHub raises against advisories. Both ecosystems
825
+ use a cooldown so a freshly published release isn't adopted within hours of appearing, and `pip`
826
+ uses `increase-if-necessary` so an update never narrows a floor this library publishes to its
827
+ consumers.
828
+
829
+ ## Security
830
+
831
+ Please report a vulnerability through GitHub's **private** reporting rather than a public issue:
832
+ [**open a draft advisory**](https://github.com/agriffi10/log-forge/security/advisories/new).
833
+ [`SECURITY.md`](SECURITY.md) covers what to include and what to expect — an acknowledgement
834
+ within 7 days, an assessment within 30. Fixes land on the latest released minor; there are no
835
+ long-term support branches.
836
+
837
+ Three properties of the supply chain are worth stating, since a logging library sits inside
838
+ everything it instruments:
839
+
840
+ - **Zero runtime dependencies in the core.** A default `pip install log-foundry` pulls in no
841
+ third-party code at all; every sink needing a client sits behind an extra you opt into.
842
+ - **Every action is pinned to a commit SHA**, Dependabot maintains the pins, and every workflow
843
+ declares least-privilege `permissions` instead of inheriting the repository default.
844
+ - **Releases publish over OIDC**, so no PyPI token is stored in the repository — see
845
+ [Releasing](#releasing).
846
+
810
847
  ## Releasing
811
848
 
812
849
  **The version is never hand-edited.** It is derived from Git tags at build time by
@@ -828,8 +865,8 @@ pip ignores pre-releases unless you pass `--pre`.
828
865
  Cutting a release is one tag:
829
866
 
830
867
  ```bash
831
- git tag -a v0.2.0 -m "log-foundry 0.2.0"
832
- git push origin v0.2.0
868
+ git tag -a v0.9.0 -m "log-foundry 0.9.0"
869
+ git push origin v0.9.0
833
870
  ```
834
871
 
835
872
  Uploads authenticate with PyPI [Trusted Publishing](https://docs.pypi.org/trusted-publishers/)
@@ -837,6 +874,11 @@ Uploads authenticate with PyPI [Trusted Publishing](https://docs.pypi.org/truste
837
874
  A tagged build refuses to publish if the derived version doesn't match the tag, and the tagged
838
875
  job deliberately omits `skip-existing` so re-pushing an already-published version fails loudly.
839
876
 
877
+ Every action on this path is pinned to a commit SHA, `pypa/gh-action-pypi-publish` included —
878
+ deliberately off the rolling `release/v1` branch PyPA recommends, because this is the job holding
879
+ `id-token: write` against PyPI and a mutable reference there reaches every consumer's
880
+ `pip install`. Dependabot moves the pins, so they stay maintained rather than frozen.
881
+
840
882
  ## License
841
883
 
842
884
  [MIT](LICENSE) © Andrew Griffith
@@ -762,15 +762,52 @@ poetry run ruff check . # lint (line-length 100)
762
762
  poetry run mypy # typecheck (strict, over src/)
763
763
  ```
764
764
 
765
- **CI** ([`.github/workflows/ci.yml`](.github/workflows/ci.yml)) runs ruff → mypy → pytest on
766
- every pull request and on push to `main`. A second workflow
767
- ([`spec-lint.yml`](.github/workflows/spec-lint.yml)) lints the design specs under `docs/specs/`.
768
-
769
765
  The library uses a src layout (`src/log_foundry/`) with a single concept per module: `config`,
770
766
  `ids`, `model`, `context`, `decorator`, `api`, `console`, `worker`, and the `sinks/` package (the
771
767
  `base` protocol, `stdout`, and one module per sink family — see [Sinks](#sinks)).
772
768
  Deeper design docs live in [`docs/`](docs/) — start with [`docs/architecture.md`](docs/architecture.md).
773
769
 
770
+ ### Continuous integration
771
+
772
+ Every pull request and every push to `main` runs the same set of checks:
773
+
774
+ | Check | Does | Fails the build |
775
+ |---|---|---|
776
+ | [`ci.yml`](.github/workflows/ci.yml) | ruff → mypy → pytest, on 3.12 **and** 3.13 | yes |
777
+ | [`spec-lint.yml`](.github/workflows/spec-lint.yml) | lints the design specs under `docs/specs/` | yes |
778
+ | [`dependency-review.yml`](.github/workflows/dependency-review.yml) | fails a PR that *introduces* a dependency with a known advisory (`moderate`+) | yes |
779
+ | [`zizmor.yml`](.github/workflows/zizmor.yml) | static analysis of the workflow files themselves | no — reports to code scanning |
780
+ | CodeQL | `python` + `actions`, `extended` query suite; also weekly | no — reports to code scanning |
781
+
782
+ CodeQL runs as GitHub's **default setup** — a repository setting, not a workflow file, which is
783
+ why there is no `codeql.yml` here (adding one would disable the default setup and silently stop
784
+ the uploads). The two scanners that don't fail a build report findings to code scanning
785
+ deliberately: the alert count is the verdict there, not the green check mark.
786
+
787
+ [`dependabot.yml`](.github/dependabot.yml) opens scheduled version updates for `pip` and
788
+ `github-actions` on top of the security updates GitHub raises against advisories. Both ecosystems
789
+ use a cooldown so a freshly published release isn't adopted within hours of appearing, and `pip`
790
+ uses `increase-if-necessary` so an update never narrows a floor this library publishes to its
791
+ consumers.
792
+
793
+ ## Security
794
+
795
+ Please report a vulnerability through GitHub's **private** reporting rather than a public issue:
796
+ [**open a draft advisory**](https://github.com/agriffi10/log-forge/security/advisories/new).
797
+ [`SECURITY.md`](SECURITY.md) covers what to include and what to expect — an acknowledgement
798
+ within 7 days, an assessment within 30. Fixes land on the latest released minor; there are no
799
+ long-term support branches.
800
+
801
+ Three properties of the supply chain are worth stating, since a logging library sits inside
802
+ everything it instruments:
803
+
804
+ - **Zero runtime dependencies in the core.** A default `pip install log-foundry` pulls in no
805
+ third-party code at all; every sink needing a client sits behind an extra you opt into.
806
+ - **Every action is pinned to a commit SHA**, Dependabot maintains the pins, and every workflow
807
+ declares least-privilege `permissions` instead of inheriting the repository default.
808
+ - **Releases publish over OIDC**, so no PyPI token is stored in the repository — see
809
+ [Releasing](#releasing).
810
+
774
811
  ## Releasing
775
812
 
776
813
  **The version is never hand-edited.** It is derived from Git tags at build time by
@@ -792,8 +829,8 @@ pip ignores pre-releases unless you pass `--pre`.
792
829
  Cutting a release is one tag:
793
830
 
794
831
  ```bash
795
- git tag -a v0.2.0 -m "log-foundry 0.2.0"
796
- git push origin v0.2.0
832
+ git tag -a v0.9.0 -m "log-foundry 0.9.0"
833
+ git push origin v0.9.0
797
834
  ```
798
835
 
799
836
  Uploads authenticate with PyPI [Trusted Publishing](https://docs.pypi.org/trusted-publishers/)
@@ -801,6 +838,11 @@ Uploads authenticate with PyPI [Trusted Publishing](https://docs.pypi.org/truste
801
838
  A tagged build refuses to publish if the derived version doesn't match the tag, and the tagged
802
839
  job deliberately omits `skip-existing` so re-pushing an already-published version fails loudly.
803
840
 
841
+ Every action on this path is pinned to a commit SHA, `pypa/gh-action-pypi-publish` included —
842
+ deliberately off the rolling `release/v1` branch PyPA recommends, because this is the job holding
843
+ `id-token: write` against PyPI and a mutable reference there reaches every consumer's
844
+ `pip install`. Dependabot moves the pins, so they stay maintained rather than frozen.
845
+
804
846
  ## License
805
847
 
806
848
  [MIT](LICENSE) © Andrew Griffith
@@ -20,7 +20,7 @@ dependencies = [
20
20
  ]
21
21
 
22
22
  # Optional features. Install with: pip install log-foundry[aws]
23
- version = "0.8.1.dev11"
23
+ version = "0.8.1.dev12"
24
24
 
25
25
  [project.optional-dependencies]
26
26
  aws = ["boto3>=1.43.61"] # SQSSink, SNSSink, KinesisSink, FirehoseSink