<div align="left">
<h1>Mage AI</h1>
<p>Give your data team magical powers.</p>
<a href="https://mage.ai"><img alt="Mage AI GitHub repo stars" src="https://img.shields.io/github/stars/mage-ai/mage-ai?style=for-the-badge&logo=github&labelColor=000000&logoColor=FFFFFF&label=stars&color=0500ff" /></a>
<a href="https://hub.docker.com/r/mageai/mageai"><img alt="Mage AI Docker downloads" src="https://img.shields.io/docker/pulls/mageai/mageai?style=for-the-badge&logo=docker&labelColor=000000&logoColor=FFFFFF&label=pulls&color=6A35FF" /></a>
<a href="https://github.com/mage-ai/mage-ai/blob/master/LICENSE"><img alt="Mage AI license" src="https://img.shields.io/github/license/mage-ai/mage-ai?style=for-the-badge&logo=codeigniter&labelColor=000000&logoColor=FFFFFF&label=license&color=FFCC19" /></a>
<a href="https://www.mage.ai/chat"><img alt="Join the Mage AI community" src="https://img.shields.io/badge/Join%20the%20community-black.svg?style=for-the-badge&logo=lightning&labelColor=000000&logoColor=FFFFFF&label=&color=DD55FF&logoWidth=20" /></a>
</div>
<br />
<a href="https://mage.ai/pro">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/mage-ai/assets/blob/main/oss/hero.png?raw=true">
<img alt="Mage AI hero" src="https://github.com/mage-ai/assets/blob/main/oss/hero.png?raw=true" />
</picture>
</a>
<br />
<br />
Mage is a hybrid framework for transforming and integrating data. It combines the best of both worlds: the flexibility of notebooks with the rigor of modular code.
<br />
- Extract and synchronize data from 3rd party sources.
- Transform data with real-time and batch pipelines using Python, SQL, and R.
- Load data into your data warehouse or data lake using our pre-built connectors.
- Run, monitor, and orchestrate thousands of pipelines without losing sleep.
<br />
Plus hundreds of enterprise-class features, infrastructure innovations, and magical surprises.
<h1></h1>
#### Available in two spellbinding versions
<br />
<table style="width: 100%; border: none;" cellspacing="0" cellpadding="0" border="0">
<tr>
<td rowspan="2">
<a href="https://mage.ai/pro">
<img alt="Mage Pro" width="124" align="left" src="https://github.com/mage-ai/assets/blob/main/oss/card-pro.png?raw=true" />
</a>
<b>For teams.</b> Fully managed platform
for integrating and transforming data.
</td>
<td rowspan="2">
<a href="https://github.com/mage-ai/mage-ai?tab=readme-ov-file#its-magic">
<img alt="Mage OSS" width="124" align="left" src="https://github.com/mage-ai/assets/blob/main/oss/card-oss.png?raw=true" />
</a>
<b>Self-hosted.</b> System to build, run, and
manage data pipelines.
</td>
</tr>
</table>
<br />
<a href="https://mage.ai/pro">
<img alt="Try out Mage Pro" src="https://img.shields.io/badge/try%20it%20out%20now-black.svg?style=for-the-badge&logo=artifacthub&labelColor=6A35FF&logoColor=FFFFFF&label=mage%20pro&color=6A35FF">
</a>
<br />
<br />
<div align="left">
# Itโs magic.
<p align="left">
For documentation on getting started, how to develop, and how to deploy to production check out the live
<br />
<a
href="https://docs.mage.ai?source=github"
target="_blank"
><b>Developer documentation portal</b></a>.
</p>
<br />
## ๐โโ๏ธ Install
The recommended way to install the latest version of Mage is through Docker with the following command:
```bash
docker pull mageai/mageai:latest
```
You can also install Mage using pip or conda, though this may cause dependency issues without the proper environment.
```bash
pip install mage-ai
```
```bash
conda install -c conda-forge mage-ai
```
Looking for help? The _fastest_ way to get started is by checking out our documentation [here](https://docs.mage.ai/getting-started/setup).
Looking for quick examples? Open a [demo](https://demo.mage.ai/) project right in your browser or check out our [guides](https://docs.mage.ai/guides/overview).
## ๐ฎ Demo
### Live demo
Build and run a data pipeline with our <b>[demo app](https://demo.mage.ai/)</b>.
> WARNING
>
> The live demo is public to everyone, please donโt save anything sensitive (e.g. passwords, secrets, etc).
### Demo video (5 min)
[](https://youtu.be/GswOdShLGmg)
<sub><i>Click the image to play video</i></sub>
<br />
## ๐ฎ [Features](https://docs.mage.ai/about/features)
| | | |
| --- | --- | --- |
| ๐ถ | <b>[Orchestration](https://docs.mage.ai/design/data-pipeline-management)</b> | Schedule and manage data pipelines with observability. |
| ๐ | <b>[Notebook](https://docs.mage.ai/about/features#notebook-for-building-data-pipelines)</b> | Interactive Python, SQL, & R editor for coding data pipelines. |
| ๐๏ธ | <b>[Data integrations](https://docs.mage.ai/data-integrations/overview)</b> | Synchronize data from 3rd party sources to your internal destinations. |
| ๐ฐ | <b>[Streaming pipelines](https://docs.mage.ai/guides/streaming-pipeline)</b> | Ingest and transform real-time data. |
| โ | <b>[dbt](https://docs.mage.ai/dbt/overview)</b> | Build, run, and manage your dbt models with Mage. |
<br />
<b>A sample data pipeline defined across 3 files โ</b>
<br />
1. Load data โ
```python
@data_loader
def load_csv_from_file() -> pl.DataFrame:
return pl.read_csv('default_repo/titanic.csv')
```
1. Transform data โ
```python
@transformer
def select_columns_from_df(df: pl.DataFrame, *args) -> pl.DataFrame:
return df[['Age', 'Fare', 'Survived']]
```
1. Export data โ
```python
@data_exporter
def export_titanic_data_to_disk(df: pl.DataFrame) -> None:
df.to_csv('default_repo/titanic_transformed.csv')
```
<br />
[<img alt="Water mage casting spell" height="300" src="https://github.com/mage-ai/assets/blob/main/mage-water-charging-up.svg?raw=True" />](https://www.mage.ai/)
Raw data
{
"_id": null,
"home_page": "https://github.com/mage-ai/mage-ai",
"name": "mage-ai",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": null,
"author": "Mage",
"author_email": "eng@mage.ai",
"download_url": "https://files.pythonhosted.org/packages/56/17/34d00ddab8b09bbfebaaaaebbd731a57209790269acb57136efea3038b80/mage_ai-0.9.75.tar.gz",
"platform": null,
"description": "<div align=\"left\">\n <h1>Mage AI</h1>\n\n <p>Give your data team magical powers.</p>\n\n<a href=\"https://mage.ai\"><img alt=\"Mage AI GitHub repo stars\" src=\"https://img.shields.io/github/stars/mage-ai/mage-ai?style=for-the-badge&logo=github&labelColor=000000&logoColor=FFFFFF&label=stars&color=0500ff\" /></a>\n<a href=\"https://hub.docker.com/r/mageai/mageai\"><img alt=\"Mage AI Docker downloads\" src=\"https://img.shields.io/docker/pulls/mageai/mageai?style=for-the-badge&logo=docker&labelColor=000000&logoColor=FFFFFF&label=pulls&color=6A35FF\" /></a>\n<a href=\"https://github.com/mage-ai/mage-ai/blob/master/LICENSE\"><img alt=\"Mage AI license\" src=\"https://img.shields.io/github/license/mage-ai/mage-ai?style=for-the-badge&logo=codeigniter&labelColor=000000&logoColor=FFFFFF&label=license&color=FFCC19\" /></a>\n<a href=\"https://www.mage.ai/chat\"><img alt=\"Join the Mage AI community\" src=\"https://img.shields.io/badge/Join%20the%20community-black.svg?style=for-the-badge&logo=lightning&labelColor=000000&logoColor=FFFFFF&label=&color=DD55FF&logoWidth=20\" /></a>\n\n</div>\n\n<br />\n\n<a href=\"https://mage.ai/pro\">\n <picture>\n <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://github.com/mage-ai/assets/blob/main/oss/hero.png?raw=true\">\n <img alt=\"Mage AI hero\" src=\"https://github.com/mage-ai/assets/blob/main/oss/hero.png?raw=true\" />\n </picture>\n</a>\n\n<br />\n<br />\n\nMage is a hybrid framework for transforming and integrating data. It combines the best of both worlds: the flexibility of notebooks with the rigor of modular code.\n\n<br />\n\n- Extract and synchronize data from 3rd party sources.\n- Transform data with real-time and batch pipelines using Python, SQL, and R.\n- Load data into your data warehouse or data lake using our pre-built connectors.\n- Run, monitor, and orchestrate thousands of pipelines without losing sleep.\n\n<br />\n\nPlus hundreds of enterprise-class features, infrastructure innovations, and magical surprises.\n\n<h1></h1>\n\n#### Available in two spellbinding versions\n\n<br />\n\n<table style=\"width: 100%; border: none;\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n <tr>\n <td rowspan=\"2\">\n <a href=\"https://mage.ai/pro\">\n <img alt=\"Mage Pro\" width=\"124\" align=\"left\" src=\"https://github.com/mage-ai/assets/blob/main/oss/card-pro.png?raw=true\" />\n </a>\n <b>For teams.</b> Fully managed platform\n for integrating and transforming data.\n </td>\n <td rowspan=\"2\">\n <a href=\"https://github.com/mage-ai/mage-ai?tab=readme-ov-file#its-magic\">\n <img alt=\"Mage OSS\" width=\"124\" align=\"left\" src=\"https://github.com/mage-ai/assets/blob/main/oss/card-oss.png?raw=true\" />\n </a>\n <b>Self-hosted.</b> System to build, run, and\n manage data pipelines.\n </td>\n </tr>\n</table>\n\n<br />\n\n<a href=\"https://mage.ai/pro\">\n <img alt=\"Try out Mage Pro\" src=\"https://img.shields.io/badge/try%20it%20out%20now-black.svg?style=for-the-badge&logo=artifacthub&labelColor=6A35FF&logoColor=FFFFFF&label=mage%20pro&color=6A35FF\">\n</a>\n\n<br />\n<br />\n\n<div align=\"left\">\n\n# It\u2019s magic.\n\n<p align=\"left\">\n For documentation on getting started, how to develop, and how to deploy to production check out the live \n <br />\n <a\n href=\"https://docs.mage.ai?source=github\"\n target=\"_blank\"\n ><b>Developer documentation portal</b></a>.\n</p>\n\n<br />\n\n## \ud83c\udfc3\u200d\u2640\ufe0f Install\n\nThe recommended way to install the latest version of Mage is through Docker with the following command:\n\n```bash\ndocker pull mageai/mageai:latest\n```\n\nYou can also install Mage using pip or conda, though this may cause dependency issues without the proper environment.\n\n```bash\npip install mage-ai\n```\n```bash\nconda install -c conda-forge mage-ai\n```\n\nLooking for help? The _fastest_ way to get started is by checking out our documentation [here](https://docs.mage.ai/getting-started/setup).\n\nLooking for quick examples? Open a [demo](https://demo.mage.ai/) project right in your browser or check out our [guides](https://docs.mage.ai/guides/overview).\n\n## \ud83c\udfae Demo\n\n### Live demo\n\nBuild and run a data pipeline with our <b>[demo app](https://demo.mage.ai/)</b>.\n\n> WARNING\n>\n> The live demo is public to everyone, please don\u2019t save anything sensitive (e.g. passwords, secrets, etc).\n### Demo video (5 min)\n\n[](https://youtu.be/GswOdShLGmg)\n\n<sub><i>Click the image to play video</i></sub>\n\n<br />\n\n## \ud83d\udd2e [Features](https://docs.mage.ai/about/features)\n\n| | | |\n| --- | --- | --- |\n| \ud83c\udfb6 | <b>[Orchestration](https://docs.mage.ai/design/data-pipeline-management)</b> | Schedule and manage data pipelines with observability. |\n| \ud83d\udcd3 | <b>[Notebook](https://docs.mage.ai/about/features#notebook-for-building-data-pipelines)</b> | Interactive Python, SQL, & R editor for coding data pipelines. |\n| \ud83c\udfd7\ufe0f | <b>[Data integrations](https://docs.mage.ai/data-integrations/overview)</b> | Synchronize data from 3rd party sources to your internal destinations. |\n| \ud83d\udeb0 | <b>[Streaming pipelines](https://docs.mage.ai/guides/streaming-pipeline)</b> | Ingest and transform real-time data. |\n| \u274e | <b>[dbt](https://docs.mage.ai/dbt/overview)</b> | Build, run, and manage your dbt models with Mage. |\n\n<br />\n\n<b>A sample data pipeline defined across 3 files \u279d</b>\n\n<br />\n\n1. Load data \u279d\n ```python\n @data_loader\n def load_csv_from_file() -> pl.DataFrame:\n return pl.read_csv('default_repo/titanic.csv')\n ```\n1. Transform data \u279d\n ```python\n @transformer\n def select_columns_from_df(df: pl.DataFrame, *args) -> pl.DataFrame:\n return df[['Age', 'Fare', 'Survived']]\n ```\n1. Export data \u279d\n ```python\n @data_exporter\n def export_titanic_data_to_disk(df: pl.DataFrame) -> None:\n df.to_csv('default_repo/titanic_transformed.csv')\n ```\n\n<br />\n\n[<img alt=\"Water mage casting spell\" height=\"300\" src=\"https://github.com/mage-ai/assets/blob/main/mage-water-charging-up.svg?raw=True\" />](https://www.mage.ai/)\n",
"bugtrack_url": null,
"license": null,
"summary": "Mage is a tool for building and deploying data pipelines.",
"version": "0.9.75",
"project_urls": {
"Homepage": "https://github.com/mage-ai/mage-ai"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0d0bad619fcd5a48853e614463d20414ffbe57e782f0e94abe86a090886a17ba",
"md5": "ddfa957a5a9c5bbe263a303e27b917f1",
"sha256": "5c69846c4538943bd3471b440ee386d05eb01d3e34851d97f82ed12a343e2989"
},
"downloads": -1,
"filename": "mage_ai-0.9.75-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ddfa957a5a9c5bbe263a303e27b917f1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 39905877,
"upload_time": "2024-12-04T07:27:08",
"upload_time_iso_8601": "2024-12-04T07:27:08.336062Z",
"url": "https://files.pythonhosted.org/packages/0d/0b/ad619fcd5a48853e614463d20414ffbe57e782f0e94abe86a090886a17ba/mage_ai-0.9.75-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "561734d00ddab8b09bbfebaaaaebbd731a57209790269acb57136efea3038b80",
"md5": "156667d462f1b8c0debc8c133299a21d",
"sha256": "0852b564985904c26d6dd1dda27379b706fb05f065129047bde3cb2eb2cce3a1"
},
"downloads": -1,
"filename": "mage_ai-0.9.75.tar.gz",
"has_sig": false,
"md5_digest": "156667d462f1b8c0debc8c133299a21d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 38082682,
"upload_time": "2024-12-04T07:27:12",
"upload_time_iso_8601": "2024-12-04T07:27:12.618822Z",
"url": "https://files.pythonhosted.org/packages/56/17/34d00ddab8b09bbfebaaaaebbd731a57209790269acb57136efea3038b80/mage_ai-0.9.75.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-04 07:27:12",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mage-ai",
"github_project": "mage-ai",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "cachetools",
"specs": []
},
{
"name": "Faker",
"specs": [
[
"==",
"4.14.0"
]
]
},
{
"name": "GitPython",
"specs": [
[
"==",
"3.1.41"
]
]
},
{
"name": "Jinja2",
"specs": [
[
"==",
"3.1.3"
]
]
},
{
"name": "Pillow",
"specs": [
[
"==",
"10.3.0"
]
]
},
{
"name": "PyGithub",
"specs": [
[
"==",
"1.59.0"
]
]
},
{
"name": "PyJWT",
"specs": [
[
"==",
"2.6.0"
]
]
},
{
"name": "aiofiles",
"specs": [
[
"==",
"22.1.0"
]
]
},
{
"name": "aiohttp",
"specs": [
[
"==",
"3.10.0"
]
]
},
{
"name": "alembic",
"specs": [
[
">=",
"1.7.5"
]
]
},
{
"name": "bcrypt",
"specs": [
[
"==",
"4.0.1"
]
]
},
{
"name": "croniter",
"specs": [
[
"==",
"1.3.7"
]
]
},
{
"name": "cryptography",
"specs": [
[
"==",
"42.0.0"
]
]
},
{
"name": "dask",
"specs": [
[
">=",
"2022.2.0"
]
]
},
{
"name": "datadog",
"specs": [
[
"==",
"0.44.0"
]
]
},
{
"name": "freezegun",
"specs": [
[
"==",
"1.2.2"
]
]
},
{
"name": "great-expectations",
"specs": [
[
"==",
"0.18.12"
]
]
},
{
"name": "httpx",
"specs": [
[
"==",
"0.23.1"
]
]
},
{
"name": "inflection",
"specs": [
[
"==",
"0.5.1"
]
]
},
{
"name": "ipykernel",
"specs": [
[
"==",
"6.15.0"
]
]
},
{
"name": "ipython",
"specs": [
[
"==",
"8.10.0"
]
]
},
{
"name": "itsdangerous",
"specs": [
[
"~=",
"1.1.0"
]
]
},
{
"name": "joblib",
"specs": [
[
">=",
"1.1.0"
]
]
},
{
"name": "jupyter-server",
"specs": [
[
"==",
"2.14.1"
]
]
},
{
"name": "jupyter_client",
"specs": [
[
"==",
"7.4.4"
]
]
},
{
"name": "ldap3",
"specs": [
[
"==",
"2.9.1"
]
]
},
{
"name": "memory_profiler",
"specs": []
},
{
"name": "newrelic",
"specs": [
[
"==",
"8.8.0"
]
]
},
{
"name": "numpy",
"specs": [
[
">=",
"1.22.0"
]
]
},
{
"name": "pandas",
"specs": [
[
">=",
"1.3.0"
]
]
},
{
"name": "polars",
"specs": [
[
"<",
"0.19.2"
],
[
">=",
"0.18.0"
]
]
},
{
"name": "protobuf",
"specs": [
[
"~=",
"4.21.12"
]
]
},
{
"name": "psutil",
"specs": [
[
"==",
"5.9.8"
]
]
},
{
"name": "pyarrow",
"specs": [
[
">=",
"14.0.1"
]
]
},
{
"name": "python-dateutil",
"specs": [
[
"==",
"2.8.2"
]
]
},
{
"name": "pytz",
"specs": [
[
">=",
"2022.2.1"
]
]
},
{
"name": "pyyaml",
"specs": [
[
"~=",
"6.0"
]
]
},
{
"name": "redis",
"specs": [
[
"~=",
"5.0.1"
]
]
},
{
"name": "requests",
"specs": [
[
"~=",
"2.31.0"
]
]
},
{
"name": "ruamel.yaml",
"specs": [
[
"==",
"0.17.17"
]
]
},
{
"name": "scikit-learn",
"specs": [
[
">=",
"1.0"
]
]
},
{
"name": "sentry-sdk",
"specs": [
[
"==",
"1.19.1"
]
]
},
{
"name": "setuptools",
"specs": [
[
"==",
"70.0.0"
]
]
},
{
"name": "simplejson",
"specs": []
},
{
"name": "six",
"specs": [
[
">=",
"1.15.0"
]
]
},
{
"name": "sqlalchemy",
"specs": [
[
">=",
"1.4.20"
],
[
"<",
"2.0.0"
]
]
},
{
"name": "sqlglot",
"specs": []
},
{
"name": "terminado",
"specs": [
[
"==",
"0.17.1"
]
]
},
{
"name": "thefuzz",
"specs": [
[
"==",
"0.19.0"
]
]
},
{
"name": "tornado",
"specs": [
[
"==",
"6.3.3"
]
]
},
{
"name": "typer",
"specs": [
[
"==",
"0.9.0"
]
]
},
{
"name": "typing_extensions",
"specs": [
[
"==",
"4.10.0"
]
]
},
{
"name": "watchdog",
"specs": [
[
"==",
"4.0.0"
]
]
},
{
"name": "Werkzeug",
"specs": [
[
"==",
"3.0.3"
]
]
},
{
"name": "astor",
"specs": [
[
">=",
"0.8.1"
]
]
},
{
"name": "aws-secretsmanager-caching",
"specs": [
[
"==",
"1.1.1.5"
]
]
},
{
"name": "boto3",
"specs": [
[
"==",
"1.26.60"
]
]
},
{
"name": "botocore",
"specs": [
[
"==",
"1.29.60"
]
]
},
{
"name": "clickhouse-connect",
"specs": [
[
"~=",
"0.6.23"
]
]
},
{
"name": "db-dtypes",
"specs": [
[
"==",
"1.0.5"
]
]
},
{
"name": "duckdb",
"specs": [
[
"==",
"1.0.0"
]
]
},
{
"name": "google-api-core",
"specs": [
[
"~=",
"2.15.0"
]
]
},
{
"name": "google-api-python-client",
"specs": [
[
"~=",
"2.70.0"
]
]
},
{
"name": "google-cloud-bigquery",
"specs": [
[
"~=",
"3.14.1"
]
]
},
{
"name": "google-cloud-iam",
"specs": [
[
"~=",
"2.13.0"
]
]
},
{
"name": "google-cloud-pubsub",
"specs": [
[
"~=",
"2.19.0"
]
]
},
{
"name": "google-cloud-run",
"specs": [
[
"~=",
"0.10.1"
]
]
},
{
"name": "google-cloud-storage",
"specs": [
[
"~=",
"2.5.0"
]
]
},
{
"name": "gspread",
"specs": [
[
"==",
"5.7.2"
]
]
},
{
"name": "kubernetes",
"specs": [
[
">=",
"28.1.0"
]
]
},
{
"name": "langchain",
"specs": [
[
"==",
"0.1.6"
]
]
},
{
"name": "langchain_community",
"specs": [
[
"<",
"0.0.20"
]
]
},
{
"name": "mysql-connector-python",
"specs": [
[
"~=",
"8.2.0"
]
]
},
{
"name": "mysql-connector-python",
"specs": [
[
"~=",
"9.0.0"
]
]
},
{
"name": "openai",
"specs": [
[
"==",
"1.39.0"
]
]
},
{
"name": "opentelemetry-api",
"specs": [
[
"==",
"1.22.0"
]
]
},
{
"name": "opentelemetry-exporter-prometheus",
"specs": [
[
"==",
"0.43b0"
]
]
},
{
"name": "opentelemetry-instrumentation-tornado",
"specs": [
[
"==",
"0.43b0"
]
]
},
{
"name": "opentelemetry-exporter-otlp",
"specs": [
[
"==",
"1.22.0"
]
]
},
{
"name": "opentelemetry-instrumentation-sqlalchemy",
"specs": [
[
"==",
"0.43b0"
]
]
},
{
"name": "oracledb",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "oracledb",
"specs": [
[
"==",
"2.4.1"
]
]
},
{
"name": "pinotdb",
"specs": [
[
"==",
"5.1.0"
]
]
},
{
"name": "prometheus_client",
"specs": [
[
">=",
"0.18.0"
]
]
},
{
"name": "psycopg2",
"specs": [
[
"==",
"2.9.3"
]
]
},
{
"name": "psycopg2-binary",
"specs": [
[
"==",
"2.9.3"
]
]
},
{
"name": "pyairtable",
"specs": [
[
"==",
"2.3.3"
]
]
},
{
"name": "pydruid",
"specs": [
[
"==",
"0.6.5"
]
]
},
{
"name": "pyodbc",
"specs": [
[
"==",
"4.0.35"
]
]
},
{
"name": "pyodbc",
"specs": [
[
"==",
"5.0.1"
]
]
},
{
"name": "redshift-connector",
"specs": [
[
"==",
"2.0.915"
]
]
},
{
"name": "lxml",
"specs": [
[
"==",
"4.9.4"
]
]
},
{
"name": "snowflake-connector-python",
"specs": [
[
"==",
"3.7.1"
]
]
},
{
"name": "sshtunnel",
"specs": [
[
"==",
"0.4.0"
]
]
},
{
"name": "tables",
"specs": [
[
"==",
"3.7.0"
]
]
},
{
"name": "tables",
"specs": [
[
"==",
"3.10.1"
]
]
},
{
"name": "trino",
"specs": [
[
"~=",
"0.326"
]
]
},
{
"name": "azure-eventhub",
"specs": [
[
"==",
"5.11.2"
]
]
},
{
"name": "azure-identity",
"specs": [
[
"==",
"1.12.0"
]
]
},
{
"name": "azure-keyvault-secrets",
"specs": [
[
"==",
"4.6.0"
]
]
},
{
"name": "azure-keyvault-certificates",
"specs": [
[
"==",
"4.6.0"
]
]
},
{
"name": "azure-mgmt-containerinstance",
"specs": [
[
"==",
"10.1.0"
]
]
},
{
"name": "azure-storage-blob",
"specs": [
[
"==",
"12.14.1"
]
]
},
{
"name": "confluent-avro",
"specs": [
[
"~=",
"1.8.0"
]
]
},
{
"name": "elasticsearch",
"specs": [
[
"==",
"8.15.1"
]
]
},
{
"name": "influxdb_client",
"specs": [
[
"==",
"1.36.1"
]
]
},
{
"name": "kafka-python",
"specs": [
[
"==",
"2.0.2"
]
]
},
{
"name": "nats-py",
"specs": [
[
"==",
"2.6.0"
]
]
},
{
"name": "nkeys",
"specs": [
[
"~=",
"0.1.0"
]
]
},
{
"name": "nkeys",
"specs": [
[
"~=",
"0.2.0"
]
]
},
{
"name": "opensearch-py",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "pika",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "pymongo",
"specs": [
[
"==",
"4.3.3"
]
]
},
{
"name": "requests_aws4auth",
"specs": [
[
"==",
"1.1.2"
]
]
},
{
"name": "stomp.py",
"specs": [
[
"==",
"8.1.0"
]
]
},
{
"name": "dbt-bigquery",
"specs": [
[
"==",
"1.7.2"
]
]
},
{
"name": "dbt-clickhouse",
"specs": [
[
"==",
"1.7.1"
]
]
},
{
"name": "dbt-core",
"specs": [
[
"==",
"1.7.4"
]
]
},
{
"name": "dbt-duckdb",
"specs": [
[
"==",
"1.7.0"
]
]
},
{
"name": "dbt-postgres",
"specs": [
[
"==",
"1.7.4"
]
]
},
{
"name": "dbt-redshift",
"specs": [
[
"==",
"1.7.1"
]
]
},
{
"name": "dbt-snowflake",
"specs": [
[
"==",
"1.7.1"
]
]
},
{
"name": "dbt-spark",
"specs": [
[
"==",
"1.7.1"
]
]
},
{
"name": "dbt-sqlserver",
"specs": [
[
"==",
"1.7.4"
]
]
},
{
"name": "dbt-trino",
"specs": [
[
"==",
"1.7.1"
]
]
},
{
"name": "async-timeout",
"specs": [
[
"==",
"4.0.3"
]
]
},
{
"name": "attrs",
"specs": [
[
"==",
"22.2.0"
]
]
},
{
"name": "attrs",
"specs": [
[
"==",
"24.2.0"
]
]
},
{
"name": "backoff",
"specs": []
},
{
"name": "clickhouse_sqlalchemy",
"specs": []
},
{
"name": "deltalake",
"specs": [
[
"==",
"0.20.2"
]
]
},
{
"name": "facebook_business",
"specs": [
[
"==",
"17.0.2"
]
]
},
{
"name": "gnupg",
"specs": [
[
"==",
"2.3.1"
]
]
},
{
"name": "google-analytics-data",
"specs": [
[
"==",
"0.14.2"
]
]
},
{
"name": "google-analytics-data",
"specs": [
[
"==",
"0.15.0"
]
]
},
{
"name": "google-cloud-bigquery-storage",
"specs": [
[
"==",
"2.16.2"
]
]
},
{
"name": "google-cloud-bigquery-storage",
"specs": [
[
"==",
"2.26.0"
]
]
},
{
"name": "httpx",
"specs": []
},
{
"name": "pendulum",
"specs": [
[
"==",
"2.1.0"
]
]
},
{
"name": "pendulum",
"specs": [
[
"==",
"3.0.0"
]
]
},
{
"name": "pymongo_schema",
"specs": [
[
"==",
"0.4.1"
]
]
},
{
"name": "python-magic",
"specs": [
[
"==",
"0.4.27"
]
]
},
{
"name": "redshift-connector",
"specs": [
[
"~=",
"2.0.915"
]
]
},
{
"name": "requests_mock",
"specs": [
[
"==",
"1.10.0"
]
]
},
{
"name": "simple_salesforce",
"specs": [
[
"~=",
"1.12.5"
]
]
},
{
"name": "singer_sdk",
"specs": [
[
"~=",
"0.34.1"
]
]
},
{
"name": "stripe",
"specs": [
[
"==",
"5.5.0"
]
]
},
{
"name": "terminaltables",
"specs": [
[
"==",
"3.1.10"
]
]
},
{
"name": "twitter-ads",
"specs": [
[
"==",
"11.0.0"
]
]
},
{
"name": "tzlocal",
"specs": [
[
"==",
"4.2"
]
]
},
{
"name": "xlsx2csv",
"specs": [
[
"==",
"0.8.1"
]
]
},
{
"name": "xmltodict",
"specs": [
[
"==",
"0.13.0"
]
]
},
{
"name": "zenpy",
"specs": [
[
"==",
"2.0.25"
]
]
}
],
"lcname": "mage-ai"
}