{"kind":"AgentDefinition","metadata":{"namespace":"community","name":"dataverse-python-real-world-usecases","version":"0.1.0"},"spec":{"agents_md":"---\napplyTo: '**'\n---\n\n# Dataverse SDK for Python — Real-World Use Cases \u0026 Templates\n\nBased on official Dataverse data migration and integration patterns.\n\n## 1. Data Migration from Legacy Systems\n\n### Migration Architecture\n\n```\nLegacy System → Staging Database → Dataverse\n    (Extract)    (Transform)        (Load)\n```\n\n### Complete Migration Example\n\n```python\nimport pandas as pd\nimport time\nfrom PowerPlatform.Dataverse.client import DataverseClient\nfrom PowerPlatform.Dataverse.core.errors import DataverseError\nfrom azure.identity import DefaultAzureCredential\n\nclass DataMigrationPipeline:\n    \"\"\"Migrate data from legacy system to Dataverse.\"\"\"\n    \n    def __init__(self, org_url: str):\n        self.client = DataverseClient(\n            base_url=org_url,\n            credential=DefaultAzureCredential()\n        )\n        self.success_records = []\n        self.failed_records = []\n    \n    def extract_from_legacy(self, legacy_db_connection, query: str):\n        \"\"\"Extract data from source system.\"\"\"\n        return pd.read_sql(query, legacy_db_connection)\n    \n    def transform_accounts(self, df: pd.DataFrame) -\u003e list:\n        \"\"\"Transform source data to Dataverse schema.\"\"\"\n        payloads = []\n        \n        for _, row in df.iterrows():\n            # Map source fields to Dataverse\n            payload = {\n                \"name\": row[\"company_name\"][:100],  # Limit to 100 chars\n                \"telephone1\": row[\"phone\"],\n                \"websiteurl\": row[\"website\"],\n                \"revenue\": float(row[\"annual_revenue\"]) if row[\"annual_revenue\"] else None,\n                \"numberofemployees\": int(row[\"employees\"]) if row[\"employees\"] else None,\n                # Track source ID for reconciliation\n                \"new_sourcecompanyid\": str(row[\"legacy_id\"]),\n                \"new_importsequencenumber\": row[\"legacy_id\"]\n            }\n            payloads.append(payload)\n        \n        return payloads\n    \n    def load_to_dataverse(self, payloads: list, batch_size: int = 200):\n        \"\"\"Load data to Dataverse with error tracking.\"\"\"\n        total = len(payloads)\n        \n        for i in range(0, total, batch_size):\n            batch = payloads[i:i + batch_size]\n            \n            try:\n                ids = self.client.create(\"account\", batch)\n                self.success_records.extend(ids)\n                print(f\"✓ Created {len(ids)} records ({len(self.success_records)}/{total})\")\n                \n                # Prevent rate limiting\n                time.sleep(0.5)\n                \n            except DataverseError as e:\n                self.failed_records.extend(batch)\n                print(f\"✗ Batch failed: {e.message}\")\n    \n    def reconcile_migration(self, df: pd.DataFrame):\n        \"\"\"Verify migration and track results.\"\"\"\n        \n        # Query created records\n        created_accounts = self.client.get(\n            \"account\",\n            filter=\"new_importsequencenumber ne null\",\n            select=[\"accountid\", \"new_sourcecompanyid\", \"new_importsequencenumber\"],\n            top=10000\n        )\n        \n        created_df = pd.DataFrame(list(created_accounts))\n        \n        # Update source table with Dataverse IDs\n        merged = df.merge(\n            created_df,\n            left_on=\"legacy_id\",\n            right_on=\"new_importsequencenumber\"\n        )\n        \n        print(f\"Successfully migrated {len(merged)} accounts\")\n        print(f\"Failed: {len(self.failed_records)} records\")\n        \n        return {\n            \"total_source\": len(df),\n            \"migrated\": len(merged),\n            \"failed\": len(self.failed_records),\n            \"success_rate\": len(merged) / len(df) * 100\n        }\n\n# Usage\npipeline = DataMigrationPipeline(\"https://myorg.crm.dynamics.com\")\n\n# Extract\nsource_data = pipeline.extract_from_legacy(\n    legacy_connection,\n    \"SELECT id, company_name, phone, website, annual_revenue, employees FROM companies\"\n)\n\n# Transform\npayloads = pipeline.transform_accounts(source_data)\n\n# Load\npipeline.load_to_dataverse(payloads, batch_size=300)\n\n# Reconcile\nresults = pipeline.reconcile_migration(source_data)\nprint(results)\n```\n\n---\n\n## 2. Data Quality \u0026 Deduplication Agent\n\n### Detect and Merge Duplicates\n\n```python\nfrom PowerPlatform.Dataverse.client import DataverseClient\nfrom azure.identity import DefaultAzureCredential\nimport difflib\n\nclass DataQualityAgent:\n    \"\"\"Monitor and improve data quality.\"\"\"\n    \n    def __init__(self, org_url: str):\n        self.client = DataverseClient(\n            base_url=org_url,\n            credential=DefaultAzureCredential()\n        )\n    \n    def find_potential_duplicates(self, table_name: str, match_fields: list):\n        \"\"\"Find potential duplicate records.\"\"\"\n        \n        records = []\n        for page in self.client.get(table_name, select=match_fields, top=10000):\n            records.extend(page)\n        \n        duplicates = []\n        seen = {}\n        \n        for record in records:\n            # Create key from match fields\n            key = tuple(\n                record.get(field, \"\").lower().strip() \n                for field in match_fields\n            )\n            \n            if key in seen and key != (\"\",) * len(match_fields):\n                duplicates.append({\n                    \"original\": seen[key],\n                    \"duplicate\": record,\n                    \"fields_matched\": match_fields\n                })\n            else:\n                seen[key] = record\n        \n        return duplicates, len(records)\n    \n    def merge_records(self, table_name: str, primary_id: str, duplicate_id: str, \n                     mapping: dict):\n        \"\"\"Merge duplicate record into primary.\"\"\"\n        \n        # Copy data from duplicate to primary\n        updates = {}\n        duplicate = self.client.get(table_name, duplicate_id)\n        \n        for source_field, target_field in mapping.items():\n            if duplicate.get(source_field) and not primary.get(target_field):\n                updates[target_field] = duplicate[source_field]\n        \n        # Update primary\n        if updates:\n            self.client.update(table_name, primary_id, updates)\n        \n        # Delete duplicate\n        self.client.delete(table_name, duplicate_id)\n        \n        return f\"Merged {duplicate_id} into {primary_id}\"\n    \n    def generate_quality_report(self, table_name: str) -\u003e dict:\n        \"\"\"Generate data quality metrics.\"\"\"\n        \n        records = list(self.client.get(table_name, top=10000))\n        \n        report = {\n            \"table\": table_name,\n            \"total_records\": len(records),\n            \"null_values\": {},\n            \"duplicates\": 0,\n            \"completeness_score\": 0\n        }\n        \n        # Check null values\n        all_fields = set()\n        for record in records:\n            all_fields.update(record.keys())\n        \n        for field in all_fields:\n            null_count = sum(1 for r in records if not r.get(field))\n            completeness = (len(records) - null_count) / len(records) * 100\n            \n            if completeness \u003c 100:\n                report[\"null_values\"][field] = {\n                    \"null_count\": null_count,\n                    \"completeness\": completeness\n                }\n        \n        # Check duplicates\n        duplicates, _ = self.find_potential_duplicates(\n            table_name, \n            [\"name\", \"emailaddress1\"]\n        )\n        report[\"duplicates\"] = len(duplicates)\n        \n        # Overall completeness\n        avg_completeness = sum(\n            100 - ((d[\"null_count\"] / len(records)) * 100)\n            for d in report[\"null_values\"].values()\n        ) / len(report[\"null_values\"]) if report[\"null_values\"] else 100\n        report[\"completeness_score\"] = avg_completeness\n        \n        return report\n\n# Usage\nagent = DataQualityAgent(\"https://myorg.crm.dynamics.com\")\n\n# Find duplicates\nduplicates, total = agent.find_potential_duplicates(\n    \"account\",\n    match_fields=[\"name\", \"emailaddress1\"]\n)\n\nprint(f\"Found {len(duplicates)} potential duplicates out of {total} accounts\")\n\n# Merge if confident\nfor dup in duplicates[:5]:  # Process top 5\n    result = agent.merge_records(\n        \"account\",\n        primary_id=dup[\"original\"][\"accountid\"],\n        duplicate_id=dup[\"duplicate\"][\"accountid\"],\n        mapping={\"telephone1\": \"telephone1\", \"websiteurl\": \"websiteurl\"}\n    )\n    print(result)\n\n# Quality report\nreport = agent.generate_quality_report(\"account\")\nprint(f\"Data Quality: {report['completeness_score']:.1f}%\")\n```\n\n---\n\n## 3. Contact \u0026 Account Enrichment\n\n### Enrich CRM Data from External Sources\n\n```python\nimport requests\nfrom PowerPlatform.Dataverse.client import DataverseClient\nfrom azure.identity import DefaultAzureCredential\n\nclass DataEnrichmentAgent:\n    \"\"\"Enrich CRM records with external data.\"\"\"\n    \n    def __init__(self, org_url: str, external_api_key: str):\n        self.client = DataverseClient(\n            base_url=org_url,\n            credential=DefaultAzureCredential()\n        )\n        self.api_key = external_api_key\n    \n    def enrich_accounts_with_industry_data(self):\n        \"\"\"Enrich accounts with industry classification.\"\"\"\n        \n        accounts = self.client.get(\n            \"account\",\n            select=[\"accountid\", \"name\", \"websiteurl\"],\n            filter=\"new_industrydata eq null\",\n            top=500\n        )\n        \n        enriched_count = 0\n        for page in accounts:\n            for account in page:\n                try:\n                    # Call external API\n                    industry = self._lookup_industry(account[\"name\"])\n                    \n                    if industry:\n                        self.client.update(\n                            \"account\",\n                            account[\"accountid\"],\n                            {\"new_industrydata\": industry}\n                        )\n                        enriched_count += 1\n                \n                except Exception as e:\n                    print(f\"Failed to enrich {account['name']}: {e}\")\n        \n        return enriched_count\n    \n    def enrich_contacts_with_social_profiles(self):\n        \"\"\"Find and link social media profiles.\"\"\"\n        \n        contacts = self.client.get(\n            \"contact\",\n            select=[\"contactid\", \"fullname\", \"emailaddress1\"],\n            filter=\"new_linkedinurl eq null\",\n            top=500\n        )\n        \n        for page in contacts:\n            for contact in page:\n                try:\n                    # Find social profiles\n                    profiles = self._find_social_profiles(\n                        contact[\"fullname\"],\n                        contact[\"emailaddress1\"]\n                    )\n                    \n                    if profiles:\n                        self.client.update(\n                            \"contact\",\n                            contact[\"contactid\"],\n                            {\n                                \"new_linkedinurl\": profiles.get(\"linkedin\"),\n                                \"new_twitterhandle\": profiles.get(\"twitter\")\n                            }\n                        )\n                \n                except Exception as e:\n                    print(f\"Failed to enrich {contact['fullname']}: {e}\")\n    \n    def _lookup_industry(self, company_name: str) -\u003e str:\n        \"\"\"Call external industry API.\"\"\"\n        response = requests.get(\n            \"https://api.example.com/industry\",\n            params={\"company\": company_name},\n            headers={\"Authorization\": f\"Bearer {self.api_key}\"}\n        )\n        \n        if response.status_code == 200:\n            return response.json().get(\"industry\")\n        return None\n    \n    def _find_social_profiles(self, name: str, email: str) -\u003e dict:\n        \"\"\"Find social media profiles for person.\"\"\"\n        response = requests.get(\n            \"https://api.example.com/social\",\n            params={\"name\": name, \"email\": email},\n            headers={\"Authorization\": f\"Bearer {self.api_key}\"}\n        )\n        \n        if response.status_code == 200:\n            return response.json()\n        return {}\n\n# Usage\nenricher = DataEnrichmentAgent(\n    \"https://myorg.crm.dynamics.com\",\n    api_key=\"your-api-key\"\n)\n\nenriched = enricher.enrich_accounts_with_industry_data()\nprint(f\"Enriched {enriched} accounts\")\n```\n\n---\n\n## 4. Automated Report Data Export\n\n### Export CRM Data to Excel\n\n```python\nimport pandas as pd\nfrom PowerPlatform.Dataverse.client import DataverseClient\nfrom azure.identity import DefaultAzureCredential\nfrom datetime import datetime\n\nclass ReportExporter:\n    \"\"\"Export Dataverse data to reports.\"\"\"\n    \n    def __init__(self, org_url: str):\n        self.client = DataverseClient(\n            base_url=org_url,\n            credential=DefaultAzureCredential()\n        )\n    \n    def export_sales_summary(self, output_file: str):\n        \"\"\"Export sales data for reporting.\"\"\"\n        \n        accounts = []\n        for page in self.client.get(\n            \"account\",\n            select=[\"accountid\", \"name\", \"revenue\", \"numberofemployees\", \n                   \"createdon\", \"modifiedon\"],\n            filter=\"statecode eq 0\",  # Active only\n            orderby=[\"revenue desc\"],\n            top=10000\n        ):\n            accounts.extend(page)\n        \n        # Opportunities\n        opportunities = []\n        for page in self.client.get(\n            \"opportunity\",\n            select=[\"opportunityid\", \"name\", \"estimatedvalue\", \n                   \"statuscode\", \"parentaccountid\", \"createdon\"],\n            top=10000\n        ):\n            opportunities.extend(page)\n        \n        # Create DataFrames\n        df_accounts = pd.DataFrame(accounts)\n        df_opportunities = pd.DataFrame(opportunities)\n        \n        # Generate report\n        with pd.ExcelWriter(output_file) as writer:\n            df_accounts.to_excel(writer, sheet_name=\"Accounts\", index=False)\n            df_opportunities.to_excel(writer, sheet_name=\"Opportunities\", index=False)\n            \n            # Summary sheet\n            summary = pd.DataFrame({\n                \"Metric\": [\n                    \"Total Accounts\",\n                    \"Total Opportunities\",\n                    \"Total Revenue\",\n                    \"Export Date\"\n                ],\n                \"Value\": [\n                    len(df_accounts),\n                    len(df_opportunities),\n                    df_accounts[\"revenue\"].sum() if \"revenue\" in df_accounts else 0,\n                    datetime.now().isoformat()\n                ]\n            })\n            summary.to_excel(writer, sheet_name=\"Summary\", index=False)\n        \n        return output_file\n    \n    def export_activity_log(self, days_back: int = 30) -\u003e str:\n        \"\"\"Export recent activity for audit.\"\"\"\n        \n        from_date = pd.Timestamp.now(tz='UTC') - pd.Timedelta(days=days_back)\n        \n        activities = []\n        for page in self.client.get(\n            \"activitypointer\",\n            select=[\"activityid\", \"subject\", \"activitytypecode\", \n                   \"createdon\", \"ownerid\"],\n            filter=f\"createdon gt {from_date.isoformat()}\",\n            orderby=[\"createdon desc\"],\n            top=10000\n        ):\n            activities.extend(page)\n        \n        df = pd.DataFrame(activities)\n        output = f\"activity_log_{datetime.now():%Y%m%d}.csv\"\n        df.to_csv(output, index=False)\n        \n        return output\n\n# Usage\nexporter = ReportExporter(\"https://myorg.crm.dynamics.com\")\nreport_file = exporter.export_sales_summary(\"sales_report.xlsx\")\nprint(f\"Report saved to {report_file}\")\n```\n\n---\n\n## 5. Workflow Integration - Bulk Operations\n\n### Process Records Based on Conditions\n\n```python\nfrom PowerPlatform.Dataverse.client import DataverseClient\nfrom azure.identity import DefaultAzureCredential\nfrom enum import IntEnum\n\nclass AccountStatus(IntEnum):\n    PROSPECT = 1\n    ACTIVE = 2\n    CLOSED = 3\n\nclass BulkWorkflow:\n    \"\"\"Automate bulk operations.\"\"\"\n    \n    def __init__(self, org_url: str):\n        self.client = DataverseClient(\n            base_url=org_url,\n            credential=DefaultAzureCredential()\n        )\n    \n    def mark_accounts_as_inactive_if_no_activity(self, days_no_activity: int = 90):\n        \"\"\"Deactivate accounts with no recent activity.\"\"\"\n        \n        from_date = f\"2025-{datetime.now().month:02d}-01T00:00:00Z\"\n        \n        inactive_accounts = self.client.get(\n            \"account\",\n            select=[\"accountid\", \"name\"],\n            filter=f\"modifiedon lt {from_date} and statecode eq 0\",\n            top=5000\n        )\n        \n        accounts_to_deactivate = []\n        for page in inactive_accounts:\n            accounts_to_deactivate.extend([a[\"accountid\"] for a in page])\n        \n        # Bulk update\n        if accounts_to_deactivate:\n            self.client.update(\n                \"account\",\n                accounts_to_deactivate,\n                {\"statecode\": AccountStatus.CLOSED}\n            )\n            print(f\"Deactivated {len(accounts_to_deactivate)} inactive accounts\")\n    \n    def update_opportunity_status_based_on_amount(self):\n        \"\"\"Update opportunity stage based on estimated value.\"\"\"\n        \n        opportunities = self.client.get(\n            \"opportunity\",\n            select=[\"opportunityid\", \"estimatedvalue\"],\n            filter=\"statuscode ne 7\",  # Not closed\n            top=5000\n        )\n        \n        updates = []\n        ids = []\n        \n        for page in opportunities:\n            for opp in page:\n                value = opp.get(\"estimatedvalue\", 0)\n                \n                # Determine stage\n                if value \u003c 10000:\n                    stage = 1  # Qualification\n                elif value \u003c 50000:\n                    stage = 2  # Proposal\n                else:\n                    stage = 3  # Proposal Review\n                \n                updates.append({\"stageid\": stage})\n                ids.append(opp[\"opportunityid\"])\n        \n        # Bulk update\n        if ids:\n            self.client.update(\"opportunity\", ids, updates)\n            print(f\"Updated {len(ids)} opportunities\")\n\n# Usage\nworkflow = BulkWorkflow(\"https://myorg.crm.dynamics.com\")\nworkflow.mark_accounts_as_inactive_if_no_activity(days_no_activity=90)\nworkflow.update_opportunity_status_based_on_amount()\n```\n\n---\n\n## 6. Scheduled Job Template\n\n### Azure Function for Scheduled Operations\n\n```python\n# scheduled_migration_job.py\nimport azure.functions as func\nfrom datetime import datetime\nfrom DataMigrationPipeline import DataMigrationPipeline\nimport logging\n\ndef main(timer: func.TimerRequest) -\u003e None:\n    \"\"\"Run migration job on schedule (e.g., daily).\"\"\"\n    \n    if timer.past_due:\n        logging.info('The timer is past due!')\n    \n    try:\n        logging.info(f'Migration job started at {datetime.utcnow()}')\n        \n        # Run migration\n        pipeline = DataMigrationPipeline(\"https://myorg.crm.dynamics.com\")\n        \n        # Extract, transform, load\n        source_data = pipeline.extract_from_legacy(...)\n        payloads = pipeline.transform_accounts(source_data)\n        pipeline.load_to_dataverse(payloads)\n        \n        # Get results\n        results = pipeline.reconcile_migration(source_data)\n        \n        logging.info(f'Migration completed: {results}')\n        \n    except Exception as e:\n        logging.error(f'Migration failed: {e}')\n        raise\n\n# function_app.py - Azure Functions setup\napp = func.FunctionApp()\n\n@app.schedule_trigger(schedule=\"0 0 * * *\")  # Daily at midnight\ndef migration_job(timer: func.TimerRequest) -\u003e None:\n    main(timer)\n```\n\n---\n\n## 7. Complete Starter Template\n\n```python\n#!/usr/bin/env python3\n\"\"\"\nDataverse SDK for Python - Complete Starter Template\n\"\"\"\n\nfrom azure.identity import DefaultAzureCredential\nfrom PowerPlatform.Dataverse.client import DataverseClient\nfrom PowerPlatform.Dataverse.core.config import DataverseConfig\nfrom PowerPlatform.Dataverse.core.errors import DataverseError\nimport logging\n\n# Configure logging\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(__name__)\n\nclass DataverseApp:\n    \"\"\"Base class for Dataverse applications.\"\"\"\n    \n    def __init__(self, org_url: str):\n        self.org_url = org_url\n        self.client = self._create_client()\n    \n    def _create_client(self) -\u003e DataverseClient:\n        \"\"\"Create authenticated client.\"\"\"\n        cfg = DataverseConfig()\n        cfg.logging_enable = False\n        \n        return DataverseClient(\n            base_url=self.org_url,\n            credential=DefaultAzureCredential(),\n            config=cfg\n        )\n    \n    def create_account(self, name: str, phone: str = None) -\u003e str:\n        \"\"\"Create account record.\"\"\"\n        try:\n            payload = {\"name\": name}\n            if phone:\n                payload[\"telephone1\"] = phone\n            \n            id = self.client.create(\"account\", payload)[0]\n            logger.info(f\"Created account: {id}\")\n            return id\n        \n        except DataverseError as e:\n            logger.error(f\"Failed to create account: {e.message}\")\n            raise\n    \n    def get_accounts(self, filter_expr: str = None, top: int = 100) -\u003e list:\n        \"\"\"Get account records.\"\"\"\n        try:\n            accounts = self.client.get(\n                \"account\",\n                filter=filter_expr,\n                select=[\"accountid\", \"name\", \"telephone1\", \"createdon\"],\n                orderby=[\"createdon desc\"],\n                top=top\n            )\n            \n            all_accounts = []\n            for page in accounts:\n                all_accounts.extend(page)\n            \n            logger.info(f\"Retrieved {len(all_accounts)} accounts\")\n            return all_accounts\n        \n        except DataverseError as e:\n            logger.error(f\"Failed to get accounts: {e.message}\")\n            raise\n    \n    def update_account(self, account_id: str, **kwargs) -\u003e None:\n        \"\"\"Update account record.\"\"\"\n        try:\n            self.client.update(\"account\", account_id, kwargs)\n            logger.info(f\"Updated account: {account_id}\")\n        \n        except DataverseError as e:\n            logger.error(f\"Failed to update account: {e.message}\")\n            raise\n\nif __name__ == \"__main__\":\n    # Usage\n    app = DataverseApp(\"https://myorg.crm.dynamics.com\")\n    \n    # Create\n    account_id = app.create_account(\"Acme Inc\", \"555-0100\")\n    \n    # Get\n    accounts = app.get_accounts(filter_expr=\"statecode eq 0\", top=50)\n    print(f\"Found {len(accounts)} active accounts\")\n    \n    # Update\n    app.update_account(account_id, telephone1=\"555-0199\")\n```\n\n---\n\n## 8. See Also\n\n- [Dataverse Data Migration](https://learn.microsoft.com/en-us/power-platform/architecture/key-concepts/data-migration/workflow-complex-data-migration)\n- [Working with Data (SDK)](https://learn.microsoft.com/en-us/power-apps/developer/data-platform/sdk-python/work-data)\n- [SDK Examples on GitHub](https://github.com/microsoft/PowerPlatform-DataverseClient-Python/tree/main/examples)\n","description":"Based on official Dataverse data migration and integration patterns.","import":{"commit_sha":"541b7819d8c3545c6df122491af4fa1eae415779","imported_at":"2026-05-18T20:05:35Z","license_text":"MIT License\n\nCopyright GitHub, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","owner":"github","repo":"github/awesome-copilot","source_url":"https://github.com/github/awesome-copilot/blob/541b7819d8c3545c6df122491af4fa1eae415779/instructions/dataverse-python-real-world-usecases.instructions.md"},"manifest":{}},"content_hash":[127,253,247,30,198,92,21,14,205,246,247,67,61,100,128,253,144,32,56,154,232,40,9,82,58,203,122,37,57,13,82,95],"trust_level":"unsigned","yanked":false}
