From 78bd4441d65b0b46adc07004c0223cf1ffc18278 Mon Sep 17 00:00:00 2001 From: surya <118222278+suryaiyer95@users.noreply.github.com> Date: Tue, 21 Jan 2025 13:23:03 -0800 Subject: [PATCH] fix: remove extra forbid constraint (#48) * fix: remove extra forbid constraint * fix: formatting black * fix: tests for multiple pydantic version and removing tests for (3.8 EOL and failing due to rust also for now) * fix: tests * fix: ignore warnings * fix: disable tests * fix: remove pyp38 tests * fix: test envs * fix: ci * fix: actions --- .github/workflows/github-actions.yml | 258 +++++------------- src/datapilot/constants.py | 7 - .../core/platforms/dbt/schemas/catalog.py | 27 -- .../core/platforms/dbt/schemas/manifest.py | 51 ---- tox.ini | 8 +- 5 files changed, 68 insertions(+), 283 deletions(-) delete mode 100644 src/datapilot/constants.py diff --git a/.github/workflows/github-actions.yml b/.github/workflows/github-actions.yml index c905cae8..1478e850 100644 --- a/.github/workflows/github-actions.yml +++ b/.github/workflows/github-actions.yml @@ -19,294 +19,162 @@ jobs: toxpython: 'python3.11' tox_env: 'docs' os: 'ubuntu-latest' - - name: 'py38-cover (ubuntu)' - python: '3.8' - toxpython: 'python3.8' - python_arch: 'x64' - tox_env: 'py38-cover' - os: 'ubuntu-latest' - - name: 'py38-cover (windows)' - python: '3.8' - toxpython: 'python3.8' - python_arch: 'x64' - tox_env: 'py38-cover' - os: 'windows-latest' - - name: 'py38-cover (macos)' - python: '3.8' - toxpython: 'python3.8' - python_arch: 'x64' - tox_env: 'py38-cover' - os: 'macos-13' - - name: 'py38-nocov (ubuntu)' - python: '3.8' - toxpython: 'python3.8' - python_arch: 'x64' - tox_env: 'py38-nocov' - os: 'ubuntu-latest' - - name: 'py38-nocov (windows)' - python: '3.8' - toxpython: 'python3.8' - python_arch: 'x64' - tox_env: 'py38-nocov' - os: 'windows-latest' - - name: 'py38-nocov (macos)' - python: '3.8' - toxpython: 'python3.8' - python_arch: 'x64' - tox_env: 'py38-nocov' - os: 'macos-13' - - name: 'py39-cover (ubuntu)' + - name: 'py39-pydantic28-cover (ubuntu)' python: '3.9' toxpython: 'python3.9' python_arch: 'x64' - tox_env: 'py39-cover' + tox_env: 'py39-pydantic28-cover' os: 'ubuntu-latest' - - name: 'py39-cover (windows)' + - name: 'py39-pydantic28-cover (windows)' python: '3.9' toxpython: 'python3.9' python_arch: 'x64' - tox_env: 'py39-cover' + tox_env: 'py39-pydantic28-cover' os: 'windows-latest' - - name: 'py39-cover (macos)' + - name: 'py39-pydantic28-cover (macos)' python: '3.9' toxpython: 'python3.9' python_arch: 'x64' - tox_env: 'py39-cover' + tox_env: 'py39-pydantic28-cover' os: 'macos-13' - - name: 'py39-nocov (ubuntu)' + - name: 'py39-pydantic210-cover' python: '3.9' toxpython: 'python3.9' python_arch: 'x64' - tox_env: 'py39-nocov' + tox_env: 'py39-pydantic210-cover' os: 'ubuntu-latest' - - name: 'py39-nocov (windows)' + - name: 'py39-pydantic28-nocov' python: '3.9' toxpython: 'python3.9' python_arch: 'x64' - tox_env: 'py39-nocov' - os: 'windows-latest' - - name: 'py39-nocov (macos)' + tox_env: 'py39-pydantic28-nocov' + os: 'ubuntu-latest' + - name: 'py39-pydantic210-nocov' python: '3.9' toxpython: 'python3.9' python_arch: 'x64' - tox_env: 'py39-nocov' - os: 'macos-13' - - name: 'py310-cover (ubuntu)' - python: '3.10' - toxpython: 'python3.10' - python_arch: 'x64' - tox_env: 'py310-cover' + tox_env: 'py39-pydantic210-nocov' os: 'ubuntu-latest' - - name: 'py310-cover (windows)' - python: '3.10' - toxpython: 'python3.10' - python_arch: 'x64' - tox_env: 'py310-cover' - os: 'windows-latest' - - name: 'py310-cover (macos)' + - name: 'py310-pydantic28-cover' python: '3.10' toxpython: 'python3.10' python_arch: 'x64' - tox_env: 'py310-cover' - os: 'macos-13' - - name: 'py310-nocov (ubuntu)' + tox_env: 'py310-pydantic28-cover' + os: 'ubuntu-latest' + - name: 'py310-pydantic210-cover' python: '3.10' toxpython: 'python3.10' python_arch: 'x64' - tox_env: 'py310-nocov' + tox_env: 'py310-pydantic210-cover' os: 'ubuntu-latest' - - name: 'py310-nocov (windows)' + - name: 'py310-pydantic28-nocov' python: '3.10' toxpython: 'python3.10' python_arch: 'x64' - tox_env: 'py310-nocov' - os: 'windows-latest' - - name: 'py310-nocov (macos)' + tox_env: 'py310-pydantic28-nocov' + os: 'ubuntu-latest' + - name: 'py310-pydantic210-nocov' python: '3.10' toxpython: 'python3.10' python_arch: 'x64' - tox_env: 'py310-nocov' - os: 'macos-13' - - name: 'py311-cover (ubuntu)' - python: '3.11' - toxpython: 'python3.11' - python_arch: 'x64' - tox_env: 'py311-cover' + tox_env: 'py310-pydantic210-nocov' os: 'ubuntu-latest' - - name: 'py311-cover (windows)' + - name: 'py311-pydantic28-cover' python: '3.11' toxpython: 'python3.11' python_arch: 'x64' - tox_env: 'py311-cover' - os: 'windows-latest' - - name: 'py311-cover (macos)' - python: '3.11' - toxpython: 'python3.11' - python_arch: 'x64' - tox_env: 'py311-cover' - os: 'macos-13' - - name: 'py311-nocov (ubuntu)' + tox_env: 'py311-pydantic28-cover' + os: 'ubuntu-latest' + - name: 'py311-pydantic210-cover' python: '3.11' toxpython: 'python3.11' python_arch: 'x64' - tox_env: 'py311-nocov' + tox_env: 'py311-pydantic210-cover' os: 'ubuntu-latest' - - name: 'py311-nocov (windows)' + - name: 'py311-pydantic28-nocov' python: '3.11' toxpython: 'python3.11' python_arch: 'x64' - tox_env: 'py311-nocov' - os: 'windows-latest' - - name: 'py311-nocov (macos)' + tox_env: 'py311-pydantic28-nocov' + os: 'ubuntu-latest' + - name: 'py311-pydantic210-nocov' python: '3.11' toxpython: 'python3.11' python_arch: 'x64' - tox_env: 'py311-nocov' - os: 'macos-13' - - name: 'py312-cover (ubuntu)' - python: '3.12' - toxpython: 'python3.12' - python_arch: 'x64' - tox_env: 'py312-cover' + tox_env: 'py311-pydantic210-nocov' os: 'ubuntu-latest' - - name: 'py312-cover (windows)' - python: '3.12' - toxpython: 'python3.12' - python_arch: 'x64' - tox_env: 'py312-cover' - os: 'windows-latest' - - name: 'py312-cover (macos)' + - name: 'py312-pydantic28-cover' python: '3.12' toxpython: 'python3.12' python_arch: 'x64' - tox_env: 'py312-cover' - os: 'macos-13' - - name: 'py312-nocov (ubuntu)' + tox_env: 'py312-pydantic28-cover' + os: 'ubuntu-latest' + - name: 'py312-pydantic210-cover' python: '3.12' toxpython: 'python3.12' python_arch: 'x64' - tox_env: 'py312-nocov' + tox_env: 'py312-pydantic210-cover' os: 'ubuntu-latest' - - name: 'py312-nocov (windows)' + - name: 'py312-pydantic28-nocov' python: '3.12' toxpython: 'python3.12' python_arch: 'x64' - tox_env: 'py312-nocov' - os: 'windows-latest' - - name: 'py312-nocov (macos)' + tox_env: 'py312-pydantic28-nocov' + os: 'ubuntu-latest' + - name: 'py312-pydantic210-nocov' python: '3.12' toxpython: 'python3.12' python_arch: 'x64' - tox_env: 'py312-nocov' - os: 'macos-13' - - name: 'pypy38-cover (ubuntu)' - python: 'pypy-3.8' - toxpython: 'pypy3.8' - python_arch: 'x64' - tox_env: 'pypy38-cover' - os: 'ubuntu-latest' - - name: 'pypy38-cover (windows)' - python: 'pypy-3.8' - toxpython: 'pypy3.8' - python_arch: 'x64' - tox_env: 'pypy38-cover' - os: 'windows-latest' - - name: 'pypy38-cover (macos)' - python: 'pypy-3.8' - toxpython: 'pypy3.8' - python_arch: 'x64' - tox_env: 'pypy38-cover' - os: 'macos-13' - - name: 'pypy38-nocov (ubuntu)' - python: 'pypy-3.8' - toxpython: 'pypy3.8' - python_arch: 'x64' - tox_env: 'pypy38-nocov' + tox_env: 'py312-pydantic210-nocov' os: 'ubuntu-latest' - - name: 'pypy38-nocov (windows)' - python: 'pypy-3.8' - toxpython: 'pypy3.8' - python_arch: 'x64' - tox_env: 'pypy38-nocov' - os: 'windows-latest' - - name: 'pypy38-nocov (macos)' - python: 'pypy-3.8' - toxpython: 'pypy3.8' - python_arch: 'x64' - tox_env: 'pypy38-nocov' - os: 'macos-13' - - name: 'pypy39-cover (ubuntu)' + - name: 'pypy39-pydantic28-cover' python: 'pypy-3.9' toxpython: 'pypy3.9' python_arch: 'x64' - tox_env: 'pypy39-cover' + tox_env: 'pypy39-pydantic28-cover' os: 'ubuntu-latest' - - name: 'pypy39-cover (windows)' + - name: 'pypy39-pydantic210-cover' python: 'pypy-3.9' toxpython: 'pypy3.9' python_arch: 'x64' - tox_env: 'pypy39-cover' - os: 'windows-latest' - - name: 'pypy39-cover (macos)' - python: 'pypy-3.9' - toxpython: 'pypy3.9' - python_arch: 'x64' - tox_env: 'pypy39-cover' - os: 'macos-13' - - name: 'pypy39-nocov (ubuntu)' - python: 'pypy-3.9' - toxpython: 'pypy3.9' - python_arch: 'x64' - tox_env: 'pypy39-nocov' + tox_env: 'pypy39-pydantic210-cover' os: 'ubuntu-latest' - - name: 'pypy39-nocov (windows)' + - name: 'pypy39-pydantic28-nocov' python: 'pypy-3.9' toxpython: 'pypy3.9' python_arch: 'x64' - tox_env: 'pypy39-nocov' - os: 'windows-latest' - - name: 'pypy39-nocov (macos)' + tox_env: 'pypy39-pydantic28-nocov' + os: 'ubuntu-latest' + - name: 'pypy39-pydantic210-nocov' python: 'pypy-3.9' toxpython: 'pypy3.9' python_arch: 'x64' - tox_env: 'pypy39-nocov' - os: 'macos-13' - - name: 'pypy310-cover (ubuntu)' - python: 'pypy-3.10' - toxpython: 'pypy3.10' - python_arch: 'x64' - tox_env: 'pypy310-cover' + tox_env: 'pypy39-pydantic210-nocov' os: 'ubuntu-latest' - - name: 'pypy310-cover (windows)' + - name: 'pypy310-pydantic28-cover' python: 'pypy-3.10' toxpython: 'pypy3.10' python_arch: 'x64' - tox_env: 'pypy310-cover' - os: 'windows-latest' - - name: 'pypy310-cover (macos)' - python: 'pypy-3.10' - toxpython: 'pypy3.10' - python_arch: 'x64' - tox_env: 'pypy310-cover' - os: 'macos-13' - - name: 'pypy310-nocov (ubuntu)' + tox_env: 'pypy310-pydantic28-cover' + os: 'ubuntu-latest' + - name: 'pypy310-pydantic210-cover' python: 'pypy-3.10' toxpython: 'pypy3.10' python_arch: 'x64' - tox_env: 'pypy310-nocov' + tox_env: 'pypy310-pydantic210-cover' os: 'ubuntu-latest' - - name: 'pypy310-nocov (windows)' + - name: 'pypy310-pydantic28-nocov' python: 'pypy-3.10' toxpython: 'pypy3.10' python_arch: 'x64' - tox_env: 'pypy310-nocov' - os: 'windows-latest' - - name: 'pypy310-nocov (macos)' + tox_env: 'pypy310-pydantic28-nocov' + os: 'ubuntu-latest' + - name: 'pypy310-pydantic210-nocov' python: 'pypy-3.10' toxpython: 'pypy3.10' python_arch: 'x64' - tox_env: 'pypy310-nocov' - os: 'macos-13' + tox_env: 'pypy310-pydantic210-nocov' + os: 'ubuntu-latest' steps: - uses: actions/checkout@v4 with: diff --git a/src/datapilot/constants.py b/src/datapilot/constants.py deleted file mode 100644 index aed1f350..00000000 --- a/src/datapilot/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -from enum import Enum - - -class Extra(str, Enum): - allow = "allow" - forbid = "forbid" - ignore = "ignore" diff --git a/src/datapilot/core/platforms/dbt/schemas/catalog.py b/src/datapilot/core/platforms/dbt/schemas/catalog.py index 288557f9..2f182d4f 100644 --- a/src/datapilot/core/platforms/dbt/schemas/catalog.py +++ b/src/datapilot/core/platforms/dbt/schemas/catalog.py @@ -5,17 +5,10 @@ from typing import Optional from typing import Union -from pydantic import ConfigDict from pydantic.main import BaseModel -from datapilot.constants import Extra - class AltimateCatalogMetadata(BaseModel): - model_config = ConfigDict( - extra=Extra.forbid, - ) - dbt_schema_version: Optional[str] = "https://schemas.getdbt.com/dbt/catalog/v1.json" dbt_version: Optional[str] = "0.19.0" generated_at: Optional[datetime] = "2021-02-10T04:42:33.680487Z" @@ -24,10 +17,6 @@ class AltimateCatalogMetadata(BaseModel): class AltimateCatalogTableMetadata(BaseModel): - model_config = ConfigDict( - extra=Extra.forbid, - ) - type: str database: Optional[Optional[str]] = None schema_name: str @@ -37,10 +26,6 @@ class AltimateCatalogTableMetadata(BaseModel): class AltimateCatalogColumnMetadata(BaseModel): - model_config = ConfigDict( - extra=Extra.forbid, - ) - type: str comment: Optional[Optional[str]] = None index: int @@ -48,10 +33,6 @@ class AltimateCatalogColumnMetadata(BaseModel): class AltimateCatalogStatsItem(BaseModel): - model_config = ConfigDict( - extra=Extra.forbid, - ) - id: str label: str value: Optional[Optional[Union[bool, str, float]]] = None @@ -60,10 +41,6 @@ class AltimateCatalogStatsItem(BaseModel): class AltimateCatalogTable(BaseModel): - model_config = ConfigDict( - extra=Extra.forbid, - ) - metadata: AltimateCatalogTableMetadata columns: Dict[str, AltimateCatalogColumnMetadata] stats: Dict[str, AltimateCatalogStatsItem] @@ -71,10 +48,6 @@ class AltimateCatalogTable(BaseModel): class AltimateCatalogCatalogV1(BaseModel): - model_config = ConfigDict( - extra=Extra.forbid, - ) - metadata: AltimateCatalogMetadata nodes: Dict[str, AltimateCatalogTable] sources: Dict[str, AltimateCatalogTable] diff --git a/src/datapilot/core/platforms/dbt/schemas/manifest.py b/src/datapilot/core/platforms/dbt/schemas/manifest.py index bee2a07a..4af4e8ea 100644 --- a/src/datapilot/core/platforms/dbt/schemas/manifest.py +++ b/src/datapilot/core/platforms/dbt/schemas/manifest.py @@ -19,9 +19,6 @@ from dbt_artifacts_parser.parsers.manifest.manifest_v11 import ManifestV11 from dbt_artifacts_parser.parsers.manifest.manifest_v11 import SupportedLanguage from pydantic import BaseModel -from pydantic import ConfigDict - -from datapilot.constants import Extra class DBTVersion(BaseModel): @@ -48,10 +45,6 @@ class DBTVersion(BaseModel): class AltimateDocs(BaseModel): - model_config = ConfigDict( - extra=Extra.forbid, - ) - show: Optional[bool] = True node_color: Optional[Optional[str]] = None @@ -101,20 +94,12 @@ class AltimateAccess(Enum): class AltimateDBTContract(BaseModel): - model_config = ConfigDict( - extra=Extra.forbid, - ) - enforced: Optional[bool] = False alias_types: Optional[bool] = True checksum: Optional[Optional[str]] = None class AltimateHook(BaseModel): - model_config = ConfigDict( - extra=Extra.forbid, - ) - sql: str transaction: Optional[bool] = True index: Optional[Optional[int]] = None @@ -122,10 +107,6 @@ class AltimateHook(BaseModel): # TODO: Need to add the rest of the fields class AltimateNodeConfig(BaseModel): - model_config = ConfigDict( - extra=Extra.allow, - ) - _extra: Optional[Dict[str, Any]] = None enabled: Optional[bool] = True alias: Optional[Optional[str]] = None @@ -209,10 +190,6 @@ class AltimateSourceConfig(BaseModel): class AltimateDeferRelation(BaseModel): - model_config = ConfigDict( - extra=Extra.forbid, - ) - database: Optional[str] schema_name: str alias: str @@ -220,10 +197,6 @@ class AltimateDeferRelation(BaseModel): class AltimateSeedConfig(BaseModel): - model_config = ConfigDict( - extra=Extra.allow, - ) - _extra: Optional[Dict[str, Any]] = None enabled: Optional[bool] = True alias: Optional[Optional[str]] = None @@ -322,10 +295,6 @@ class AltimateExposureType(Enum): class AltimateOwner(BaseModel): - model_config = ConfigDict( - extra=Extra.allow, - ) - _extra: Optional[Dict[str, Any]] = None email: Optional[Optional[str]] = None name: Optional[Optional[str]] = None @@ -338,20 +307,12 @@ class AltimateMaturityEnum(Enum): class AltimateRefArgs(BaseModel): - model_config = ConfigDict( - extra=Extra.forbid, - ) - name: str package: Optional[Optional[str]] = None version: Optional[Optional[Union[str, float]]] = None class AltimateExposureConfig(BaseModel): - model_config = ConfigDict( - extra=Extra.allow, - ) - _extra: Optional[Dict[str, Any]] = None enabled: Optional[bool] = True @@ -382,20 +343,12 @@ class AltimateManifestExposureNode(BaseModel): class AltimateTestMetadata(BaseModel): - model_config = ConfigDict( - extra=Extra.forbid, - ) - name: str kwargs: Optional[Dict[str, Any]] = None namespace: Optional[Optional[str]] = None class AltimateTestConfig(BaseModel): - model_config = ConfigDict( - extra=Extra.allow, - ) - _extra: Optional[Dict[str, Any]] = None enabled: Optional[bool] = True alias: Optional[Optional[str]] = None @@ -446,10 +399,6 @@ class AltimateManifestTestNode(BaseModel): class AltimateMacroArgument(BaseModel): - model_config = ConfigDict( - extra=Extra.forbid, - ) - name: str type: Optional[Optional[str]] = None description: Optional[Optional[str]] = "" diff --git a/tox.ini b/tox.ini index 8b1227db..91dfca0c 100644 --- a/tox.ini +++ b/tox.ini @@ -14,7 +14,7 @@ envlist = clean, check, docs, - {py38,py39,py310,py311,py312,pypy38,pypy39,pypy310}-{cover,nocov}, + {py39,py310,py311,py312,pypy39,pypy310}-{pydantic28,pydantic210}-{cover,nocov}, report ignore_basepython_conflict = true @@ -40,9 +40,11 @@ usedevelop = deps = pytest cover: pytest-cov + pydantic28: pydantic>=2.8,<2.9 + pydantic210: pydantic>=2.10,<2.11 commands = - nocov: {posargs:pytest -vv --ignore=src} - cover: {posargs:pytest --cov --cov-report=term-missing --cov-report=xml -vv} + nocov: {posargs:pytest -vv --ignore=src -p no:warnings} + cover: {posargs:pytest --cov --cov-report=term-missing --cov-report=xml -vv -p no:warnings} [testenv:check] deps =