用途:在 PostHog 的 products/warehouse_sources/backend/temporal/data_imports/sources/ 目录下新建或更新数据仓库导入源。
主要能力与流程:编码前先阅读 source.template(注意模板可能过时,例如仍指向旧的 posthog/warehouse/types.py,而非 products/warehouse_sources/backend/types.py)、sources/README.md、SOURCES.md、common/base.py(SimpleSource、ResumableSource、WebhookSource 及 FieldType)、common/resumable.py、common/webhook_s3.py;参考一个带 settings.py 与传输逻辑的 API 源(如 klaviyo、github),webhook 源参考 stripe/source.py。
基类选择:只拉取且无可持久化游标用 SimpleSource;支持分页游标/Link 头/时间窗口/偏移令牌等可恢复方式用 ResumableSource(状态存 Redis,TTL 24h);能推送事件再加 WebhookSource,可用多继承组合。数据库与文件传输源(SFTP、S3)默认用 SimpleSource。
新 API 源步骤:调研端点与官方 API 文档;用 source.template 引导并更新 types.py 的 ExternalDataSourceType 与 schema-general.ts 的 externalDataSources;定义 get_source_config(name、category、label、caption、docsUrl、iconPath、fields、可选 keywords);在 sources/init.py 注册;运行 pnpm run generate:source-configs;改用生成的配置类;实现 validate_credentials、get_schemas、source_for_pipeline 等;传输逻辑放 {source}.py,端点目录等放 settings.py;图标放 frontend/public/services/{source}.svg;如需迁移运行 DEBUG=1 python manage.py makemigrations 与 DEBUG=1 ./bin/migrate;运行 pnpm run schema:build。
发布与文档:完成的源应移除 unreleasedSource(默认可见可连接),按需设置 ReleaseStatus.ALPHA/BETA/GA,可选 featureFlag="dwh-{source_name}";按 /documenting-warehouse-sources 写文档,并保证 docsUrl 与文档文件名一致。固定模式 SaaS 源可添加 canonical_descriptions.py,键为 get_schemas 返回的端点名,描述取自官方 API 文档,缺失回退到 LLM;仅当 get_schemas 遍历静态端点目录且无 I/O 时设 lists_tables_without_credentials = True。每个源必须设置 category(来自 posthog.schema 的 DataWarehouseSourceCategory,缺失会导致 tests/test_source_categories.py 失败),keywords 仅在存在常见缩写或别名时添加。
限制:资料未给出具体价格、平台或效果数据;模板可能滞后,需对照当前源实现验证;分类新增须改 schema-general.ts 数组并重建,不得自造字符串。