Skip to main content

Lightweight metadata extraction probes — 191 probes across 47 data sources

Project description

metapod

PyPI version Python Tests Docs License Probes Sources

Lightweight metadata extraction and data governance probes. 197 probes across 49 data sources in 11 categories - metadata, governance, quality, profiling, operations, compliance, cost, schema history, lineage, PII detection, and data contracts.

Runs inside your network. Extracts only metadata - no raw data leaves the perimeter.

Install

pip install metapod-probes                     # Core (file scanners, BI tools)
pip install 'metapod-probes[oracle]'           # + Oracle
pip install 'metapod-probes[azure]'            # + Azure (ADLS, Blob, ADF, File Share)
pip install 'metapod-probes[soda]'             # + Soda Core (data quality checks)
pip install 'metapod-probes[ydata]'            # + YData Profiling
pip install 'metapod-probes[presidio]'         # + PII Detection (~75 entity types)
pip install 'metapod-probes[all]'              # Everything

Air-gapped environments (no internet):

# On machine with internet:
bash scripts/build_airgapped.sh --extras azure
# Transfer tarball, then on air-gapped machine:
tar xzf metapod-probes-airgapped-*.tar.gz && bash install.sh

Quick start

metapod init                                    # Generate config.yaml
metapod list-probes                             # Show all 197 probes
metapod run "oracle.*" --schema RISK_MGMT       # Extract Oracle metadata
metapod run "adls_gen2.*" --since 2026-03-29    # Incremental (only recent)
metapod run "azure_data_factory.*" --parallel   # Parallel execution
metapod push --target https://your-platform.com # Send results
metapod serve --port 9090                       # Pull-mode daemon

Supported sources (49)

Databases (15)

Source Probes Driver
Oracle 18 oracledb
PostgreSQL 17 psycopg2
Azure SQL / SQL Server 15 pyodbc
Snowflake 5 snowflake-connector
BigQuery 5 google-cloud-bigquery
MySQL 6 pymysql
IBM DB2 4 ibm_db
MariaDB 2 pymysql
SAP HANA 2 hdbcli
Teradata 2 teradatasql
DuckDB 3 duckdb
Trino 3 trino
SQLite 2 stdlib
MongoDB 1 pymongo
Elasticsearch 1 elasticsearch

Cloud platforms (8)

Source Probes API
Databricks Unity Catalog 11 REST API
Azure Data Factory 8 Management API (lineage + dataset paths)
ADLS Gen2 4 azure-storage-file-datalake
Azure Blob Storage 4 azure-storage-blob
Azure File Share 3 azure-storage-file-share
Azure RBAC 2 Azure Management API
AWS S3 3 boto3
Oracle Cloud (OCI) 3 oci-python-sdk

BI tools (4)

Source Probes Method
Power BI 6 .pbit/.pbix ZIP parsing
Excel 6 .xlsx OOXML (table detector + formula lineage)
Tableau 5 .twb/.twbx XML parsing
Qlik Sense/View 3 .qvf SQLite / .qvw binary

ETL / Orchestration (6)

Source Probes Method
Informatica PowerCenter 5 Repository XML export
Informatica Cloud (IICS) 4 REST API v2/v3
Oracle Data Integrator 3 Smart Export XML
Airflow 3 REST API
Alteryx 2 .yxmd XML parsing
dbt 3 manifest.json parsing

Governance platforms (4)

Source Probes Direction
Collibra 3 Bidirectional
Microsoft Purview 3 Bidirectional
Blindata 3 Bidirectional
Witboost 2 Bidirectional

Data Quality & Profiling (3)

Source Probes Method
Soda Core 2 SodaCL checks + scan result import
YData Profiling 2 Dataset profiling + anomaly detection
Schema Contract 2 YAML contract validation + drift detection

Compliance & Governance (3)

Source Probes Method
Presidio PII 2 ~75 PII entity types (PAN, IBAN, CF, GDPR) + custom YAML
Access Audit 1 Cross-reference PII findings with RBAC roles
Data Retention 1 Check dataset age against retention policies

Cost & Operations (1)

Source Probes Method
Storage Cost 1 Estimate Azure storage costs per directory

Files / Other (5)

Source Probes Method
File Scanner 5 Local filesystem (auto-dispatch + CSV/JSON/Parquet schema)
SharePoint / OneDrive 3 Local sync / REST / Graph API
Python Transforms 1 AST-based pandas/PySpark detection
Avro 1 Header-only schema reading
Generic 1 User-defined path

Architecture

Customer network (VPN / Azure / on-prem)
+---------------------------------------------+
|  metapod                                     |
|  +-- 197 probes across 49 sources           |
|  +-- Push mode: metapod push --target URL    |
|  +-- Pull mode: metapod serve --port 9090    |
|  +-- File mode: metapod run -> ./output/     |
|  +-- --parallel for concurrent execution     |
|  +-- --since for incremental extraction      |
|  +-- --delta for change detection            |
+---------------------+------------------------+
                      | outbound HTTPS only
                      v
            Any metadata consumer
  • Zero inbound access - only outbound HTTPS
  • No raw data - only metadata (schema, statistics, descriptions)
  • Local-first - results written to ./output/ before push
  • Config-driven - YAML with ${ENV_VAR} substitution
  • Air-gapped - full offline install bundle available
  • Token cache - single Azure AD authentication per session
  • Probe cache - shared API results between related probes

Commands

metapod run "oracle.*"                          # Extract
metapod run "adls_gen2.*" --parallel -w 8       # Parallel (8 workers)
metapod run "adls_gen2.*" --since 2026-03-29    # Incremental
metapod run "oracle.*" --delta                  # Delta (only changes)
metapod push --target URL --project ID          # Push to platform
metapod serve --port 9090                       # Pull-mode daemon
metapod list-probes                             # Show all probes
metapod diff                                    # Compare extractions
metapod schedule "oracle.*" --cron "0 6 * * *"  # Cron schedule
metapod init                                    # Generate config
metapod new-probe mydb.metadata.tables          # Scaffold new probe

PII Detection (Presidio)

~75 built-in entity types for Financial Services, Healthcare, Telco, Public Admin:

pip install 'metapod-probes[presidio]'
metapod run "presidio.compliance.pii_scan" -c config_presidio.yaml
  • 13 PAN issuers with Luhn validation (Visa, MC, Amex, PagoBancomat, Nexi, Postepay...)
  • 25 Financial Services patterns (IBAN, SWIFT, ABI/CAB, ISIN, LEI, NDG, AML SAR...)
  • 23 domain patterns (ICD-10, IMEI, POD/PDR energy, targa IT, VIN, PagoPA IUV...)
  • Custom YAML patterns - define your own without modifying code

Data Contracts

# contract.yml
contracts:
  - dataset: TRANSACTIONS
    columns:
      - name: transaction_id
        type: integer
        nullable: false
      - name: amount
        type: decimal
    rules:
      min_columns: 3
metapod run "schema_contract.quality.validate" -s contract.yml

Adding a probe

from core.base_probe import BaseProbe
from core.registry import register

@register
class MyProbe(BaseProbe):
    @staticmethod
    def probe_name() -> str:
        return "mydb.metadata.tables"

    @staticmethod
    def description() -> str:
        return "Extract table metadata"

    def execute(self, connection, schema: str, **kwargs) -> list[dict]:
        return [{"table_name": "example"}]

Or use the scaffold: metapod new-probe mydb.metadata.tables

License

Apache 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

metapod_probes-0.4.2.tar.gz (186.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

metapod_probes-0.4.2-py3-none-any.whl (318.7 kB view details)

Uploaded Python 3

File details

Details for the file metapod_probes-0.4.2.tar.gz.

File metadata

  • Download URL: metapod_probes-0.4.2.tar.gz
  • Upload date:
  • Size: 186.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for metapod_probes-0.4.2.tar.gz
Algorithm Hash digest
SHA256 8cf9a53cb161d4795ff3e13cef0b6e0d289bdfa1fbb5a5705b87eaac0bafe321
MD5 76daef0174802e3c7ae096458e205e2f
BLAKE2b-256 b342d3595fd88d9998661cec6ccc8eeddc1cbe55903d5d058e0431572a4cdc73

See more details on using hashes here.

Provenance

The following attestation bundles were made for metapod_probes-0.4.2.tar.gz:

Publisher: publish.yml on mario-ambrosino/metapod

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file metapod_probes-0.4.2-py3-none-any.whl.

File metadata

  • Download URL: metapod_probes-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 318.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for metapod_probes-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 628b2b1ee300db3f62df1aed5b23e0d254f209fcd57ef4e406b431477ad849c2
MD5 c7232ccf545ba6aee69a16a972accc2b
BLAKE2b-256 13ec7e989e6da355f41bba5f0e7de78ab6952fd7adcce227fae2ec931c77a64c

See more details on using hashes here.

Provenance

The following attestation bundles were made for metapod_probes-0.4.2-py3-none-any.whl:

Publisher: publish.yml on mario-ambrosino/metapod

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page