How singer-io/singer-python works
singer-python is a Python library for producing Singer-format data, not a standalone sync service. A tap calls its public API to emit schema, record, and state messages; it can also use catalog and metadata selection, schema-based record transformation, bookmark/state helpers, and structured metrics. The graph shows the public facade and these distinct capabilities. Some implementation excerpts are partial or absent, so links between unsampled subsystems are omitted rather than inferred.
Main entry points: __init__.py Library facade · catalog.py Catalog model · messages.py Message writers · logger.py Logging
Components 15
Public API
- Library facade
singer/__init__.py - Tap utilities
singer/utils.py
Singer Messages
- Message writers
singer/messages.py - Message types
singer/messages.py
Sync Support
- Catalog model
singer/catalog.py - Schema model
singer/schema.py - Field metadata
singer/metadata.py - Record transform
singer/transform.py - Bookmarks and state
singer/state.py - Bookmark compatibility
singer/bookmarks.py - State diff
singer/statediff.py
Other components
- Tap application
- Standard output
Connections 21
- Tap application → Library facade: calls
- Library facade → Message writers: exports
- Library facade → Message types: exports
- Library facade → Catalog model: exports
- Library facade → Schema model: exports
- Library facade → Record transform: exports
- Library facade → Bookmarks and state: exports
- Library facade → Metrics: exports
- Library facade → Tap utilities: exports
- Library facade → Logging: exports
- Message writers → Message types: constructs
- Message writers → Standard output: writes JSON
- Catalog model → Schema model: uses
- Catalog model → Field metadata: reads selection
- Catalog model → Bookmark compatibility: reads sync marker
- Bookmark compatibility → Bookmarks and state: delegates
- Record transform → Field metadata: reads field rules
- Record transform → Logging: gets logger
- Tap utilities → Catalog model: loads catalog
- Metrics → Logging: gets logger
- Message writers → Logging: gets logger