Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix: Resolve Python 3.9 compatibility issues, expand CI test matrix #98

Merged
merged 8 commits into from
Mar 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions .github/workflows/python_pytest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,9 @@ jobs:
strategy:
matrix:
python-version: [
# TODO: Re-enable 3.9 and 3.11 once we have stable tests across all versions.
# '3.9',
'3.9',
'3.10',
# '3.11',
'3.11',
]
fail-fast: false

Expand Down
10 changes: 5 additions & 5 deletions airbyte/_util/document_rendering.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"""Methods for converting Airbyte records into documents."""
from __future__ import annotations

from typing import TYPE_CHECKING, Any
from typing import TYPE_CHECKING, Any, Optional

import yaml
from pydantic import BaseModel
Expand All @@ -27,7 +27,7 @@ def _to_title_case(name: str, /) -> str:
class CustomRenderingInstructions(BaseModel):
"""Instructions for rendering a stream's records as documents."""

title_property: str | None
title_property: Optional[str]
content_properties: list[str]
frontmatter_properties: list[str]
metadata_properties: list[str]
Expand All @@ -36,9 +36,9 @@ class CustomRenderingInstructions(BaseModel):
class DocumentRenderer(BaseModel):
"""Instructions for rendering a stream's records as documents."""

title_property: str | None
content_properties: list[str] | None
metadata_properties: list[str] | None
title_property: Optional[str]
content_properties: Optional[list[str]]
metadata_properties: Optional[list[str]]
render_metadata: bool = False

# TODO: Add primary key and cursor key support:
Expand Down
6 changes: 3 additions & 3 deletions airbyte/caches/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import abc
from pathlib import Path
from typing import TYPE_CHECKING, Any, final
from typing import TYPE_CHECKING, Any, Optional, final

from pydantic import BaseModel, PrivateAttr

Expand Down Expand Up @@ -34,7 +34,7 @@ class CacheBase(BaseModel):
schema_name: str = "airbyte_raw"
"""The name of the schema to write to."""

table_prefix: str | None = None
table_prefix: Optional[str] = None
""" A prefix to add to all table names.
If 'None', a prefix will be created based on the source name.
"""
Expand All @@ -43,7 +43,7 @@ class CacheBase(BaseModel):
"""A suffix to add to all table names."""

_sql_processor_class: type[SqlProcessorBase] = PrivateAttr()
_sql_processor: SqlProcessorBase | None = PrivateAttr(default=None)
_sql_processor: Optional[SqlProcessorBase] = PrivateAttr(default=None)

@final
@property
Expand Down
3 changes: 2 additions & 1 deletion airbyte/caches/duckdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import warnings
from pathlib import Path # noqa: TCH003 # Used in Pydantic init
from typing import Union

from overrides import overrides

Expand All @@ -23,7 +24,7 @@
class DuckDBCache(CacheBase):
"""A DuckDB cache."""

db_path: Path | str
db_path: Union[Path, str]
"""Normally db_path is a Path object.

There are some cases, such as when connecting to MotherDuck, where it could be a string that
Expand Down
8 changes: 4 additions & 4 deletions airbyte/documents.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
"""Methods for converting Airbyte records into documents."""
from __future__ import annotations

from typing import TYPE_CHECKING, Any
from typing import TYPE_CHECKING, Any, Optional

from pydantic import BaseModel
from pydantic import BaseModel, Field


if TYPE_CHECKING:
Expand All @@ -30,10 +30,10 @@ class Document(BaseModel):
This class is duck-typed to be compatible with LangChain project's `Document` class.
"""

id: str | None = None
id: Optional[str] = Field(default=None)
content: str
metadata: dict[str, Any]
last_modified: datetime.datetime | None = None
last_modified: Optional[datetime.datetime] = Field(default=None)

def __str__(self) -> str:
return self.content
Expand Down
23 changes: 23 additions & 0 deletions examples/run_file_source.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
"""A simple test of PyAirbyte, using the File source connector.

Usage (from PyAirbyte root directory):
> poetry run python ./examples/run_file.py

No setup is needed, but you may need to delete the .venv-source-file folder
if your installation gets interrupted or corrupted.
"""

from __future__ import annotations

import airbyte as ab


source = ab.get_source(
"source-file",
install_if_missing=True,
)
source.check()

# print(list(source.get_records("pokemon")))
source.read(cache=ab.new_local_cache("poke"))
2 changes: 2 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,8 @@ ignore = [
"FIX002", # Allow "TODO:" until release (then switch to requiring links via TDO003)
"PLW0603", # Using the global statement to update _cache is discouraged
"TD003", # Require links for TODOs # TODO: Re-enable when we disable FIX002

"UP007", # Allow legacy `Union[a, b]` and `Optional[a]` for Pydantic, until we drop Python 3.9 (Pydantic doesn't like it)
]
fixable = ["ALL"]
unfixable = [
Expand Down
2 changes: 1 addition & 1 deletion tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.

"""Global pytest fixtures."""
from __future__ import annotations

import json
import logging
Expand Down
2 changes: 1 addition & 1 deletion tests/integration_tests/fixtures/source-broken/setup.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
#

from __future__ import annotations

from setuptools import setup

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
from __future__ import annotations

def run():
raise Exception("Could not run")
raise Exception("Could not run")
4 changes: 2 additions & 2 deletions tests/integration_tests/fixtures/source-test/setup.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
#

from __future__ import annotations

from setuptools import setup

setup(
name="airbyte-source-test",
version="0.0.1",
description="Test Soutce",
description="Test Source",
author="Airbyte",
author_email="[email protected]",
packages=["source_test"],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
from __future__ import annotations

import json
import sys
Expand Down
1 change: 1 addition & 0 deletions tests/integration_tests/test_install.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
from __future__ import annotations

from gettext import install
import pytest
Expand Down
1 change: 1 addition & 0 deletions tests/integration_tests/test_snowflake_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
and available on PATH for the poetry-managed venv.
"""
from __future__ import annotations

from collections.abc import Generator
import os
import sys
Expand Down
1 change: 1 addition & 0 deletions tests/integration_tests/test_source_test_fixture.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
from __future__ import annotations

from collections.abc import Mapping
import os
Expand Down
1 change: 1 addition & 0 deletions tests/integration_tests/test_validation.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
from __future__ import annotations

import os
import shutil
Expand Down
1 change: 1 addition & 0 deletions tests/lint_tests/test_mypy.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
from __future__ import annotations

import subprocess

Expand Down
1 change: 1 addition & 0 deletions tests/lint_tests/test_ruff.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
from __future__ import annotations

import subprocess

Expand Down
1 change: 1 addition & 0 deletions tests/unit_tests/test_anonymous_usage_stats.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
from __future__ import annotations

import itertools
from contextlib import nullcontext as does_not_raise
Expand Down
1 change: 1 addition & 0 deletions tests/unit_tests/test_caches.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
from __future__ import annotations

from pathlib import Path

Expand Down
1 change: 1 addition & 0 deletions tests/unit_tests/test_exceptions.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
from __future__ import annotations

import inspect
import pytest
Expand Down
1 change: 1 addition & 0 deletions tests/unit_tests/test_pip_helpers.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
from __future__ import annotations

import pytest
from airbyte._util import github_pip_url, connector_pip_url
Expand Down
1 change: 1 addition & 0 deletions tests/unit_tests/test_progress.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
from __future__ import annotations

import datetime
from textwrap import dedent
Expand Down
1 change: 1 addition & 0 deletions tests/unit_tests/test_type_translation.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
from __future__ import annotations

import pytest
from sqlalchemy import types
Expand Down
Loading