├── .gitignore ├── README.md ├── app.py ├── docs ├── app-apis.png ├── app-create.png ├── app-credentials.png ├── app-grant-authorities.png ├── app-permissions.png ├── app-tenant-access-token.png ├── app-version.png ├── bitable-add-app.png ├── bitable-chart.png ├── bitable-fields.png ├── bitable-search-app.png └── feishu-bitable-getting-started.md ├── duckcp ├── __init__.py ├── boot │ ├── __init__.py │ ├── meta_command.py │ ├── repository_command.py │ ├── storage_command.py │ ├── task_command.py │ └── transformer_command.py ├── configuration │ ├── __init__.py │ ├── logging_configuration.py │ └── meta_configuration.py ├── constant │ └── __init__.py ├── entity │ ├── __init__.py │ ├── connection.py │ ├── credential.py │ ├── executor.py │ ├── repository.py │ ├── snapshot.py │ ├── statement.py │ ├── storage.py │ ├── task.py │ ├── task_transformer.py │ ├── transform_context.py │ └── transformer.py ├── feishu │ ├── __init__.py │ └── bitable.py ├── helper │ ├── __init__.py │ ├── click.py │ ├── collection.py │ ├── digest.py │ ├── fs.py │ ├── http.py │ ├── serialization.py │ ├── sql.py │ └── validation.py ├── migration │ ├── 001-repositories.sql │ ├── 002-storages.sql │ ├── 003-transformers.sql │ ├── 004-credentials.sql │ ├── 005-snapshots.sql │ ├── 006-tasks.sql │ ├── 007-tasks-transformers.sql │ └── __init__.py ├── projection │ ├── __init__.py │ ├── repository_projection.py │ ├── storage_projection.py │ ├── task_projection.py │ ├── task_transformer_projection.py │ └── transformer_projection.py ├── repository │ ├── __init__.py │ ├── bitable_repository.py │ ├── duckdb_repository.py │ ├── file_repository.py │ ├── odps_repository.py │ ├── postgres_repository.py │ └── sqlite_repository.py ├── service │ ├── __init__.py │ ├── authentication_service.py │ ├── meta_service.py │ ├── repository_service.py │ ├── snapshot_service.py │ ├── storage_service.py │ ├── task_service.py │ └── transformer_service.py ├── transform │ ├── __init__.py │ ├── bitable_transform.py │ ├── database_transform.py │ ├── duckdb_transform.py │ └── file_transform.py └── typing │ ├── __init__.py │ ├── authentication_token_type.py │ ├── authenticator_type.py │ ├── connection_protocol.py │ ├── credential_refresher_type.py │ ├── cursor_protocol.py │ ├── record_constructor_protocol.py │ ├── supports_get_item_protocol.py │ └── transform_type.py ├── pyproject.toml └── uv.lock /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/.gitignore -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/README.md -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/app.py -------------------------------------------------------------------------------- /docs/app-apis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/docs/app-apis.png -------------------------------------------------------------------------------- /docs/app-create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/docs/app-create.png -------------------------------------------------------------------------------- /docs/app-credentials.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/docs/app-credentials.png -------------------------------------------------------------------------------- /docs/app-grant-authorities.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/docs/app-grant-authorities.png -------------------------------------------------------------------------------- /docs/app-permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/docs/app-permissions.png -------------------------------------------------------------------------------- /docs/app-tenant-access-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/docs/app-tenant-access-token.png -------------------------------------------------------------------------------- /docs/app-version.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/docs/app-version.png -------------------------------------------------------------------------------- /docs/bitable-add-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/docs/bitable-add-app.png -------------------------------------------------------------------------------- /docs/bitable-chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/docs/bitable-chart.png -------------------------------------------------------------------------------- /docs/bitable-fields.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/docs/bitable-fields.png -------------------------------------------------------------------------------- /docs/bitable-search-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/docs/bitable-search-app.png -------------------------------------------------------------------------------- /docs/feishu-bitable-getting-started.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/docs/feishu-bitable-getting-started.md -------------------------------------------------------------------------------- /duckcp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/__init__.py -------------------------------------------------------------------------------- /duckcp/boot/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/boot/__init__.py -------------------------------------------------------------------------------- /duckcp/boot/meta_command.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/boot/meta_command.py -------------------------------------------------------------------------------- /duckcp/boot/repository_command.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/boot/repository_command.py -------------------------------------------------------------------------------- /duckcp/boot/storage_command.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/boot/storage_command.py -------------------------------------------------------------------------------- /duckcp/boot/task_command.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/boot/task_command.py -------------------------------------------------------------------------------- /duckcp/boot/transformer_command.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/boot/transformer_command.py -------------------------------------------------------------------------------- /duckcp/configuration/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/configuration/__init__.py -------------------------------------------------------------------------------- /duckcp/configuration/logging_configuration.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/configuration/logging_configuration.py -------------------------------------------------------------------------------- /duckcp/configuration/meta_configuration.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/configuration/meta_configuration.py -------------------------------------------------------------------------------- /duckcp/constant/__init__.py: -------------------------------------------------------------------------------- 1 | APP = 'duckcp' 2 | IDENTIFIER = f'com.yinfn.{APP}' 3 | -------------------------------------------------------------------------------- /duckcp/entity/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | 领域实体 3 | """ 4 | -------------------------------------------------------------------------------- /duckcp/entity/connection.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/entity/connection.py -------------------------------------------------------------------------------- /duckcp/entity/credential.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/entity/credential.py -------------------------------------------------------------------------------- /duckcp/entity/executor.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/entity/executor.py -------------------------------------------------------------------------------- /duckcp/entity/repository.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/entity/repository.py -------------------------------------------------------------------------------- /duckcp/entity/snapshot.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/entity/snapshot.py -------------------------------------------------------------------------------- /duckcp/entity/statement.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/entity/statement.py -------------------------------------------------------------------------------- /duckcp/entity/storage.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/entity/storage.py -------------------------------------------------------------------------------- /duckcp/entity/task.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/entity/task.py -------------------------------------------------------------------------------- /duckcp/entity/task_transformer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/entity/task_transformer.py -------------------------------------------------------------------------------- /duckcp/entity/transform_context.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/entity/transform_context.py -------------------------------------------------------------------------------- /duckcp/entity/transformer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/entity/transformer.py -------------------------------------------------------------------------------- /duckcp/feishu/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/feishu/__init__.py -------------------------------------------------------------------------------- /duckcp/feishu/bitable.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/feishu/bitable.py -------------------------------------------------------------------------------- /duckcp/helper/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /duckcp/helper/click.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/helper/click.py -------------------------------------------------------------------------------- /duckcp/helper/collection.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/helper/collection.py -------------------------------------------------------------------------------- /duckcp/helper/digest.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/helper/digest.py -------------------------------------------------------------------------------- /duckcp/helper/fs.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/helper/fs.py -------------------------------------------------------------------------------- /duckcp/helper/http.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/helper/http.py -------------------------------------------------------------------------------- /duckcp/helper/serialization.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/helper/serialization.py -------------------------------------------------------------------------------- /duckcp/helper/sql.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/helper/sql.py -------------------------------------------------------------------------------- /duckcp/helper/validation.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/helper/validation.py -------------------------------------------------------------------------------- /duckcp/migration/001-repositories.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/migration/001-repositories.sql -------------------------------------------------------------------------------- /duckcp/migration/002-storages.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/migration/002-storages.sql -------------------------------------------------------------------------------- /duckcp/migration/003-transformers.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/migration/003-transformers.sql -------------------------------------------------------------------------------- /duckcp/migration/004-credentials.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/migration/004-credentials.sql -------------------------------------------------------------------------------- /duckcp/migration/005-snapshots.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/migration/005-snapshots.sql -------------------------------------------------------------------------------- /duckcp/migration/006-tasks.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/migration/006-tasks.sql -------------------------------------------------------------------------------- /duckcp/migration/007-tasks-transformers.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/migration/007-tasks-transformers.sql -------------------------------------------------------------------------------- /duckcp/migration/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | 元信息数据库迁移脚本 3 | """ 4 | -------------------------------------------------------------------------------- /duckcp/projection/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | 实体用于终端展示的投影 3 | """ -------------------------------------------------------------------------------- /duckcp/projection/repository_projection.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/projection/repository_projection.py -------------------------------------------------------------------------------- /duckcp/projection/storage_projection.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/projection/storage_projection.py -------------------------------------------------------------------------------- /duckcp/projection/task_projection.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/projection/task_projection.py -------------------------------------------------------------------------------- /duckcp/projection/task_transformer_projection.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/projection/task_transformer_projection.py -------------------------------------------------------------------------------- /duckcp/projection/transformer_projection.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/projection/transformer_projection.py -------------------------------------------------------------------------------- /duckcp/repository/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/repository/__init__.py -------------------------------------------------------------------------------- /duckcp/repository/bitable_repository.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/repository/bitable_repository.py -------------------------------------------------------------------------------- /duckcp/repository/duckdb_repository.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/repository/duckdb_repository.py -------------------------------------------------------------------------------- /duckcp/repository/file_repository.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/repository/file_repository.py -------------------------------------------------------------------------------- /duckcp/repository/odps_repository.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/repository/odps_repository.py -------------------------------------------------------------------------------- /duckcp/repository/postgres_repository.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/repository/postgres_repository.py -------------------------------------------------------------------------------- /duckcp/repository/sqlite_repository.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/repository/sqlite_repository.py -------------------------------------------------------------------------------- /duckcp/service/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | 核心服务 3 | """ 4 | -------------------------------------------------------------------------------- /duckcp/service/authentication_service.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/service/authentication_service.py -------------------------------------------------------------------------------- /duckcp/service/meta_service.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/service/meta_service.py -------------------------------------------------------------------------------- /duckcp/service/repository_service.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/service/repository_service.py -------------------------------------------------------------------------------- /duckcp/service/snapshot_service.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/service/snapshot_service.py -------------------------------------------------------------------------------- /duckcp/service/storage_service.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/service/storage_service.py -------------------------------------------------------------------------------- /duckcp/service/task_service.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/service/task_service.py -------------------------------------------------------------------------------- /duckcp/service/transformer_service.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/service/transformer_service.py -------------------------------------------------------------------------------- /duckcp/transform/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /duckcp/transform/bitable_transform.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/transform/bitable_transform.py -------------------------------------------------------------------------------- /duckcp/transform/database_transform.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/transform/database_transform.py -------------------------------------------------------------------------------- /duckcp/transform/duckdb_transform.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/transform/duckdb_transform.py -------------------------------------------------------------------------------- /duckcp/transform/file_transform.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/transform/file_transform.py -------------------------------------------------------------------------------- /duckcp/typing/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | 自定义类型或协议。 3 | """ 4 | -------------------------------------------------------------------------------- /duckcp/typing/authentication_token_type.py: -------------------------------------------------------------------------------- 1 | """ 2 | 用于鉴权(认证)的信息 3 | """ 4 | from typing import Any 5 | 6 | type AuthenticationToken = dict[str, Any] 7 | -------------------------------------------------------------------------------- /duckcp/typing/authenticator_type.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/typing/authenticator_type.py -------------------------------------------------------------------------------- /duckcp/typing/connection_protocol.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/typing/connection_protocol.py -------------------------------------------------------------------------------- /duckcp/typing/credential_refresher_type.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/typing/credential_refresher_type.py -------------------------------------------------------------------------------- /duckcp/typing/cursor_protocol.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/typing/cursor_protocol.py -------------------------------------------------------------------------------- /duckcp/typing/record_constructor_protocol.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/typing/record_constructor_protocol.py -------------------------------------------------------------------------------- /duckcp/typing/supports_get_item_protocol.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/typing/supports_get_item_protocol.py -------------------------------------------------------------------------------- /duckcp/typing/transform_type.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/duckcp/typing/transform_type.py -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/pyproject.toml -------------------------------------------------------------------------------- /uv.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/redraiment/duckcp/HEAD/uv.lock --------------------------------------------------------------------------------