Dependencies and Packaging
Relevant source files
The following files were used as context for generating this wiki page:
The flext-tap-oracle project is a modern Singer Tap designed for Oracle Database extraction, built upon the FLEXT framework. Its packaging structure is managed through standard Python tools, specifically hatchling as the build backend, while leveraging a modular dependency architecture that separates core runtime requirements from extensive development and testing suites.
The project follows a "managed" standardization approach where sections of the configuration are enforced by internal tooling (flext_infra.deps.modernizer). This ensures consistency across the FLEXT ecosystem while allowing for custom extensions in specific project metadata.
Sources: pyproject.toml:1-12, README.md:1-10
Project Metadata and Environment
The project is identified as flext-tap-oracle version 0.12.0-dev. It targets Python 3.13 and is categorized under "Integration" project classes. The package is licensed under MIT and maintained by the FLEXT Team.
Metadata Specifications
| Field | Value | Source |
|---|---|---|
| Name | flext-tap-oracle | pyproject.toml:44 |
| Version | 0.12.0-dev | pyproject.toml:47 |
| Python Version | >=3.13, <3.14 | pyproject.toml:46 |
| Build System | hatchling.build | pyproject.toml:8 |
| License | MIT | pyproject.toml:43 |
Sources: pyproject.toml:39-47, README.md:5-7
Dependency Management
The project categorizes dependencies into three primary groups: Core Runtime, FLEXT Ecosystem, and Development/Optional.
Core Runtime Dependencies
These are required for the basic operation of the Singer Tap, including API frameworks, database drivers, and the Singer SDK.
- Frameworks:
fastapi,uvicorn - Data Validation:
pydantic,pydantic-core - Singer Standards:
singer-sdk - Infrastructure:
setuptools,prometheus-client
Sources: pyproject.toml:26-38
FLEXT Ecosystem Integration
The project relies on internal workspace packages that provide the foundational logic for the "MRO (Method Resolution Order) cascade" mentioned in the project documentation.
The diagram shows the internal FLEXT dependencies required for the Oracle Tap's architecture.
Sources: pyproject.toml:27-30, README.md:27-31
Development Dependencies
The dev optional dependency group is extensive, covering linting, testing, and documentation generation. Notable tools include pytest for testing, ruff for linting, and mkdocs for documentation.
Sources: pyproject.toml:53-127
Packaging and Build Configuration
The package uses a modular export system to optimize loading times via lazy imports. The main __init__.py file utilizes install_lazy_exports from flext_core.lazy to manage public surface exposure without eager loading of all modules.
Versioning Logic
The versioning is handled by a subclass of FlextVersion, which automatically computes attributes like __version__ and __title__ from package metadata.
class FlextTapOracleVersion(FlextVersion):
"""flext-tap-oracle version — MRO-derived from FlextVersion."""
_metadata: PackageMetadata = metadata("flext-tap-oracle")
__version__ = FlextTapOracleVersion.__version__
Sources: src/flext_tap_oracle/version.py:19-25
Entry Points
The package exposes two command-line scripts for interacting with the tap:
flext-tap-oracle: Points toflext_tap_oracle.tap:clitap-oracle: Points toflext_tap_oracle.tap:cli
Sources: pyproject.toml:130-131
Tooling and Quality Gates
The project defines several tool configurations in pyproject.toml to enforce code quality and standard behavior:
- Pyright/Mypy: Configured for strict type checking on Python 3.13.
- Ruff: Used as the primary linter and formatter, with specific rules for banned APIs (e.g., forbidding direct use of
richortyperin favor offlext_cliwrappers). - Deptry: Monitors for unused or missing dependencies within the
flextecosystem. - Pyrefly: Enforces project-specific static analysis and error checking.
Sources: pyproject.toml:161-177, pyproject.toml:191-205, pyproject.toml:444-486
Summary
The flext-tap-oracle packaging strategy centers on a strictly versioned, Python 3.13 environment using the hatchling build system. By leveraging a complex tree of internal FLEXT dependencies (core, db-oracle, meltano), the project maintains a clean separation of concerns while providing a standard Singer-compliant interface for Oracle Database extraction.