Universal Notion synchronization service for development data and documentation
Project description
Universal Notion Sync
Universal synchronization engine for seamless Notion API integration.
Features
- Universal Sync Engine: Automatically sync data between any source and Notion
- Smart Mapping: Intelligent field mapping and type conversion
- Relation Discovery: Automatic discovery and management of database relations
- Multi-Strategy Sync: Support for various synchronization strategies
- Configuration-Driven: JSON-based configuration for flexible setups
- Batch Processing: Efficient batch operations for large datasets
- Error Handling: Robust error handling and retry mechanisms
- Type Safety: Complete type annotations with Pydantic models
- Async Support: Optional async operations for high-performance scenarios
Installation
# Basic installation
pip install universal-notion-sync
# With async support
pip install universal-notion-sync[async]
# With validation features
pip install universal-notion-sync[validation]
# With Celery task support
pip install universal-notion-sync[celery]
# With all features
pip install universal-notion-sync[all]
Quick Start
Basic Notion Sync
from universal_notion_sync import (
UniversalNotionSyncEngine,
NotionCredentials,
SyncConfiguration,
SyncTarget
)
# Initialize with credentials
credentials = NotionCredentials(
integration_token="your_notion_integration_token"
)
# Configure sync target
sync_config = SyncConfiguration(
strategy="UPSERT",
content_format="RICH_TEXT",
relation_discovery_mode="AUTO"
)
sync_target = SyncTarget(
database_id="your_database_id",
configuration=sync_config
)
# Create sync engine
engine = UniversalNotionSyncEngine(credentials=credentials)
# Sync data
data = [
{
"title": "Project Alpha",
"status": "In Progress",
"priority": "High",
"tags": ["development", "urgent"]
},
{
"title": "Project Beta",
"status": "Planning",
"priority": "Medium",
"tags": ["research"]
}
]
result = engine.sync_to_target(sync_target, data)
print(f"Synced {result.successful_items} items successfully")
Advanced Configuration
from universal_notion_sync import (
ConfigurationManager,
RelationMapping,
SyncStrategy
)
# Load configuration from file
config_manager = ConfigurationManager()
config = config_manager.load_from_file("notion_sync_config.json")
# Custom relation mapping
relation_mapping = RelationMapping(
source_field="user_id",
target_property="assignee",
relation_database_id="users_database_id",
match_property="user_id"
)
# Advanced sync with custom mapping
engine = UniversalNotionSyncEngine(
credentials=credentials,
relation_mappings=[relation_mapping]
)
# Batch sync with custom strategy
batch_result = engine.batch_sync([
(sync_target_1, data_1),
(sync_target_2, data_2)
], strategy=SyncStrategy.CREATE_ONLY)
for target_result in batch_result.results:
print(f"Target: {target_result.target_id}")
print(f"Success: {target_result.successful_items}")
print(f"Errors: {len(target_result.errors)}")
Content Processing
from universal_notion_sync import NotionContentProcessor, ContentFormat
processor = NotionContentProcessor()
# Convert markdown to Notion blocks
markdown_content = """
# Project Report
## Overview
This is a **comprehensive** report on project progress.
### Tasks
- [x] Design phase completed
- [ ] Development in progress
- [ ] Testing pending
[Link to documentation](https://example.com/docs)
"""
notion_blocks = processor.convert_content(
content=markdown_content,
source_format=ContentFormat.MARKDOWN,
target_format=ContentFormat.NOTION_BLOCKS
)
# Sync content to a page
page_result = engine.sync_to_page(
page_id="your_page_id",
blocks=notion_blocks
)
Sync Strategies
| Strategy | Description | Use Case |
|---|---|---|
CREATE_ONLY |
Only create new items | Initial data migration |
UPDATE_ONLY |
Only update existing items | Batch updates |
UPSERT |
Create or update items | General sync operations |
MIRROR |
Full synchronization | Complete data mirroring |
Relation Discovery Modes
MANUAL: Manually defined relations onlyAUTO: Automatic discovery based on field namesHYBRID: Combination of manual and auto discovery
Configuration File Format
{
"notion_credentials": {
"integration_token": "${NOTION_TOKEN}"
},
"targets": [
{
"name": "projects_sync",
"database_id": "database_id_here",
"configuration": {
"strategy": "UPSERT",
"content_format": "RICH_TEXT",
"relation_discovery_mode": "AUTO",
"field_mappings": {
"project_name": "title",
"due_date": "deadline",
"owner_id": "assignee"
}
}
}
],
"relation_mappings": [
{
"source_field": "owner_id",
"target_property": "assignee",
"relation_database_id": "users_database_id",
"match_property": "user_id"
}
]
}
Error Handling
The engine provides comprehensive error handling:
try:
result = engine.sync_to_target(sync_target, data)
if result.errors:
for error in result.errors:
print(f"Error syncing item {error.item_index}: {error.message}")
except NotionAPIError as e:
print(f"Notion API error: {e}")
except SyncConfigurationError as e:
print(f"Configuration error: {e}")
Async Support
import asyncio
from universal_notion_sync import AsyncUniversalNotionSyncEngine
async def async_sync_example():
engine = AsyncUniversalNotionSyncEngine(credentials=credentials)
result = await engine.async_sync_to_target(sync_target, data)
return result
# Run async sync
result = asyncio.run(async_sync_example())
License
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yeonjae_universal_notion_sync-1.0.1.tar.gz.
File metadata
- Download URL: yeonjae_universal_notion_sync-1.0.1.tar.gz
- Upload date:
- Size: 21.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2398a247eb98b09061d413c3569f8700fe7f62a964e826ecc562d8cc373bfdd8
|
|
| MD5 |
cf2151da6f7b861437edda10df8347a0
|
|
| BLAKE2b-256 |
070b39ead720e8baedffd58d0af722839d0e91937196a58de829efe47648cc72
|
File details
Details for the file yeonjae_universal_notion_sync-1.0.1-py3-none-any.whl.
File metadata
- Download URL: yeonjae_universal_notion_sync-1.0.1-py3-none-any.whl
- Upload date:
- Size: 18.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56a702cb8cdcba37926f1c92276d96fe339c03781ef9cbd2f324ddee7dfdfd83
|
|
| MD5 |
4125a76a38e1cdd44b918cdbf59a9529
|
|
| BLAKE2b-256 |
9f42799a7af7c878b03792e22fd33e44a1197e2751462a85479f77447887561d
|