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.
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/PKG-INFO +49 -7
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/README.md +48 -6
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/pyproject.toml +1 -1
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/LICENSE +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/__init__.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/api.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/config.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/console.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/context.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/decorator.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/ids.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/model.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/py.typed +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sanitize.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/__init__.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/_batch.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/_chunk.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/_socket.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/_time.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/base.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/callback.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/clickhouse.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/datadog.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/elasticsearch.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/eventhubs.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/file.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/filtering.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/firehose.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/honeycomb.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/http.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/kafka.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/kinesis.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/logging_sink.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/logstash.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/loki.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/mongodb.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/multi.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/nats.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/newrelic.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/postgres.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/pubsub.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/rabbitmq.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/redis.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/sentry.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/sns.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/splunk.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/sqlite.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/sqs.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/stdout.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/syslog.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/transform.py +0 -0
- {log_foundry-0.8.1.dev11 → log_foundry-0.8.1.dev12}/src/log_foundry/sinks/util.py +0 -0
- {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.
|
|
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.
|
|
832
|
-
git push origin v0.
|
|
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.
|
|
796
|
-
git push origin v0.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|