Skip to main content

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 yeonjae-universal-notion-sync

# With async support
pip install yeonjae-universal-notion-sync[async]

# With validation features
pip install yeonjae-universal-notion-sync[validation]

# With Celery task support
pip install yeonjae-universal-notion-sync[celery]

# With all features
pip install yeonjae-universal-notion-sync[all]

Quick Start

Basic Notion Sync

from yeonjae_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 yeonjae_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 yeonjae_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 only
  • AUTO: Automatic discovery based on field names
  • HYBRID: 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 yeonjae_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yeonjae_universal_notion_sync-1.0.5.tar.gz (21.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yeonjae_universal_notion_sync-1.0.5-py3-none-any.whl (19.0 kB view details)

Uploaded Python 3

File details

Details for the file yeonjae_universal_notion_sync-1.0.5.tar.gz.

File metadata

File hashes

Hashes for yeonjae_universal_notion_sync-1.0.5.tar.gz
Algorithm Hash digest
SHA256 6ffecd474034a4a017851f177c051ffe181d8122b963a47f89087004b52d0422
MD5 2e2a412b9ce265f5d6345679f6aac098
BLAKE2b-256 e0f74a2e62503c9b5861cb431e6d23552a7f58788573acbecd693c4d85c21449

See more details on using hashes here.

File details

Details for the file yeonjae_universal_notion_sync-1.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for yeonjae_universal_notion_sync-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 d2974b6be377a0fce39718399390fc96c626a879c885d5ca283589432b502090
MD5 3b4553a8f1f772774d59bc620b888a6d
BLAKE2b-256 cdfaacb1e1101a1c05e974d8fb1adea0f6bcbdeb4bbf104e8ffd5c478fe79bc8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page