Skip to content

Commit 68490dc

Browse files
feat: Add WASM compatibility fallback from serpyco-rs to serpyco
- Add conditional dependencies in pyproject.toml using environment markers - Use sys_platform != 'emscripten' for serpyco-rs, sys_platform == 'emscripten' for serpyco - Update imports in airbyte_protocol_serializers.py, airbyte_protocol.py, entrypoint_wrapper.py, and test_source.py - Add conditional import logic to detect WASM/Pyodide environments at runtime - Maintain API compatibility between serpyco-rs and serpyco libraries - All tests pass with conditional imports Co-Authored-By: AJ Steers <aj@airbyte.io>
1 parent 51cfea5 commit 68490dc

6 files changed

Lines changed: 344 additions & 120 deletions

File tree

airbyte_cdk/models/airbyte_protocol.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@
22
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
33
#
44

5+
import sys
56
from dataclasses import InitVar, dataclass
67
from typing import Annotated, Any, Dict, List, Mapping, Optional, Union
78

89
from airbyte_protocol_dataclasses.models import * # noqa: F403 # Allow '*'
9-
from serpyco_rs.metadata import Alias
10+
11+
if sys.platform == 'emscripten':
12+
from serpyco.metadata import Alias
13+
else:
14+
from serpyco_rs.metadata import Alias
1015

1116
# ruff: noqa: F405 # ignore fuzzy import issues with 'import *'
1217

airbyte_cdk/models/airbyte_protocol_serializers.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
# Copyright (c) 2024 Airbyte, Inc., all rights reserved.
2+
import sys
23
from typing import Any, Dict
34

4-
from serpyco_rs import CustomType, Serializer
5+
if sys.platform == 'emscripten':
6+
from serpyco import CustomType, Serializer
7+
else:
8+
from serpyco_rs import CustomType, Serializer
59

610
from .airbyte_protocol import ( # type: ignore[attr-defined] # all classes are imported to airbyte_protocol via *
711
AirbyteCatalog,

airbyte_cdk/test/entrypoint_wrapper.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import json
1818
import logging
1919
import re
20+
import sys
2021
import tempfile
2122
import traceback
2223
from collections import deque
@@ -28,7 +29,11 @@
2829

2930
import orjson
3031
from pydantic import ValidationError as V2ValidationError
31-
from serpyco_rs import SchemaValidationError
32+
33+
if sys.platform == 'emscripten':
34+
from serpyco import SchemaValidationError
35+
else:
36+
from serpyco_rs import SchemaValidationError
3237

3338
from airbyte_cdk.entrypoint import AirbyteEntrypoint
3439
from airbyte_cdk.exception_handler import assemble_uncaught_exception

0 commit comments

Comments
 (0)