provide-foundation 0.0.0.dev0__py3-none-any.whl

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 (149) hide show
  1. provide/__init__.py +15 -0
  2. provide/foundation/__init__.py +155 -0
  3. provide/foundation/_version.py +58 -0
  4. provide/foundation/cli/__init__.py +67 -0
  5. provide/foundation/cli/commands/__init__.py +3 -0
  6. provide/foundation/cli/commands/deps.py +71 -0
  7. provide/foundation/cli/commands/logs/__init__.py +63 -0
  8. provide/foundation/cli/commands/logs/generate.py +357 -0
  9. provide/foundation/cli/commands/logs/generate_old.py +569 -0
  10. provide/foundation/cli/commands/logs/query.py +174 -0
  11. provide/foundation/cli/commands/logs/send.py +166 -0
  12. provide/foundation/cli/commands/logs/tail.py +112 -0
  13. provide/foundation/cli/decorators.py +262 -0
  14. provide/foundation/cli/main.py +65 -0
  15. provide/foundation/cli/testing.py +220 -0
  16. provide/foundation/cli/utils.py +210 -0
  17. provide/foundation/config/__init__.py +106 -0
  18. provide/foundation/config/base.py +295 -0
  19. provide/foundation/config/env.py +369 -0
  20. provide/foundation/config/loader.py +311 -0
  21. provide/foundation/config/manager.py +387 -0
  22. provide/foundation/config/schema.py +284 -0
  23. provide/foundation/config/sync.py +281 -0
  24. provide/foundation/config/types.py +78 -0
  25. provide/foundation/config/validators.py +80 -0
  26. provide/foundation/console/__init__.py +29 -0
  27. provide/foundation/console/input.py +364 -0
  28. provide/foundation/console/output.py +178 -0
  29. provide/foundation/context/__init__.py +12 -0
  30. provide/foundation/context/core.py +356 -0
  31. provide/foundation/core.py +20 -0
  32. provide/foundation/crypto/__init__.py +182 -0
  33. provide/foundation/crypto/algorithms.py +111 -0
  34. provide/foundation/crypto/certificates.py +896 -0
  35. provide/foundation/crypto/checksums.py +301 -0
  36. provide/foundation/crypto/constants.py +57 -0
  37. provide/foundation/crypto/hashing.py +265 -0
  38. provide/foundation/crypto/keys.py +188 -0
  39. provide/foundation/crypto/signatures.py +144 -0
  40. provide/foundation/crypto/utils.py +164 -0
  41. provide/foundation/errors/__init__.py +96 -0
  42. provide/foundation/errors/auth.py +73 -0
  43. provide/foundation/errors/base.py +81 -0
  44. provide/foundation/errors/config.py +103 -0
  45. provide/foundation/errors/context.py +299 -0
  46. provide/foundation/errors/decorators.py +484 -0
  47. provide/foundation/errors/handlers.py +360 -0
  48. provide/foundation/errors/integration.py +105 -0
  49. provide/foundation/errors/platform.py +37 -0
  50. provide/foundation/errors/process.py +140 -0
  51. provide/foundation/errors/resources.py +133 -0
  52. provide/foundation/errors/runtime.py +160 -0
  53. provide/foundation/errors/safe_decorators.py +133 -0
  54. provide/foundation/errors/types.py +276 -0
  55. provide/foundation/file/__init__.py +79 -0
  56. provide/foundation/file/atomic.py +157 -0
  57. provide/foundation/file/directory.py +134 -0
  58. provide/foundation/file/formats.py +236 -0
  59. provide/foundation/file/lock.py +175 -0
  60. provide/foundation/file/safe.py +179 -0
  61. provide/foundation/file/utils.py +170 -0
  62. provide/foundation/hub/__init__.py +88 -0
  63. provide/foundation/hub/click_builder.py +310 -0
  64. provide/foundation/hub/commands.py +42 -0
  65. provide/foundation/hub/components.py +640 -0
  66. provide/foundation/hub/decorators.py +244 -0
  67. provide/foundation/hub/info.py +32 -0
  68. provide/foundation/hub/manager.py +446 -0
  69. provide/foundation/hub/registry.py +279 -0
  70. provide/foundation/hub/type_mapping.py +54 -0
  71. provide/foundation/hub/types.py +28 -0
  72. provide/foundation/logger/__init__.py +41 -0
  73. provide/foundation/logger/base.py +22 -0
  74. provide/foundation/logger/config/__init__.py +16 -0
  75. provide/foundation/logger/config/base.py +40 -0
  76. provide/foundation/logger/config/logging.py +394 -0
  77. provide/foundation/logger/config/telemetry.py +188 -0
  78. provide/foundation/logger/core.py +239 -0
  79. provide/foundation/logger/custom_processors.py +172 -0
  80. provide/foundation/logger/emoji/__init__.py +44 -0
  81. provide/foundation/logger/emoji/matrix.py +209 -0
  82. provide/foundation/logger/emoji/sets.py +458 -0
  83. provide/foundation/logger/emoji/types.py +56 -0
  84. provide/foundation/logger/factories.py +56 -0
  85. provide/foundation/logger/processors/__init__.py +13 -0
  86. provide/foundation/logger/processors/main.py +254 -0
  87. provide/foundation/logger/processors/trace.py +113 -0
  88. provide/foundation/logger/ratelimit/__init__.py +31 -0
  89. provide/foundation/logger/ratelimit/limiters.py +294 -0
  90. provide/foundation/logger/ratelimit/processor.py +203 -0
  91. provide/foundation/logger/ratelimit/queue_limiter.py +305 -0
  92. provide/foundation/logger/setup/__init__.py +29 -0
  93. provide/foundation/logger/setup/coordinator.py +138 -0
  94. provide/foundation/logger/setup/emoji_resolver.py +64 -0
  95. provide/foundation/logger/setup/processors.py +85 -0
  96. provide/foundation/logger/setup/testing.py +39 -0
  97. provide/foundation/logger/trace.py +38 -0
  98. provide/foundation/metrics/__init__.py +119 -0
  99. provide/foundation/metrics/otel.py +122 -0
  100. provide/foundation/metrics/simple.py +165 -0
  101. provide/foundation/observability/__init__.py +53 -0
  102. provide/foundation/observability/openobserve/__init__.py +79 -0
  103. provide/foundation/observability/openobserve/auth.py +72 -0
  104. provide/foundation/observability/openobserve/client.py +307 -0
  105. provide/foundation/observability/openobserve/commands.py +357 -0
  106. provide/foundation/observability/openobserve/exceptions.py +41 -0
  107. provide/foundation/observability/openobserve/formatters.py +298 -0
  108. provide/foundation/observability/openobserve/models.py +134 -0
  109. provide/foundation/observability/openobserve/otlp.py +320 -0
  110. provide/foundation/observability/openobserve/search.py +222 -0
  111. provide/foundation/observability/openobserve/streaming.py +235 -0
  112. provide/foundation/platform/__init__.py +44 -0
  113. provide/foundation/platform/detection.py +193 -0
  114. provide/foundation/platform/info.py +157 -0
  115. provide/foundation/process/__init__.py +39 -0
  116. provide/foundation/process/async_runner.py +373 -0
  117. provide/foundation/process/lifecycle.py +406 -0
  118. provide/foundation/process/runner.py +390 -0
  119. provide/foundation/setup/__init__.py +101 -0
  120. provide/foundation/streams/__init__.py +44 -0
  121. provide/foundation/streams/console.py +57 -0
  122. provide/foundation/streams/core.py +65 -0
  123. provide/foundation/streams/file.py +104 -0
  124. provide/foundation/testing/__init__.py +166 -0
  125. provide/foundation/testing/cli.py +227 -0
  126. provide/foundation/testing/crypto.py +163 -0
  127. provide/foundation/testing/fixtures.py +49 -0
  128. provide/foundation/testing/hub.py +23 -0
  129. provide/foundation/testing/logger.py +106 -0
  130. provide/foundation/testing/streams.py +54 -0
  131. provide/foundation/tracer/__init__.py +49 -0
  132. provide/foundation/tracer/context.py +115 -0
  133. provide/foundation/tracer/otel.py +135 -0
  134. provide/foundation/tracer/spans.py +174 -0
  135. provide/foundation/types.py +32 -0
  136. provide/foundation/utils/__init__.py +97 -0
  137. provide/foundation/utils/deps.py +195 -0
  138. provide/foundation/utils/env.py +491 -0
  139. provide/foundation/utils/formatting.py +483 -0
  140. provide/foundation/utils/parsing.py +235 -0
  141. provide/foundation/utils/rate_limiting.py +112 -0
  142. provide/foundation/utils/streams.py +67 -0
  143. provide/foundation/utils/timing.py +93 -0
  144. provide_foundation-0.0.0.dev0.dist-info/METADATA +469 -0
  145. provide_foundation-0.0.0.dev0.dist-info/RECORD +149 -0
  146. provide_foundation-0.0.0.dev0.dist-info/WHEEL +5 -0
  147. provide_foundation-0.0.0.dev0.dist-info/entry_points.txt +2 -0
  148. provide_foundation-0.0.0.dev0.dist-info/licenses/LICENSE +201 -0
  149. provide_foundation-0.0.0.dev0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,469 @@
1
+ Metadata-Version: 2.4
2
+ Name: provide-foundation
3
+ Version: 0.0.0.dev0
4
+ Summary: Foundation Telemetry: An opinionated, developer-friendly telemetry wrapper for Python.
5
+ Author-email: Tim Perkins <code@tim.life>
6
+ Maintainer-email: "provide.io" <code@provide.io>
7
+ License: Apache-2.0
8
+ Keywords: telemetry,logging,tracing,python,pyvider
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: License :: OSI Approved :: Apache Software License
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Python :: 3.14
17
+ Classifier: Topic :: System :: Logging
18
+ Classifier: Topic :: System :: Monitoring
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Classifier: Typing :: Typed
21
+ Requires-Python: >=3.11
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: aiofiles>=23.2.1
25
+ Requires-Dist: attrs>=23.1.0
26
+ Requires-Dist: structlog>=25.3.0
27
+ Requires-Dist: tomli_w>=1.0.0
28
+ Provides-Extra: cli
29
+ Requires-Dist: click>=8.1.7; extra == "cli"
30
+ Provides-Extra: crypto
31
+ Requires-Dist: cryptography>=45.0.7; extra == "crypto"
32
+ Provides-Extra: opentelemetry
33
+ Requires-Dist: opentelemetry-api>=1.22.0; extra == "opentelemetry"
34
+ Requires-Dist: opentelemetry-sdk>=1.22.0; extra == "opentelemetry"
35
+ Requires-Dist: opentelemetry-exporter-otlp-proto-grpc>=1.22.0; extra == "opentelemetry"
36
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.22.0; extra == "opentelemetry"
37
+ Provides-Extra: all
38
+ Requires-Dist: provide-foundation[cli,crypto,opentelemetry]; extra == "all"
39
+ Dynamic: license-file
40
+
41
+ # provide.foundation
42
+
43
+ **A Comprehensive Python Foundation Library for Modern Applications**
44
+
45
+ <p align="center">
46
+ <a href="https://pypi.org/project/provide-foundation/">
47
+ <img alt="PyPI" src="https://img.shields.io/pypi/v/provide-foundation.svg">
48
+ </a>
49
+ <a href="https://github.com/provide-io/provide-foundation/actions/workflows/ci.yml">
50
+ <img alt="CI Status" src="https://github.com/provide-io/provide-foundation/actions/workflows/ci.yml/badge.svg">
51
+ </a>
52
+ <a href="https://codecov.io/gh/provide-io/provide-foundation">
53
+ <img src="https://codecov.io/gh/provide-io/provide-foundation/branch/main/graph/badge.svg"/>
54
+ </a>
55
+ <a href="https://github.com/provide-io/provide-foundation/blob/main/LICENSE">
56
+ <img alt="License" src="https://img.shields.io/github/license/provide-io/provide-foundation.svg">
57
+ </a>
58
+ </p>
59
+
60
+ ---
61
+
62
+ **provide.foundation** is a comprehensive foundation library for Python applications, offering structured logging, CLI utilities, configuration management, error handling, and essential application building blocks. Built with modern Python practices, it provides the core infrastructure that production applications need.
63
+
64
+ ---
65
+
66
+ ## Installation
67
+
68
+ ```bash
69
+ # Using uv (recommended)
70
+ uv pip install provide-foundation
71
+
72
+ # Using pip
73
+ pip install provide-foundation
74
+ ```
75
+
76
+ ### Optional Dependencies
77
+
78
+ provide.foundation has optional feature sets that require additional dependencies:
79
+
80
+ | Feature | Install Command | Required For |
81
+ |---------|----------------|--------------|
82
+ | **Basic logging** | `pip install provide-foundation` | Core logging functionality |
83
+ | **CLI framework** | `pip install provide-foundation[cli]` | Command-line interface features |
84
+ | **Cryptography** | `pip install provide-foundation[crypto]` | Hash functions, digital signatures, certificates |
85
+ | **OpenTelemetry** | `pip install provide-foundation[opentelemetry]` | Distributed tracing and metrics |
86
+ | **All features** | `pip install provide-foundation[all]` | Everything above |
87
+
88
+ > **Quick Start Tip**: For immediate use with just logging, install the base package. Add extras as needed.
89
+
90
+ ---
91
+
92
+ ## What's Included
93
+
94
+ ### Core Components
95
+
96
+ #### **Structured Logging**
97
+ Beautiful, performant logging built on `structlog` with emoji-enhanced visual parsing and zero configuration required.
98
+
99
+ ```python
100
+ # Simple usage - works immediately with base install
101
+ from provide.foundation import logger
102
+
103
+ logger.info("Application started", version="1.0.0")
104
+ logger.error("Database connection failed", host="db.example.com", retry_count=3)
105
+
106
+ # Full setup with tracing/metrics (requires [opentelemetry] extra)
107
+ from provide.foundation import setup_telemetry
108
+ setup_telemetry() # Configures logging + optional tracing/metrics
109
+ ```
110
+
111
+ #### **CLI Framework**
112
+ Build command-line interfaces with automatic help generation and component registration.
113
+
114
+ > **Requires**: `pip install provide-foundation[cli]`
115
+
116
+ ```python
117
+ # From examples/12_cli_application.py
118
+ from provide.foundation.hub import register_command
119
+ from provide.foundation.cli import echo_success
120
+
121
+ @register_command("init", category="project")
122
+ def init_command(name: str = "myproject", template: str = "default"):
123
+ """Initialize a new project."""
124
+ echo_success(f"Initializing project '{name}' with template '{template}'")
125
+ ```
126
+
127
+ #### **Configuration Management**
128
+ Flexible configuration system supporting environment variables, files, and runtime updates.
129
+
130
+ ```python
131
+ # From examples/11_config_management.py
132
+ from provide.foundation.config import BaseConfig, ConfigManager, field
133
+ from attrs import define
134
+
135
+ @define
136
+ class AppConfig(BaseConfig):
137
+ app_name: str = field(default="my-app", description="Application name")
138
+ port: int = field(default=8080, description="Server port")
139
+ debug: bool = field(default=False, description="Debug mode")
140
+
141
+ manager = ConfigManager()
142
+ manager.register("app", config=AppConfig())
143
+ config = manager.get("app")
144
+ ```
145
+
146
+ #### **Error Handling**
147
+ Comprehensive error handling with retry logic and error boundaries.
148
+
149
+ ```python
150
+ # From examples/05_exception_handling.py
151
+ from provide.foundation import logger, with_error_handling
152
+
153
+ @with_error_handling
154
+ def risky_operation():
155
+ """Operation that might fail."""
156
+ result = perform_calculation()
157
+ logger.info("operation_succeeded", result=result)
158
+ return result
159
+ ```
160
+
161
+ #### **Cryptographic Utilities**
162
+ Comprehensive cryptographic operations with modern algorithms and secure defaults.
163
+
164
+ > **Requires**: `pip install provide-foundation[crypto]`
165
+
166
+ ```python
167
+ from provide.foundation.crypto import hash_file, create_self_signed, sign_data
168
+
169
+ # File hashing and verification
170
+ hash_result = hash_file("document.pdf", algorithm="sha256")
171
+
172
+ # Digital signatures
173
+ signature = sign_data(data, private_key, algorithm="ed25519")
174
+
175
+ # Certificate generation
176
+ cert, key = create_self_signed("example.com", key_size=2048)
177
+ ```
178
+
179
+ #### **File Operations**
180
+ Atomic file operations with format support and safety guarantees.
181
+
182
+ ```python
183
+ from provide.foundation.file import atomic_write, read_json, safe_copy
184
+
185
+ # Atomic file operations
186
+ atomic_write("config.json", {"key": "value"})
187
+ data = read_json("config.json")
188
+
189
+ # Safe file operations
190
+ safe_copy("source.txt", "backup.txt")
191
+ ```
192
+
193
+ #### **Console I/O**
194
+ Enhanced console input/output with color support, JSON mode, and interactive prompts.
195
+
196
+ ```python
197
+ from provide.foundation import pin, pout, perr
198
+
199
+ # Colored output
200
+ pout("Success!", color="green")
201
+ perr("Error occurred", color="red")
202
+
203
+ # Interactive input
204
+ name = pin("What's your name?")
205
+ password = pin("Enter password:", password=True)
206
+
207
+ # JSON mode for scripts
208
+ pout({"status": "ok", "data": results}, json=True)
209
+ ```
210
+
211
+ #### **Platform Utilities**
212
+ Cross-platform detection and system information gathering.
213
+
214
+ ```python
215
+ from provide.foundation import platform
216
+
217
+ # Platform detection
218
+ if platform.is_linux():
219
+ logger.info("Running on Linux")
220
+
221
+ system_info = platform.get_system_info()
222
+ logger.info("System info", **system_info.to_dict())
223
+ ```
224
+
225
+ #### **Process Execution**
226
+ Safe subprocess execution with streaming and async support.
227
+
228
+ ```python
229
+ from provide.foundation import process
230
+
231
+ # Synchronous execution
232
+ result = process.run_command(["git", "status"])
233
+ if result.returncode == 0:
234
+ logger.info("Git status", output=result.stdout)
235
+
236
+ # Streaming output
237
+ for line in process.stream_command(["tail", "-f", "app.log"]):
238
+ logger.info("Log line", line=line)
239
+ ```
240
+
241
+ #### **Registry Pattern**
242
+ Flexible registry system for managing components and commands.
243
+
244
+ ```python
245
+ # From examples/12_cli_application.py
246
+ from provide.foundation.hub import Hub
247
+
248
+ class DatabaseResource:
249
+ def __init__(self, name: str) -> None:
250
+ self.name = name
251
+ self.connected = False
252
+
253
+ def __enter__(self):
254
+ """Initialize database connection."""
255
+ self.connected = True
256
+ return self
257
+
258
+ hub = Hub()
259
+ hub.add_component(DatabaseResource, name="database", dimension="resource", version="1.0.0")
260
+ db_class = hub.get_component("database", dimension="resource")
261
+ ```
262
+
263
+ See [examples/](examples/) for more comprehensive examples.
264
+
265
+ ---
266
+
267
+ ## Quick Start Examples
268
+
269
+ ### Building a CLI Application
270
+
271
+ ```python
272
+ # From examples/12_cli_application.py
273
+ from provide.foundation.hub import Hub, register_command
274
+ from provide.foundation.cli import echo_info, echo_success
275
+
276
+ @register_command("status", aliases=["st", "info"])
277
+ def status_command(verbose: bool = False):
278
+ """Show system status."""
279
+ hub = Hub()
280
+ echo_info(f"Registered components: {len(hub.list_components())}")
281
+ echo_info(f"Registered commands: {len(hub.list_commands())}")
282
+
283
+ if __name__ == "__main__":
284
+ hub = Hub()
285
+ cli = hub.create_cli(name="myapp", version="1.0.0")
286
+ cli()
287
+ ```
288
+
289
+ ### Configuration-Driven Application
290
+
291
+ ```python
292
+ # From examples/11_config_management.py and examples/08_env_variables_config.py
293
+ from provide.foundation import setup_telemetry, logger
294
+ from provide.foundation.config import RuntimeConfig, env_field, ConfigManager
295
+ from attrs import define
296
+
297
+ @define
298
+ class DatabaseConfig(RuntimeConfig):
299
+ """Database configuration from environment."""
300
+ host: str = env_field(default="localhost", env_var="DB_HOST")
301
+ port: int = env_field(default=5432, env_var="DB_PORT", parser=int)
302
+ database: str = env_field(default="mydb", env_var="DB_NAME")
303
+
304
+ # Setup logging from environment
305
+ setup_telemetry() # Uses PROVIDE_* env vars automatically
306
+
307
+ # Load configuration
308
+ db_config = DatabaseConfig.from_env()
309
+ logger.info("Database configured", host=db_config.host, port=db_config.port)
310
+ ```
311
+
312
+ ### Production Patterns
313
+
314
+ ```python
315
+ # From examples/10_production_patterns.py
316
+ from provide.foundation import logger, error_boundary
317
+ import asyncio
318
+
319
+ class ProductionService:
320
+ def __init__(self):
321
+ self.logger = logger.bind(component="production_service")
322
+
323
+ async def process_batch(self, items):
324
+ """Process items with error boundaries."""
325
+ results = []
326
+ for item in items:
327
+ with error_boundary(self.logger, f"item_{item['id']}"):
328
+ result = await self.process_item(item)
329
+ results.append(result)
330
+ return results
331
+ ```
332
+
333
+ ---
334
+
335
+ ## Configuration
336
+
337
+ ### Environment Variables
338
+
339
+ All configuration can be controlled through environment variables:
340
+
341
+ | Variable | Description | Default |
342
+ |----------|-------------|---------|
343
+ | `PROVIDE_SERVICE_NAME` | Service identifier in logs | `None` |
344
+ | `PROVIDE_LOG_LEVEL` | Minimum log level | `DEBUG` |
345
+ | `PROVIDE_LOG_CONSOLE_FORMATTER` | Output format (`key_value` or `json`) | `key_value` |
346
+ | `PROVIDE_LOG_OMIT_TIMESTAMP` | Remove timestamps from console | `false` |
347
+ | `PROVIDE_LOG_FILE` | Log to file path | `None` |
348
+ | `PROVIDE_LOG_MODULE_LEVELS` | Per-module log levels | `""` |
349
+ | `PROVIDE_CONFIG_PATH` | Configuration file path | `None` |
350
+ | `PROVIDE_ENV` | Environment (dev/staging/prod) | `dev` |
351
+ | `PROVIDE_DEBUG` | Enable debug mode | `false` |
352
+ | `PROVIDE_JSON_OUTPUT` | Force JSON output | `false` |
353
+ | `PROVIDE_NO_COLOR` | Disable colored output | `false` |
354
+
355
+ ### Configuration Files
356
+
357
+ Support for YAML, JSON, TOML, and .env files:
358
+
359
+ ```yaml
360
+ # config.yaml
361
+ service_name: my-app
362
+ environment: production
363
+
364
+ logging:
365
+ level: INFO
366
+ formatter: json
367
+ file: /var/log/myapp.log
368
+
369
+ database:
370
+ host: db.example.com
371
+ port: 5432
372
+ pool_size: 20
373
+ ```
374
+
375
+ ---
376
+
377
+ ## Advanced Features
378
+
379
+ ### Contextual Logging
380
+
381
+ ```python
382
+ # From examples/06_trace_logging.py
383
+ from provide.foundation import logger
384
+
385
+ # Add context via structured fields
386
+ logger.info("request_processing",
387
+ request_id="req-123",
388
+ user_id="user-456",
389
+ method="GET",
390
+ path="/api/users")
391
+ ```
392
+
393
+ ### Timing and Profiling
394
+
395
+ ```python
396
+ from provide.foundation import timed_block
397
+
398
+ with timed_block(logger, "database_query"):
399
+ results = db.query("SELECT * FROM users")
400
+ # Automatically logs: "database_query completed duration_seconds=0.123"
401
+ ```
402
+
403
+ ### Async Support
404
+
405
+ ```python
406
+ import asyncio
407
+ from provide.foundation import logger, process
408
+
409
+ async def process_items(items):
410
+ for item in items:
411
+ logger.info("Processing", item_id=item.id)
412
+ await process_item(item)
413
+
414
+ # Async process execution
415
+ result = await process.async_run_command(["curl", "-s", "api.example.com"])
416
+ logger.info("API response", status=result.returncode)
417
+
418
+ # Thread-safe and async-safe logging
419
+ asyncio.run(process_items(items))
420
+ ```
421
+
422
+ ### Example Files
423
+
424
+ Complete working examples are available in the [examples/](examples/) directory:
425
+
426
+ - `00_simple_start.py` - Zero-setup logging (base install)
427
+ - `01_quick_start.py` - Full telemetry setup (requires [opentelemetry])
428
+ - `02_custom_configuration.py` - Custom telemetry configuration
429
+ - `03_named_loggers.py` - Module-specific loggers
430
+ - `04_das_logging.py` - Domain-Action-Status pattern
431
+ - `05_exception_handling.py` - Error handling patterns
432
+ - `06_trace_logging.py` - Distributed tracing
433
+ - `07_module_filtering.py` - Log filtering by module
434
+ - `08_env_variables_config.py` - Environment-based config
435
+ - `09_async_usage.py` - Async logging patterns
436
+ - `10_production_patterns.py` - Production best practices
437
+ - `11_config_management.py` - Complete configuration system
438
+ - `12_cli_application.py` - Full CLI application example
439
+
440
+ ---
441
+
442
+ ## Performance
443
+
444
+ - **Logging**: 14,000+ messages/second with emoji processing and structured logging
445
+ - **Configuration**: Lazy loading with multi-source caching for optimal performance
446
+ - **File Operations**: Atomic writes with format detection prevent corruption
447
+ - **Process Management**: Efficient streaming with async support and backpressure handling
448
+ - **Cryptography**: Hardware-accelerated operations with secure algorithm defaults
449
+ - **Platform Detection**: Cached system information for minimal overhead
450
+
451
+ ---
452
+
453
+ ## Contributing
454
+
455
+ We welcome contributions! Please see:
456
+ - [DEVELOPMENT.md](DEVELOPMENT.md) - Development setup and guidelines
457
+ - [GitHub Issues](https://github.com/provide-io/provide-foundation/issues) - Bug reports and feature requests
458
+
459
+ ---
460
+
461
+ ## License
462
+
463
+ MIT License - see [LICENSE](LICENSE) file for details.
464
+
465
+ ---
466
+
467
+ <p align="center">
468
+ Built by <a href="https://provide.io">Provide</a>
469
+ </p>
@@ -0,0 +1,149 @@
1
+ provide/__init__.py,sha256=RhH2b-EgTOCd1EO-FoJZwJrSCIgYPWcG611riYIKA7Q,289
2
+ provide/foundation/__init__.py,sha256=Zm3qZQTA440aUvxFGv8ev3oiyzvFceMrFW3tEEqBjck,4177
3
+ provide/foundation/_version.py,sha256=sbKh6ec7EOQ8enfksj-78_Ip8QXHxghRvHJQgiOPOkk,1530
4
+ provide/foundation/core.py,sha256=0kWXr-1lhhErpMOJg9ZIRp5jrdcEHSaYXxyGkD9I-yI,426
5
+ provide/foundation/types.py,sha256=NovIg1EtqzWNCGPYBV3B56qU0Sr0VXofMgqyTJ27gsk,656
6
+ provide/foundation/cli/__init__.py,sha256=yRGO2GR6owKGsH8aPLyFulju_HLjrwR-TLpRuqxg9pI,1383
7
+ provide/foundation/cli/decorators.py,sha256=JyEAtxWFZvXx4y8yJCsHQTN52PFhBMcwIVIFZjho2cE,7423
8
+ provide/foundation/cli/main.py,sha256=_uHSUN0Xi7PNydAVYTElg248HpLF-MZzHXAyqqwWW1g,1334
9
+ provide/foundation/cli/testing.py,sha256=cbhfvfglMQTxLIgrnydl3rtczCWtSTQKz9iaCkbVK5A,5947
10
+ provide/foundation/cli/utils.py,sha256=zwCcXqk6c0lxFDJhs5nYk-vx0eDzbk17onkkCdXV-5M,5541
11
+ provide/foundation/cli/commands/__init__.py,sha256=5xzPI5hhN9OB3n4Q6VEGQtNcSuU5hUrcnobj1eDzniE,93
12
+ provide/foundation/cli/commands/deps.py,sha256=tmS09TMF3dO1CuVcpL3yea5FrF0QZ29HUzdKkhnfCuc,2232
13
+ provide/foundation/cli/commands/logs/__init__.py,sha256=Ne6s_y3Kbq5xk2Dh0Nw4Zd0B_JyXTV87L6YJH6DJRkM,1852
14
+ provide/foundation/cli/commands/logs/generate.py,sha256=1a8SfHnuNb7v3EeALLmLtZ8iJELjvzK-YcZUKgBap5o,11016
15
+ provide/foundation/cli/commands/logs/generate_old.py,sha256=zX7n-Mtg0GEJ5KIQdxBQOpxYLJCsrnqSSP8spdTtpsw,20665
16
+ provide/foundation/cli/commands/logs/query.py,sha256=U-kRObCcF4-yoU5YRzy_zS06GwCqCtsyarMuNNn4iUA,5193
17
+ provide/foundation/cli/commands/logs/send.py,sha256=ixygy_wvn9oyBRwlMQoudCLQXWC30yQuNZMOACA5Whs,4610
18
+ provide/foundation/cli/commands/logs/tail.py,sha256=4MDUoy8hZp-Y8qVfckEqZhQJOMUqGFRVxHPZeP-abcQ,2871
19
+ provide/foundation/config/__init__.py,sha256=IF-xgTP4dyNvPryW3xq5YhzhdcEM3LqXz_4WA-43-lc,2244
20
+ provide/foundation/config/base.py,sha256=xYp3EAG8Nv9AGseyDqzWCQh0AumR-9pVIkmOaDNoPEI,9600
21
+ provide/foundation/config/env.py,sha256=CZwIJmJfrVWi-btvHEiecmdTJFUuI6JP0gaV7mvz3lo,11488
22
+ provide/foundation/config/loader.py,sha256=oe-VJ6JAFTJOJrrws4mrKz6f9ree50jPRpAA7jU79l8,9805
23
+ provide/foundation/config/manager.py,sha256=aRhYvcVP5M0TVEJj3HTzC9RZTYrGWjcB7sIeEZorMBE,11189
24
+ provide/foundation/config/schema.py,sha256=mEi-NuYNL0ohKOOxunlZapWALLzsRIobWFZUdUWPEKM,8319
25
+ provide/foundation/config/sync.py,sha256=KJVTfhlgwzr_oQU2IsjnQJx0AbtFycvAXap-5eElWlw,8047
26
+ provide/foundation/config/types.py,sha256=RkJE8GYx8zh04OR6ahSVnjv0V8p_gsjqUhkkBuxLGbE,2159
27
+ provide/foundation/config/validators.py,sha256=FVhQ3R7H_ZsWqIL7v9JFVS74e8NZigUjdhlOuXxiOIk,2248
28
+ provide/foundation/console/__init__.py,sha256=Na9znGqtUwR34G2empzREHpWS-nO2gzFf-vC2dmUQgI,537
29
+ provide/foundation/console/input.py,sha256=tOIVRav4qTlSI0SWmOSeGQf5W-fZPdlPKt_b3Q1y3Rs,11399
30
+ provide/foundation/console/output.py,sha256=gBJK2zvR4bhhUAtCUpk7odUcFbNog4rKmWP1G_rs_Mg,5520
31
+ provide/foundation/context/__init__.py,sha256=FBN3hzn7bEMJD9NN72ufoqCqRg75tr8mhtM5WQlNrVE,277
32
+ provide/foundation/context/core.py,sha256=WCHkuzesoxhpJAGDsQoL54xy3k7xdK4Dqk4wuqa83CQ,12374
33
+ provide/foundation/crypto/__init__.py,sha256=1b8WoZrN5zAUSsPVAbMHFTKRlhtUR92yjnm2ieM4pu0,4773
34
+ provide/foundation/crypto/algorithms.py,sha256=-m8e7MhdejXBVfpveaI9ast6Fc1Xw2LTxc17ZNLtpHo,2530
35
+ provide/foundation/crypto/certificates.py,sha256=j4_lHGshG_kdk0TqwdaQ_RK8g8FsosxBRF8jObEznhs,34593
36
+ provide/foundation/crypto/checksums.py,sha256=17713Hg79pVRAYioyMjB95AVsQEjAa3kg8W3KFCIsEw,8092
37
+ provide/foundation/crypto/constants.py,sha256=M0TcWC1C-qHv57JsNVXGJRwADL_KTWWDopeAuFu3lJY,1846
38
+ provide/foundation/crypto/hashing.py,sha256=N6Qk5D3lO7RtV9qfh5Pl3aA442o6Dq89JJarf-w6cYM,6273
39
+ provide/foundation/crypto/keys.py,sha256=z8lnAkD6oIp7dGNPwsMItLDBU8MtxqbMSBuoNUnrZAI,5613
40
+ provide/foundation/crypto/signatures.py,sha256=HEQJPBgQH3AfelW7YC3ihjJyUEP298pJN10t10GCPa0,4455
41
+ provide/foundation/crypto/utils.py,sha256=-Kll0sgQ3qe_WA24iG7LXHisMORj-BdhLqAWdYkmDZg,4169
42
+ provide/foundation/errors/__init__.py,sha256=Xqp1CNsUBSmnceFj8V75jBhuwU87M5J5ACHIxC23-OM,2336
43
+ provide/foundation/errors/auth.py,sha256=eUDaGghBsSVuavqWAlA-i8Y1aAZJrYZH7a4hARuHztM,2307
44
+ provide/foundation/errors/base.py,sha256=E6oGjrTAayAQbO2vcy1shQb_Q0uwX49bL_bQHb_ahfc,2538
45
+ provide/foundation/errors/config.py,sha256=rP3wpX0I_R6zuYkZL41pYQbcaDq0-ahN4HeiZB3vIko,3217
46
+ provide/foundation/errors/context.py,sha256=y6oPKtrGj7MtmhHzh7pek4Txw7j3baAnanBLknUnPCI,9327
47
+ provide/foundation/errors/decorators.py,sha256=JkHtGRKpEu9lGhPI5ANKKNM1fmhZbJytTF0Nl8buaNE,17515
48
+ provide/foundation/errors/handlers.py,sha256=feAeTXnTnN6pC-dNEvf74P1gyzjS3sqDvAFnU8n-gDM,11056
49
+ provide/foundation/errors/integration.py,sha256=K2USyU7gC0jRRTtingw0nsOLEUE8rfCHfAhweYfDdHY,3305
50
+ provide/foundation/errors/platform.py,sha256=5mnt2ITS6peSDPHtb25-RvjMtGjjriaF5dx31U7rC-k,1122
51
+ provide/foundation/errors/process.py,sha256=ishT8zbbEVjTtZEcksgA4hGjr_YoKM_v0pqS4h7GsaE,4022
52
+ provide/foundation/errors/resources.py,sha256=NLbpxVmwK_vj3S0Up-AlGAsXhJjoRCyfQL5BKeAU79I,4193
53
+ provide/foundation/errors/runtime.py,sha256=cSx7-72nftwXwsIG8P14giLqUnq4xF46XlegyXGAdOc,5309
54
+ provide/foundation/errors/safe_decorators.py,sha256=TgOapg_HrhB_fpvhBUaF7OTxD8R71gjIXUYQAryDcDM,4723
55
+ provide/foundation/errors/types.py,sha256=LmbbPOlWc6NZxS2tV3QZtN_pZDBZ8sv5JV2SJacVVU0,8122
56
+ provide/foundation/file/__init__.py,sha256=05dscJ_fp33pVaqjOKQx1y4lstH4l2beyQWwO-2fnF0,1608
57
+ provide/foundation/file/atomic.py,sha256=H5cIoH6OyK2tXlh3TcMbG9YtC04tq_4RM1MT5PuWTHs,4695
58
+ provide/foundation/file/directory.py,sha256=3qSVAlyAWqNCxf1r1Z7hkplbG7IvVvSPMS2uKPr1ITk,3349
59
+ provide/foundation/file/formats.py,sha256=X2ypHKivgu-ku4I49ZEvL2Xv8tal4O6xJa28bS8TTBc,6161
60
+ provide/foundation/file/lock.py,sha256=bTSHGRoY497Vo_CncZuj59fVDdyCDjJFJSvQ369MyCY,5508
61
+ provide/foundation/file/safe.py,sha256=FqeoJUw8wAA6QtCq_dLtIS7wgd0c5PXIjWZdW_vQv44,4675
62
+ provide/foundation/file/utils.py,sha256=kfGEDhn0vFvjyCWPOuF0qW29fDGLVzoMaNkZyoRzmls,4200
63
+ provide/foundation/hub/__init__.py,sha256=emtualDpBvDZTf1hPoiU2T30185c15XzZDGg1JZM8y0,2442
64
+ provide/foundation/hub/click_builder.py,sha256=wELZH3AeXNg7Zt_I3bo2i_61nh2t-iqOfMvrhe9zRCw,9886
65
+ provide/foundation/hub/commands.py,sha256=5hGA-21tclIkhVHdNv3RtOCCgq_BygZ7S0jmm03nYOU,1355
66
+ provide/foundation/hub/components.py,sha256=xllzJe-fXhk600rP14hWh3u_b1cBSBk3YkGY0Ndk0IE,20383
67
+ provide/foundation/hub/decorators.py,sha256=-PpfX-Yz2ytBAKgqZfsRaUAeXlvJiqCnkY5DAr6adqM,6502
68
+ provide/foundation/hub/info.py,sha256=k5pWFIZuiZDbCD2WIlEFu9ovf4BrvNJ3OBSPB4ITolU,749
69
+ provide/foundation/hub/manager.py,sha256=g3xtnfd8htvHsJvnPIIeHNIKvhqIOWIH7Wkn_vxZr24,12930
70
+ provide/foundation/hub/registry.py,sha256=F1wrHJnXBGG34PMZy4vqfIONVQttJ4-vA0CkXch9kTI,8893
71
+ provide/foundation/hub/type_mapping.py,sha256=dUR3GHdekTIsLsti5YTGfFNyVmr0nO-yDg1t-gD7UAk,1517
72
+ provide/foundation/hub/types.py,sha256=2fFpNSrRnpvdfJEDKouZ87MWBC-yxd_HTHJiurCjSAc,649
73
+ provide/foundation/logger/__init__.py,sha256=hGfRkoqOaZwLiJevj34wfrGLErQRePAfeDIZpAXBUiU,1044
74
+ provide/foundation/logger/base.py,sha256=o51ButJYLQ0paDm7JZf9UFRuk1fOIjCOLJW2ZZi2jws,484
75
+ provide/foundation/logger/core.py,sha256=8Kj2oUafFXG-DVzndmwfIcLtVHYD8PnVivJsjmQbmoY,8912
76
+ provide/foundation/logger/custom_processors.py,sha256=fGgIgz7s3or1HUVSqug_CjdLfaOl5Y4q8aLzG7H3T6M,6015
77
+ provide/foundation/logger/factories.py,sha256=wCp0qdqyLZ1ENlUmX1R81qedTHLdUZFHutfJu4Zg2fw,1445
78
+ provide/foundation/logger/trace.py,sha256=Ifmejv_y_xsaC-_nAasrAXlK3ZXDgvXcdKw8GeIwsmo,1333
79
+ provide/foundation/logger/config/__init__.py,sha256=j3vU1y8mbNurkwz92TisPofUXDsmJN6cwZHm-nCPHlg,328
80
+ provide/foundation/logger/config/base.py,sha256=HG2iMUogBRhuJejQnhmGeoByLkM62iK0pigbFZSptiQ,1286
81
+ provide/foundation/logger/config/logging.py,sha256=5H8LhhUnGaBWdCm-iVLu-w_GqSsl8fnN-gJvfpxBFOs,16998
82
+ provide/foundation/logger/config/telemetry.py,sha256=UMQ8sI2rVbYtvHJeqtNawM5cuBfuYwippKwbSVnsCxA,6415
83
+ provide/foundation/logger/emoji/__init__.py,sha256=eNHvG8F4IcoBzs3QmtaewtpUoajJswiDkuX28-JC8VQ,1008
84
+ provide/foundation/logger/emoji/matrix.py,sha256=Z1fGAsDscdOllFzEvEhCRaGDGXRPNK9UoWDx6-tD7LE,6777
85
+ provide/foundation/logger/emoji/sets.py,sha256=IoKqbRUP9EUtiMTsYOuR91AEu9uJDPGMczHGbfU7Nk4,14314
86
+ provide/foundation/logger/emoji/types.py,sha256=8ekGOSc5cq9l0N5ukAxYFx4v3TcT448zeoiAccgRb1c,1788
87
+ provide/foundation/logger/processors/__init__.py,sha256=bJ5TmSD3mX02WbzR-w8WFwsZpKK6QwELvCBfwNlKxSA,373
88
+ provide/foundation/logger/processors/main.py,sha256=BysN-KChha0JGn1jqMy9R5BiCe1KigxuIVO473V2jMA,10011
89
+ provide/foundation/logger/processors/trace.py,sha256=9EZe5lLUlcTnxyz6opW_1SYv5Gq6PZj6TnpcVWeXGlQ,3596
90
+ provide/foundation/logger/ratelimit/__init__.py,sha256=eOax-Hl-IMU7dAaeDWNa521Mdqmr_YRWy2Nm5yj24AI,727
91
+ provide/foundation/logger/ratelimit/limiters.py,sha256=ICIMdrnqoOY-e6QSg8--VvtnrY4xarsmnWwq7gB3xhg,9933
92
+ provide/foundation/logger/ratelimit/processor.py,sha256=AObce82HhL_KHO4UusNjw3TqDeCrP0buLibbWU0xc30,7523
93
+ provide/foundation/logger/ratelimit/queue_limiter.py,sha256=qjZuxMFX8pbz-PusVf3inO9dCvqlorfEqjVsjSe8REM,10685
94
+ provide/foundation/logger/setup/__init__.py,sha256=3LlVoogT5DRH74ifvpMaG88bf5JBOm5ORucI09HE4BI,655
95
+ provide/foundation/logger/setup/coordinator.py,sha256=k-HYb76ecUQKBTMUG0EIItbbaKEzbnQ4hGo1ZYhcclM,5157
96
+ provide/foundation/logger/setup/emoji_resolver.py,sha256=cVBpOf2SzcZo7ui74wp2BGP2f8gNY0qI0IRwMqJD8mE,2281
97
+ provide/foundation/logger/setup/processors.py,sha256=YU5jhadjX5jRfS9pb6OkijeBRMNO7YpAEM3CJarZ3sU,2500
98
+ provide/foundation/logger/setup/testing.py,sha256=frK0QlasQqfsOFKNCkXx6iHIGFPbtv0wtnJljib-9rg,1012
99
+ provide/foundation/metrics/__init__.py,sha256=c-r3zl6vxuL-O2lZxI4oczd8TXlkj43lEHPnAF-MsC8,3212
100
+ provide/foundation/metrics/otel.py,sha256=5Gl34QturMs7fTRYWgDtky_Tb30lqGES-Axyokk5wDM,4077
101
+ provide/foundation/metrics/simple.py,sha256=szMcxR5Cy4C2l5Krwo1SSG4EkhflaA7oLZo5tm15Ym8,5185
102
+ provide/foundation/observability/__init__.py,sha256=nDI_9cCMcv6m8FMK-NEHk_iBKBhqBax9S1P3eocBJ1k,1370
103
+ provide/foundation/observability/openobserve/__init__.py,sha256=RQvl3VdTCDs700F9OGghLKA47xjV4_Q4au5yzxA4xk0,1922
104
+ provide/foundation/observability/openobserve/auth.py,sha256=1J2jy9M2dED4EX0MfuJ_skjR8MOP3IpRybbC6KFWhVk,1950
105
+ provide/foundation/observability/openobserve/client.py,sha256=mhDUtw3CswkwCwm0YYRn3FY5LGJncB4ELhCCAUbe5KM,9160
106
+ provide/foundation/observability/openobserve/commands.py,sha256=-3IjJqhqYmQNN_H5K-UrboPP4nhAnwkDpnikrvI__HA,10170
107
+ provide/foundation/observability/openobserve/exceptions.py,sha256=semIReHqNo2VWmqf8WC8BXX5q7Pf0DQQEodGpwvRlHI,771
108
+ provide/foundation/observability/openobserve/formatters.py,sha256=1S065iG4NeKt8UzhNT3MNKZUaEsIyP2OF-wAKCiY7AQ,8697
109
+ provide/foundation/observability/openobserve/models.py,sha256=pTi6bSPxyAbmhL03vk5dgvdHb8GdXqpDsEf3zoB7Vrw,3986
110
+ provide/foundation/observability/openobserve/otlp.py,sha256=1V9RjPVlajYrDvKe4Cj6WJZxK41Q7JEE6blQ8gDUeOY,9591
111
+ provide/foundation/observability/openobserve/search.py,sha256=-KOxphkVS4H2niBJ3suTbA7nvXrhSiPvHi8-CLD3Qvc,5778
112
+ provide/foundation/observability/openobserve/streaming.py,sha256=qLSvlmzuHN5kFasLRf2-s2jBXA5k3pUTOn0N6F1IjqE,7353
113
+ provide/foundation/platform/__init__.py,sha256=exY3CSPsTGoTYhXdbbXHg0_xC-68Sl6_JyYmvXhd8P0,867
114
+ provide/foundation/platform/detection.py,sha256=eBorkzYZy0eN7QfnqY8ZlOqZdZBW1TDptsK6ol713q8,5404
115
+ provide/foundation/platform/info.py,sha256=25gXTGXGJ2KNWVummTQa8VeVnFtdutrInE6bLpGylZI,3859
116
+ provide/foundation/process/__init__.py,sha256=ndfU5COg5vTV9uzYjy7eSy7Opyq6WY-ml-ZfjhKzS4Y,910
117
+ provide/foundation/process/async_runner.py,sha256=AvmR0kv5A2o5JgVXtuRWdyCFNFnmiaGeyy97l0y1_FQ,12160
118
+ provide/foundation/process/lifecycle.py,sha256=1YuIJnbzAchpNK883jZT3yXuSyyBRMdWgmtL5slw4nw,13808
119
+ provide/foundation/process/runner.py,sha256=bIIX5VaaPM-PEyhHO3A_lhkgONKKKZJGwitmyaKKvBY,12057
120
+ provide/foundation/setup/__init__.py,sha256=nQVxccOTnW8npQWzdvsO5T58IpE6nsvpsTcc_Usw8fY,2912
121
+ provide/foundation/streams/__init__.py,sha256=HLupH4qoy0N5xF2sdsrEJ1eqir2Cfns7bwOsWAcnMc8,920
122
+ provide/foundation/streams/console.py,sha256=tUUpdAt_Zxd_B901WkQ6xbbdvY-V4c4LKVfYYfZmvQY,1375
123
+ provide/foundation/streams/core.py,sha256=eGwT2Y0dw2tGFs8TSxraTrMWojz5SCuplgVImM_uAeE,1907
124
+ provide/foundation/streams/file.py,sha256=LtmnVx__n1YnaB3edwad2oDg2ZJhN81YgjH9Nh1ssIU,3194
125
+ provide/foundation/testing/__init__.py,sha256=UIKm0NGIjZZNtA0E-KRiaCA3L6D7_CFUgMdZlRUnAT0,4540
126
+ provide/foundation/testing/cli.py,sha256=rbln5V524ztjJca-tjVdcReTAc_IDAYsHjq7aUj-9Ws,6210
127
+ provide/foundation/testing/crypto.py,sha256=wGnYEPh2leJ8F2lP6LKxmV6oLizONdMrHLyu7WEdGDw,5938
128
+ provide/foundation/testing/fixtures.py,sha256=kdqsiKwbJZIbBUzqBVWEgMKQrPaa6bNofb7AS3eJ5xQ,1488
129
+ provide/foundation/testing/hub.py,sha256=XI-6X8Xn36UXZ0e3iydPd8fxFS6_1ZnCo3u_gR7Slf4,581
130
+ provide/foundation/testing/logger.py,sha256=INdiZ41gtVEuDMOL9JhRPTvcf2MZ0V7yrPA3dfyhdOo,3220
131
+ provide/foundation/testing/streams.py,sha256=c8vWlVatTpOUIfsna5JBYwSWh_Z70Ne7GwQUFv1o2Aw,1288
132
+ provide/foundation/tracer/__init__.py,sha256=VfAadJr8_EBKZfDwcbk24SZoNJVBEgmM0xF0eZm9-Zc,1279
133
+ provide/foundation/tracer/context.py,sha256=ZVCwM-fbH7b9wnYRi1tedTNV90xrTPFerYll3AJiAS0,2773
134
+ provide/foundation/tracer/otel.py,sha256=gdLUXipI59jyBh1aB27UO5eFf17I4iMfTVDWTjEwlBM,4307
135
+ provide/foundation/tracer/spans.py,sha256=fpHfWs_kMEKxzPJTww4Jq9H9elGQSyedlOMSHm-VDng,5909
136
+ provide/foundation/utils/__init__.py,sha256=gAL1wdO7lR8agX3jrxZpFReOBZ1qGSQm37pMM5j5hCQ,2003
137
+ provide/foundation/utils/deps.py,sha256=7PgW8fA-OHZyzWyp_dotMdj0TL2DVguZ8d9auXUwFBM,5411
138
+ provide/foundation/utils/env.py,sha256=h8xrBtY4kFx7Eix0auhpN0YMMavkJ6QGzLpGILutOvA,13056
139
+ provide/foundation/utils/formatting.py,sha256=W7HoHSAggaUNqZsq7WuAoLRDY17k7KPMzVoh3Vknv8w,11823
140
+ provide/foundation/utils/parsing.py,sha256=YC33SiOy3z1dB25ljUieXILvEe9wDRLewbpxohKHHgc,6201
141
+ provide/foundation/utils/rate_limiting.py,sha256=r7sXnNdPnxpaPf573Lqd2dMtwHlC0xpy0SbaCY35s94,4202
142
+ provide/foundation/utils/streams.py,sha256=zeMIClORB9jZGBXesTt6_JxGH7g2GWz5rK-ZAUbtemI,2241
143
+ provide/foundation/utils/timing.py,sha256=hJ5nAbcJqDpjGT9Fv3cPrmUNpVht_Phgn1xcUqV4Obk,2889
144
+ provide_foundation-0.0.0.dev0.dist-info/licenses/LICENSE,sha256=MF41r9jvmup6wWhm4vGl6AcNCIIfi_zyj84Ygf77GAc,11344
145
+ provide_foundation-0.0.0.dev0.dist-info/METADATA,sha256=xWe7ugifdjoyNLUFC9EJLKsxjNvqNjz3WrFGeMXIX1g,14718
146
+ provide_foundation-0.0.0.dev0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
147
+ provide_foundation-0.0.0.dev0.dist-info/entry_points.txt,sha256=8UyzsVlBIUyV3olZWgIMAxYQG34vUfdQY71LUFGzidQ,69
148
+ provide_foundation-0.0.0.dev0.dist-info/top_level.txt,sha256=zwyv2grD4005JoQoP1v9wIYXfqgW9sgFuikW7uYZllw,8
149
+ provide_foundation-0.0.0.dev0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ foundation = provide.foundation.cli.main:cli [cli]