log-foundry 0.10.2.dev89__tar.gz → 0.10.2.dev90__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.10.2.dev89 → log_foundry-0.10.2.dev90}/PKG-INFO +3 -2
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/README.md +2 -1
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/pyproject.toml +38 -3
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/LICENSE +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/__init__.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/_diag.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/_fork.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/_lifecycle.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/api.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/config.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/console.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/context.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/decorator.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/ids.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/model.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/py.typed +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/results.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sanitize.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/__init__.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/_batch.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/_chunk.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/_retry.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/_socket.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/_time.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/base.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/callback.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/clickhouse.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/datadog.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/elasticsearch.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/eventhubs.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/file.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/filtering.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/firehose.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/honeycomb.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/http.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/kafka.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/kinesis.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/logging_sink.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/logstash.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/loki.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/memory.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/mongodb.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/multi.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/nats.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/newrelic.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/null.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/postgres.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/pubsub.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/rabbitmq.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/redis.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/sentry.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/sns.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/splunk.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/sqlite.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/sqs.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/stdout.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/syslog.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/transform.py +0 -0
- {log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/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.10.2.
|
|
3
|
+
Version: 0.10.2.dev90
|
|
4
4
|
Summary: Generate logs for your console and JSON events for downstream consumption.
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -1296,7 +1296,8 @@ bound each *value* — an event of many bounded values can still be large; see
|
|
|
1296
1296
|
|
|
1297
1297
|
```bash
|
|
1298
1298
|
poetry install --with dev # set up (Python 3.12+)
|
|
1299
|
-
poetry run pytest # test
|
|
1299
|
+
poetry run pytest # test (runs in parallel by default; see addopts)
|
|
1300
|
+
poetry run pytest -n 0 # ...serially, when debugging a failure
|
|
1300
1301
|
poetry run ruff check . # lint (line-length 100)
|
|
1301
1302
|
poetry run mypy # typecheck (strict, over src/)
|
|
1302
1303
|
```
|
|
@@ -1260,7 +1260,8 @@ bound each *value* — an event of many bounded values can still be large; see
|
|
|
1260
1260
|
|
|
1261
1261
|
```bash
|
|
1262
1262
|
poetry install --with dev # set up (Python 3.12+)
|
|
1263
|
-
poetry run pytest # test
|
|
1263
|
+
poetry run pytest # test (runs in parallel by default; see addopts)
|
|
1264
|
+
poetry run pytest -n 0 # ...serially, when debugging a failure
|
|
1264
1265
|
poetry run ruff check . # lint (line-length 100)
|
|
1265
1266
|
poetry run mypy # typecheck (strict, over src/)
|
|
1266
1267
|
```
|
|
@@ -20,7 +20,7 @@ dependencies = [
|
|
|
20
20
|
]
|
|
21
21
|
|
|
22
22
|
# Optional features. Install with: pip install log-foundry[aws]
|
|
23
|
-
version = "0.10.2.
|
|
23
|
+
version = "0.10.2.dev90"
|
|
24
24
|
|
|
25
25
|
[project.optional-dependencies]
|
|
26
26
|
aws = ["boto3>=1.43.61"] # SQSSink, SNSSink, KinesisSink, FirehoseSink
|
|
@@ -67,7 +67,7 @@ pytest-cov = "^7.1.0"
|
|
|
67
67
|
# CPU, because the bounds this library promises (a 30 s shutdown budget, a backoff, a
|
|
68
68
|
# wedged drain) are proved by waiting for them. Two tests block 30 s each. Distributing
|
|
69
69
|
# across processes therefore buys almost the whole wall clock back — measured 125.9 s ->
|
|
70
|
-
#
|
|
70
|
+
# 34.8 s at `-n 12 --dist worksteal` — where caching the dependency install could only ever
|
|
71
71
|
# save the 18 s that install takes.
|
|
72
72
|
pytest-xdist = "^3.8"
|
|
73
73
|
# Bounded to a minor, not left open. Ruff's DEFAULT rule set is not stable across minors —
|
|
@@ -114,7 +114,42 @@ build-backend = "poetry_dynamic_versioning.backend"
|
|
|
114
114
|
testpaths = ["tests"]
|
|
115
115
|
pythonpath = ["src"] # src layout: make `import log_foundry` work without an install
|
|
116
116
|
asyncio_mode = "auto" # async test functions run without an explicit marker
|
|
117
|
-
|
|
117
|
+
# `-n 12 --dist worksteal` lives HERE rather than in the CI workflow, so the gate a developer runs
|
|
118
|
+
# before pushing is the same command CI runs, at the same speed: ~133 s -> ~35 s locally, and the
|
|
119
|
+
# pre-push gate is where those 98 s are actually paid for by a human waiting. It also removes a
|
|
120
|
+
# divergence — with the flags only in CI, an order-dependent failure could appear there and be
|
|
121
|
+
# unreproducible with a bare `poetry run pytest`.
|
|
122
|
+
#
|
|
123
|
+
# The suite is sleep-bound, not CPU-bound (~133 s of wall clock at well under 10% CPU), because
|
|
124
|
+
# this library's promises ARE bounds and a bound is proved by waiting for it; two tests in
|
|
125
|
+
# test_orphan_sink_handoff.py block 30 s each. That is why the count is a fixed 12 rather than
|
|
126
|
+
# `auto`: workers here are overwhelmingly blocked rather than computing, so `auto` — the CPU
|
|
127
|
+
# count, which is 4 on a GitHub runner — leaves most of the win on the table.
|
|
128
|
+
#
|
|
129
|
+
# `--dist worksteal`, NOT `--dist load`, and this was learned the expensive way. `load` hands each
|
|
130
|
+
# worker a fixed slice up front, so the allocation is a deterministic function of the test list —
|
|
131
|
+
# and when SPEC-047 added a handful of NATS tests, both 30 s tests landed in the SAME slice and
|
|
132
|
+
# the parallel run went from 40.8 s to 71.4 s (three runs, spread 0.1 s: not luck, and it would
|
|
133
|
+
# have stayed green in CI while quietly costing 30 s a run). `worksteal` lets an idle worker take
|
|
134
|
+
# work from a busy one, which is exactly the long-tail shape here. Measured on the same tree,
|
|
135
|
+
# 1,899 passed / 7 skipped every time:
|
|
136
|
+
#
|
|
137
|
+
# serial 133.4 s -n 8 --dist worksteal 40.0 s
|
|
138
|
+
# -n 8 --dist load 71.4 s -n 12 --dist worksteal 34.8 s <- chosen
|
|
139
|
+
# -n 12 --dist load 38.4 s -n 16 --dist worksteal 34.1 s (knee)
|
|
140
|
+
#
|
|
141
|
+
# `loadfile` is worse than either: it keeps a module on one worker, pinning those two 30 s tests
|
|
142
|
+
# to one process and flooring the run at ~72 s — measured at both -n 8 and -n 12, though not at
|
|
143
|
+
# every worker count, since `-n 1 --dist loadfile` is 125.4 s.
|
|
144
|
+
#
|
|
145
|
+
# TO OVERRIDE, PASS `-n 0` — it disables distribution entirely (verified: no workers are created)
|
|
146
|
+
# and is the right flag for debugging a failure, for `--pdb`, or for reading interleaved output.
|
|
147
|
+
# `tests/integration` is run that way in CI for a stronger reason than convenience: those tests
|
|
148
|
+
# share nine real services, so distributing them would have them reading each other's writes.
|
|
149
|
+
# That one is ENFORCED, not merely configured -- `tests/integration/conftest.py` refuses a
|
|
150
|
+
# distributed session, so deleting `-n 0` from the workflow fails loudly instead of producing the
|
|
151
|
+
# intermittent cross-talk it used to.
|
|
152
|
+
addopts = "--strict-markers -n 12 --dist worksteal"
|
|
118
153
|
|
|
119
154
|
[tool.ruff]
|
|
120
155
|
src = ["src", "tests"]
|
|
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
|
{log_foundry-0.10.2.dev89 → log_foundry-0.10.2.dev90}/src/log_foundry/sinks/elasticsearch.py
RENAMED
|
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
|