log-foundry 0.8.1.dev10__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.dev10/README.md → log_foundry-0.8.1.dev12/PKG-INFO +85 -6
  2. log_foundry-0.8.1.dev10/PKG-INFO → log_foundry-0.8.1.dev12/README.md +48 -43
  3. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/pyproject.toml +4 -4
  4. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/LICENSE +0 -0
  5. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/__init__.py +0 -0
  6. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/api.py +0 -0
  7. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/config.py +0 -0
  8. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/console.py +0 -0
  9. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/context.py +0 -0
  10. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/decorator.py +0 -0
  11. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/ids.py +0 -0
  12. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/model.py +0 -0
  13. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/py.typed +0 -0
  14. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sanitize.py +0 -0
  15. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/__init__.py +0 -0
  16. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/_batch.py +0 -0
  17. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/_chunk.py +0 -0
  18. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/_socket.py +0 -0
  19. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/_time.py +0 -0
  20. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/base.py +0 -0
  21. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/callback.py +0 -0
  22. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/clickhouse.py +0 -0
  23. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/datadog.py +0 -0
  24. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/elasticsearch.py +0 -0
  25. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/eventhubs.py +0 -0
  26. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/file.py +0 -0
  27. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/filtering.py +0 -0
  28. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/firehose.py +0 -0
  29. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/honeycomb.py +0 -0
  30. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/http.py +0 -0
  31. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/kafka.py +0 -0
  32. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/kinesis.py +0 -0
  33. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/logging_sink.py +0 -0
  34. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/logstash.py +0 -0
  35. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/loki.py +0 -0
  36. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/mongodb.py +0 -0
  37. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/multi.py +0 -0
  38. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/nats.py +0 -0
  39. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/newrelic.py +0 -0
  40. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/postgres.py +0 -0
  41. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/pubsub.py +0 -0
  42. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/rabbitmq.py +0 -0
  43. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/redis.py +0 -0
  44. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/sentry.py +0 -0
  45. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/sns.py +0 -0
  46. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/splunk.py +0 -0
  47. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/sqlite.py +0 -0
  48. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/sqs.py +0 -0
  49. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/stdout.py +0 -0
  50. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/syslog.py +0 -0
  51. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/transform.py +0 -0
  52. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/util.py +0 -0
  53. {log_foundry-0.8.1.dev10 → log_foundry-0.8.1.dev12}/src/log_foundry/worker.py +0 -0
@@ -1,3 +1,39 @@
1
+ Metadata-Version: 2.4
2
+ Name: log-foundry
3
+ Version: 0.8.1.dev12
4
+ Summary: Generate logs for your console and JSON events for downstream consumption.
5
+ License-Expression: MIT
6
+ License-File: LICENSE
7
+ Author: Andrew Griffith
8
+ Requires-Python: >=3.12
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Programming Language :: Python :: 3.12
11
+ Classifier: Programming Language :: Python :: 3.13
12
+ Classifier: Programming Language :: Python :: 3.14
13
+ Provides-Extra: amqp
14
+ Provides-Extra: aws
15
+ Provides-Extra: azure-eventhubs
16
+ Provides-Extra: clickhouse
17
+ Provides-Extra: gcp-pubsub
18
+ Provides-Extra: kafka
19
+ Provides-Extra: mongo
20
+ Provides-Extra: nats
21
+ Provides-Extra: postgres
22
+ Provides-Extra: redis
23
+ Provides-Extra: sentry
24
+ Requires-Dist: azure-eventhub (>=5.11) ; extra == "azure-eventhubs"
25
+ Requires-Dist: boto3 (>=1.43.61) ; extra == "aws"
26
+ Requires-Dist: clickhouse-connect (>=0.7) ; (python_version < "3.15") and (extra == "clickhouse")
27
+ Requires-Dist: confluent-kafka (>=2.0) ; extra == "kafka"
28
+ Requires-Dist: google-cloud-pubsub (>=2.18) ; extra == "gcp-pubsub"
29
+ Requires-Dist: nats-py (>=2.6) ; extra == "nats"
30
+ Requires-Dist: pika (>=1.4.2) ; extra == "amqp"
31
+ Requires-Dist: psycopg[binary] (>=3.1) ; extra == "postgres"
32
+ Requires-Dist: pymongo (>=4.6) ; extra == "mongo"
33
+ Requires-Dist: redis (>=5.0) ; extra == "redis"
34
+ Requires-Dist: sentry-sdk (>=2.66.1) ; extra == "sentry"
35
+ Description-Content-Type: text/markdown
36
+
1
37
  # Log Foundry
2
38
 
3
39
  Consistent, structured (JSON) logs for every decorated function call — correlated by shared
@@ -762,15 +798,52 @@ poetry run ruff check . # lint (line-length 100)
762
798
  poetry run mypy # typecheck (strict, over src/)
763
799
  ```
764
800
 
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
801
  The library uses a src layout (`src/log_foundry/`) with a single concept per module: `config`,
770
802
  `ids`, `model`, `context`, `decorator`, `api`, `console`, `worker`, and the `sinks/` package (the
771
803
  `base` protocol, `stdout`, and one module per sink family — see [Sinks](#sinks)).
772
804
  Deeper design docs live in [`docs/`](docs/) — start with [`docs/architecture.md`](docs/architecture.md).
773
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
+
774
847
  ## Releasing
775
848
 
776
849
  **The version is never hand-edited.** It is derived from Git tags at build time by
@@ -792,8 +865,8 @@ pip ignores pre-releases unless you pass `--pre`.
792
865
  Cutting a release is one tag:
793
866
 
794
867
  ```bash
795
- git tag -a v0.2.0 -m "log-foundry 0.2.0"
796
- 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
797
870
  ```
798
871
 
799
872
  Uploads authenticate with PyPI [Trusted Publishing](https://docs.pypi.org/trusted-publishers/)
@@ -801,6 +874,12 @@ Uploads authenticate with PyPI [Trusted Publishing](https://docs.pypi.org/truste
801
874
  A tagged build refuses to publish if the derived version doesn't match the tag, and the tagged
802
875
  job deliberately omits `skip-existing` so re-pushing an already-published version fails loudly.
803
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
+
804
882
  ## License
805
883
 
806
884
  [MIT](LICENSE) © Andrew Griffith
885
+
@@ -1,39 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: log-foundry
3
- Version: 0.8.1.dev10
4
- Summary: Generate logs for your console and JSON events for downstream consumption.
5
- License-Expression: MIT
6
- License-File: LICENSE
7
- Author: Andrew Griffith
8
- Requires-Python: >=3.12
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: Programming Language :: Python :: 3.12
11
- Classifier: Programming Language :: Python :: 3.13
12
- Classifier: Programming Language :: Python :: 3.14
13
- Provides-Extra: amqp
14
- Provides-Extra: aws
15
- Provides-Extra: azure-eventhubs
16
- Provides-Extra: clickhouse
17
- Provides-Extra: gcp-pubsub
18
- Provides-Extra: kafka
19
- Provides-Extra: mongo
20
- Provides-Extra: nats
21
- Provides-Extra: postgres
22
- Provides-Extra: redis
23
- Provides-Extra: sentry
24
- Requires-Dist: azure-eventhub (>=5.11) ; extra == "azure-eventhubs"
25
- Requires-Dist: boto3 (>=1.34) ; extra == "aws"
26
- Requires-Dist: clickhouse-connect (>=0.7) ; (python_version < "3.15") and (extra == "clickhouse")
27
- Requires-Dist: confluent-kafka (>=2.0) ; extra == "kafka"
28
- Requires-Dist: google-cloud-pubsub (>=2.18) ; extra == "gcp-pubsub"
29
- Requires-Dist: nats-py (>=2.6) ; extra == "nats"
30
- Requires-Dist: pika (>=1.3) ; extra == "amqp"
31
- Requires-Dist: psycopg[binary] (>=3.1) ; extra == "postgres"
32
- Requires-Dist: pymongo (>=4.6) ; extra == "mongo"
33
- Requires-Dist: redis (>=5.0) ; extra == "redis"
34
- Requires-Dist: sentry-sdk (>=2.0) ; extra == "sentry"
35
- Description-Content-Type: text/markdown
36
-
37
1
  # Log Foundry
38
2
 
39
3
  Consistent, structured (JSON) logs for every decorated function call — correlated by shared
@@ -798,15 +762,52 @@ poetry run ruff check . # lint (line-length 100)
798
762
  poetry run mypy # typecheck (strict, over src/)
799
763
  ```
800
764
 
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
765
  The library uses a src layout (`src/log_foundry/`) with a single concept per module: `config`,
806
766
  `ids`, `model`, `context`, `decorator`, `api`, `console`, `worker`, and the `sinks/` package (the
807
767
  `base` protocol, `stdout`, and one module per sink family — see [Sinks](#sinks)).
808
768
  Deeper design docs live in [`docs/`](docs/) — start with [`docs/architecture.md`](docs/architecture.md).
809
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
+
810
811
  ## Releasing
811
812
 
812
813
  **The version is never hand-edited.** It is derived from Git tags at build time by
@@ -828,8 +829,8 @@ pip ignores pre-releases unless you pass `--pre`.
828
829
  Cutting a release is one tag:
829
830
 
830
831
  ```bash
831
- git tag -a v0.2.0 -m "log-foundry 0.2.0"
832
- 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
833
834
  ```
834
835
 
835
836
  Uploads authenticate with PyPI [Trusted Publishing](https://docs.pypi.org/trusted-publishers/)
@@ -837,7 +838,11 @@ Uploads authenticate with PyPI [Trusted Publishing](https://docs.pypi.org/truste
837
838
  A tagged build refuses to publish if the derived version doesn't match the tag, and the tagged
838
839
  job deliberately omits `skip-existing` so re-pushing an already-published version fails loudly.
839
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
+
840
846
  ## License
841
847
 
842
848
  [MIT](LICENSE) © Andrew Griffith
843
-
@@ -20,14 +20,14 @@ dependencies = [
20
20
  ]
21
21
 
22
22
  # Optional features. Install with: pip install log-foundry[aws]
23
- version = "0.8.1.dev10"
23
+ version = "0.8.1.dev12"
24
24
 
25
25
  [project.optional-dependencies]
26
- aws = ["boto3>=1.34"] # SQSSink, SNSSink, KinesisSink, FirehoseSink
27
- sentry = ["sentry-sdk>=2.0"]
26
+ aws = ["boto3>=1.43.61"] # SQSSink, SNSSink, KinesisSink, FirehoseSink
27
+ sentry = ["sentry-sdk>=2.66.1"]
28
28
  kafka = ["confluent-kafka>=2.0"]
29
29
  redis = ["redis>=5.0"]
30
- amqp = ["pika>=1.3"]
30
+ amqp = ["pika>=1.4.2"]
31
31
  nats = ["nats-py>=2.6"]
32
32
  gcp-pubsub = ["google-cloud-pubsub>=2.18"]
33
33
  azure-eventhubs = ["azure-eventhub>=5.11"]