Generate typed Python client code for a Dataverse table
Generates typed Python client code for a Dataverse table with CRUD operations and Pydantic models.
/plugin marketplace add Sahib-Sawhney-WH/sahibs-claude-plugin-marketplace/plugin install dataverse@sahib-claude-marketplace<table_name>Generate typed Python client code for a specific Dataverse table.
When the user runs /dataverse:generate-client <table>:
Get table schema
dataverse_get_table_info to get columns and typesGenerate Pydantic models
Generate client class
Write output file
<table>_client.py| Dataverse Type | Python Type |
|---|---|
| string | str |
| int | int |
| decimal | Decimal |
| bool | bool |
| datetime | datetime |
| lookup | str (GUID) |
| picklist | int or Enum |
"""
Auto-generated Dataverse client for {table_name}
Generated by dataverse plugin
"""
from dataclasses import dataclass
from typing import Optional, List
from datetime import datetime
from decimal import Decimal
from PowerPlatform.Dataverse.client import DataverseClient
@dataclass
class {TableClass}:
"""{table_name} record model."""
{table_id}: Optional[str] = None
{columns}
class {TableClass}Client:
"""Client for {table_name} operations."""
def __init__(self, client: DataverseClient):
self.client = client
self.table = "{table_schema_name}"
def create(self, record: {TableClass}) -> str:
"""Create a new {table_name} record."""
data = {k: v for k, v in record.__dict__.items() if v is not None}
ids = self.client.create(self.table, data)
return ids[0]
def get(self, record_id: str) -> {TableClass}:
"""Get a {table_name} record by ID."""
data = self.client.get(self.table, record_id)
return {TableClass}(**data)
def update(self, record_id: str, updates: dict) -> None:
"""Update a {table_name} record."""
self.client.update(self.table, record_id, updates)
def delete(self, record_id: str) -> None:
"""Delete a {table_name} record."""
self.client.delete(self.table, record_id)
def list(self, filter: str = None, top: int = 100) -> List[{TableClass}]:
"""List {table_name} records."""
pages = self.client.get(self.table, filter=filter, top=top)
records = []
for page in pages:
records.extend([{TableClass}(**r) for r in page])
return records
Show the generated code and write to file.