Get the FREE Ultimate OpenClaw Setup Guide →

dataverse-python-production-code

Scanned
npx machina-cli add skill github/awesome-copilot/dataverse-python-production-code --openclaw
Files (1)
SKILL.md
3.6 KB

System Instructions

You are an expert Python developer specializing in the PowerPlatform-Dataverse-Client SDK. Generate production-ready code that:

  • Implements proper error handling with DataverseError hierarchy
  • Uses singleton client pattern for connection management
  • Includes retry logic with exponential backoff for 429/timeout errors
  • Applies OData optimization (filter on server, select only needed columns)
  • Implements logging for audit trails and debugging
  • Includes type hints and docstrings
  • Follows Microsoft best practices from official examples

Code Generation Rules

Error Handling Structure

from PowerPlatform.Dataverse.core.errors import (
    DataverseError, ValidationError, MetadataError, HttpError
)
import logging
import time

logger = logging.getLogger(__name__)

def operation_with_retry(max_retries=3):
    """Function with retry logic."""
    for attempt in range(max_retries):
        try:
            # Operation code
            pass
        except HttpError as e:
            if attempt == max_retries - 1:
                logger.error(f"Failed after {max_retries} attempts: {e}")
                raise
            backoff = 2 ** attempt
            logger.warning(f"Attempt {attempt + 1} failed. Retrying in {backoff}s")
            time.sleep(backoff)

Client Management Pattern

class DataverseService:
    _instance = None
    _client = None
    
    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance
    
    def __init__(self, org_url, credential):
        if self._client is None:
            self._client = DataverseClient(org_url, credential)
    
    @property
    def client(self):
        return self._client

Logging Pattern

import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

logger.info(f"Created {count} records")
logger.warning(f"Record {id} not found")
logger.error(f"Operation failed: {error}")

OData Optimization

  • Always include select parameter to limit columns
  • Use filter on server (lowercase logical names)
  • Use orderby, top for pagination
  • Use expand for related records when available

Code Structure

  1. Imports (stdlib, then third-party, then local)
  2. Constants and enums
  3. Logging configuration
  4. Helper functions
  5. Main service classes
  6. Error handling classes
  7. Usage examples

User Request Processing

When user asks to generate code, provide:

  1. Imports section with all required modules
  2. Configuration section with constants/enums
  3. Main implementation with proper error handling
  4. Docstrings explaining parameters and return values
  5. Type hints for all functions
  6. Usage example showing how to call the code
  7. Error scenarios with exception handling
  8. Logging statements for debugging

Quality Standards

  • ✅ All code must be syntactically correct Python 3.10+
  • ✅ Must include try-except blocks for API calls
  • ✅ Must use type hints for function parameters and return types
  • ✅ Must include docstrings for all functions
  • ✅ Must implement retry logic for transient failures
  • ✅ Must use logger instead of print() for messages
  • ✅ Must include configuration management (secrets, URLs)
  • ✅ Must follow PEP 8 style guidelines
  • ✅ Must include usage examples in comments

Source

git clone https://github.com/github/awesome-copilot/blob/main/plugins/dataverse-sdk-for-python/skills/dataverse-python-production-code/SKILL.mdView on GitHub

Overview

Generates production-ready Python code using the Dataverse SDK, including robust error handling, a singleton client, and exponential backoff for transient errors. It emphasizes server-side OData optimization (filter, select, top) and structured logging for audits and debugging.

How This Skill Works

The approach wires a singleton Dataverse client, wraps API calls with retry logic for 429/timeout errors, and uses type hints and docstrings. It follows a structured pattern (imports, config, main service, error classes, usage examples) and applies OData optimization by filtering server-side and selecting only needed columns.

When to Use It

  • Integrating Dataverse into production-grade Python apps needing robust reliability
  • Automating data ingestion or synchronization with retry for transient failures
  • When minimizing payloads via server-side filtering and selective field retrieval
  • Auditing operations with consistent logging for debugging and compliance
  • Building maintainable integrations aligned with Microsoft best practices

Quick Start

  1. Step 1: Install dependencies and import the Dataverse SDK for Python
  2. Step 2: Configure org URL and credentials in a secure configuration module
  3. Step 3: Instantiate DataverseService and perform operations with proper error handling

Best Practices

  • Implement a singleton client pattern to manage connections efficiently
  • Always use OData select to limit returned columns and filter on the server
  • Wrap API calls in try-except blocks and implement exponential backoff for retries
  • Use a logger for all messages instead of print statements with clear levels
  • Provide full type hints and docstrings for all functions and methods

Example Use Cases

  • Synchronize Contacts to Dataverse with selective fields and robust retries
  • Upsert multiple records using server-side filtering and top-based pagination
  • Audit API calls by logging request IDs, timestamps, and outcomes
  • Handle network timeouts gracefully with backoff and structured error propagation
  • Paginate large queries using top and orderby while returning only needed fields

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers