-
Notifications
You must be signed in to change notification settings - Fork 34
example(PeopleAI): add people_ai connector example #358
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
base: main
Are you sure you want to change the base?
Conversation
🧹 Python Code Quality Check✅ No issues found in Python Files. This comment is auto-updated with every commit. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR adds a new People.ai connector example that demonstrates how to sync activity and participant data from the People.ai API using OAuth2 authentication with client credentials. The connector implements token refresh logic, exponential backoff retry handling, and offset-based pagination.
Key Changes
- New People.ai connector with OAuth2 authentication and automatic token refresh on 401 errors
- Implements retry logic with exponential backoff for transient 5xx and connection errors
- Syncs two tables:
activity(base activities) andparticipants(participant details)
Reviewed Changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 29 comments.
| File | Description |
|---|---|
| connectors/people_ai/connector.py | Core connector implementation with authentication, pagination, error handling, and data sync logic |
| connectors/people_ai/configuration.json | Configuration file with API key and secret placeholders |
| connectors/people_ai/README.md | Documentation covering connector overview, features, authentication, pagination, data handling, and error handling |
| README.md | Added People.ai connector to the main repository connector list |
Co-authored-by: Copilot <[email protected]>
to resolve black / flake issues
5tran-alexil
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See my suggestions. Otherwise, README looks good.
Co-authored-by: Alex Ilyichov <[email protected]>
Co-authored-by: Alex Ilyichov <[email protected]>
|
Looks good; this is ready for an engineering review! 🥳 🎉 |
5tran-alexil
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See my suggestions
Co-authored-by: Alex Ilyichov <[email protected]>
Co-authored-by: Alex Ilyichov <[email protected]>
Co-authored-by: Alex Ilyichov <[email protected]>
Co-authored-by: Alex Ilyichov <[email protected]>
Co-authored-by: Alex Ilyichov <[email protected]>
Co-authored-by: Alex Ilyichov <[email protected]>
Co-authored-by: Alex Ilyichov <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 5 out of 5 changed files in this pull request and generated 15 comments.
| def update(configuration: dict, state: dict): | ||
| """ | ||
| Define the update function which lets you configure | ||
| how your connector fetches data. | ||
| See the technical reference documentation for more details | ||
| on the update function: https://fivetran.com/docs/connectors/connector-sdk/technical-reference#update | ||
| Args: | ||
| configuration: A dictionary containing connection details. | ||
| state: A dictionary containing state information from previous runs. | ||
| The state dictionary is empty for the first sync or for any | ||
| full re-sync. | ||
| """ |
Copilot
AI
Dec 9, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The update() function is missing a required validate_configuration() function call. According to SDK guidelines, every connector must implement and call validate_configuration() at the start of the update() function to validate configuration parameters (api_key and api_secret in this case).
Add this function before update():
def validate_configuration(configuration: dict):
"""
Validate the configuration dictionary to ensure it contains all required parameters.
This function is called at the start of the update method to ensure that the connector has all necessary configuration values.
Args:
configuration: a dictionary that holds the configuration settings for the connector.
Raises:
ValueError: if any required configuration parameter is missing.
"""
required_configs = ["api_key", "api_secret"]
for key in required_configs:
if key not in configuration:
raise ValueError(f"Missing required configuration value: {key}")Then call it at the start of update():
def update(configuration: dict, state: dict):
"""..."""
validate_configuration(configuration)
# rest of the codeThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
made this change. Earlier review said to not have a validate_configuration function
Co-authored-by: Copilot <[email protected]>
fivetran-pranavtotala
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
5tran-alexil
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@fivetran-adamrees @fivetran-pranavtotala READMEs LGTM, i fixed a merge conflict
Description of Change
Adding a new connection to the example repository
Testing
This is actively being used by a customer. Also, tested locally this morning here

Checklist
Some tips and links to help validate your PR:
fivetran debugcommand.