{"id":26494083,"url":"https://github.com/olafwrieden/unifiedcatalogpy","last_synced_at":"2026-03-13T15:38:20.368Z","repository":{"id":282706828,"uuid":"948580027","full_name":"olafwrieden/unifiedcatalogpy","owner":"olafwrieden","description":"A Python wrapper for Microsoft Purview Data Governance Unified Catalog API.","archived":false,"fork":false,"pushed_at":"2025-06-13T00:04:31.000Z","size":162,"stargazers_count":5,"open_issues_count":1,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-20T04:52:29.668Z","etag":null,"topics":["api-wrapper","azure","microsoft-purview","purview-data-governance","python-sdk"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/unifiedcatalogpy","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/olafwrieden.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-14T15:28:36.000Z","updated_at":"2025-09-18T15:55:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"61289bd8-f5eb-45e4-aec7-92f0e287283b","html_url":"https://github.com/olafwrieden/unifiedcatalogpy","commit_stats":null,"previous_names":["olafwrieden/unifiedcatalogpy"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/olafwrieden/unifiedcatalogpy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olafwrieden%2Funifiedcatalogpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olafwrieden%2Funifiedcatalogpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olafwrieden%2Funifiedcatalogpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olafwrieden%2Funifiedcatalogpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/olafwrieden","download_url":"https://codeload.github.com/olafwrieden/unifiedcatalogpy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olafwrieden%2Funifiedcatalogpy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30469325,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T11:00:43.441Z","status":"ssl_error","status_checked_at":"2026-03-13T11:00:23.173Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-wrapper","azure","microsoft-purview","purview-data-governance","python-sdk"],"created_at":"2025-03-20T09:59:32.538Z","updated_at":"2026-03-13T15:38:20.359Z","avatar_url":"https://github.com/olafwrieden.png","language":"Python","funding_links":["https://buymeacoffee.com/olafwrieden"],"categories":[],"sub_categories":[],"readme":"![Banner](https://raw.githubusercontent.com/olafwrieden/unifiedcatalogpy/main/assets/media/banner.png)\n\n# Introducing: UnifiedCatalogPy\n\nAn unofficial Python wrapper for Microsoft Purview Data Governance's Unified Catalog API. Not affiliated or officially supported by Microsoft. Built as a personal project by tediously observing the internet browser's XHR network traffic and reverse engineering the API - ☕️ [buy me a coffee](https://buymeacoffee.com/olafwrieden).\n\n## Overview 🔥\n\nUnifiedCatalogPy simplifies the interaction with Microsoft Purview's Unified Catalog API. It provides a set of features that allow you to manage and interact with various data governance elements, including operations for creating, retrieving, updating, and deleting business concepts.\n\n**Interact with:**\n\n- Governance Domains\n- Glossary Terms\n- Data Products\n- Objectives and Key Results (OKRs)\n- Critical Data Elements (CDEs)\n- Custom Attributes (🚧 coming soon)\n- Requests (🚧 coming soon)\n- Health Management (🚧 coming soon)\n  - Health Controls\n  - Health Actions\n  - ~~Data Quality~~ (no API support yet!)\n\n\u003e [!WARNING]\n\u003e This library is currently in development and the features listed above are yet to be implemented. It is not affiliated with Microsoft.\n\n## Quick Start 🚀\n\n### 1. Installation\n\nStart by installing the library. You will also need to install the `azure-identity` library to authenticate with Microsoft Purview.\n\n```bash\n# Install the library\npip install unifiedcatalogpy azure-identity\n```\n\n### 2. Authentication\n\nMicrosoft Purview requires an authorized identity to perform tasks. You can choose between authenticating as a user (via [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/get-started-with-azure-cli)) or using a Service Principal.\n\n\u003e [!NOTE]\n\u003e In most cases you should be using a Service Principal to query Microsoft Purview (RBAC permissions can be scoped independently of a user). Remember that ownership of an artifact defaults to its creator unless you specify a user/group at creation.\n\n#### Using Azure CLI\n\nIf you are using the Azure CLI, be sure to log in using `az login` before running your Python notebook. Your credentials will be automatically picked up by the `DefaultAzureCredential` class. Your user must have the **Data Governance Administrator** role in Microsoft Purview to perform operations.\n\n#### Using a Service Principal\n\n1. ️Navigate to the Azure portal to [create a new Service Principal](https://learn.microsoft.com/en-us/purview/tutorial-using-rest-apis) for your application and generate a client secret.\n2. Copy the Application (client) ID, Directory (tenant) ID, and Client Secret (value) into your Python environment variables.\n\n   ```\n   AZURE_CLIENT_ID=\n   AZURE_TENANT_ID=\n   AZURE_CLIENT_SECRET=\n   ```\n\n3. Navigate to the _Properties_ tab of your Microsoft Purview Azure resource to locate your Purview account ID. It can be found in the _Atlas endpoint URL_.\n\n   **Example:** `https://\u003cyour-purview-account-id\u003e-api.purview-service.microsoft.com/catalog`\n\n   Copy the `\u003cyour-purview-account-id\u003e` - you will need it in a moment to create the client.\n\n4. Navigate to the Microsoft Purview portal _\u003e Settings \u003e Solution Settings \u003e Unified Catalog \u003e Roles and Permissions \u003e Data Governance Administrators_ and add the Service Principal as a **Data Governance Administrator**.\n\n5. Your Service Principal is now authorized to interact with Microsoft Purview Data Governance Unified Catalog API. Let's test it out! 🚀\n\n### 3. Using the Client\n\nIn your Python notebook, you can use the library as follows:\n\n```python\n# Import the library\nfrom unfiedcatalogpy.client import UnifiedCatalogClient\nfrom azure.identity import DefaultAzureCredential\n\ncredential = DefaultAzureCredential()\n\n# Create the Unified Catalog Client\nclient = UnifiedCatalogClient(\n account_id=\"\u003cyour-purview-account-id\u003e\",\n credential=credential\n)\n\n# Interact with the client\ndomains = client.get_governance_domains()\n```\n\n**💡 Good to know:** Detailed usage examples for supported functionality is provided in the documentation section below. _Let's automate!_\n\n## Documentation 📖\n\nHere is what's possible with the `UnifiedCatalogPy` client.\n\n\u003e [!NOTE]\n\u003e This library is not locked to a specific version of the Microsoft Purview API as an official API for the Unified Catalog is not yet available. This means functionality may change unexpectedly. [See limitations](#limitations-)\n\n### Governance Domain\n\nAn organizational object that provides context for your data assets and make it easier scale data governance practices. [Learn more](https://learn.microsoft.com/en-us/purview/concept-governance-domain)\n\n#### Create a Governance Domain\n\n```python\n# Create a new governance domain\nnew_domain = client.create_governance_domain(\n    name=\"My First Domain\",\n    description=\"\u003cdiv\u003eThis is an example of a \u003cb\u003erich text\u003c/b\u003e description.\u003c/div\u003e\",\n    type=\"FunctionalUnit\",\n    owners=[{ \"id\": \"\u003centra-object-id\u003e\" }],\n    status=\"Draft\",\n)\n\n# Show the new governance domain\nprint(new_domain)\n```\n\n#### Retrieve all Governance Domains\n\n```python\n# Get all governance domains\ndomains = client.get_governance_domains()\n```\n\n_Note: Pagination over governance domains is not yet supported._\n\n#### Retrieve a Governance Domain by ID\n\n```python\n# Get a governance domain by ID\ndomain = client.get_governance_domain_by_id(\"\u003cyour-governance-domain-id\u003e\")\n\n# Show the governance domain\nprint(domain)\n```\n\n#### Update a Governance Domain\n\n```python\n# Update a governance domain by ID\nupdated_domain = client.update_governance_domain(\n    governance_domain_id=\"\u003cyour-governance-domain-id\u003e\",\n    name=\"Updated Domain Name\",\n    description=\"\u003cdiv\u003eThis is an updated domain description.\u003c/div\u003e\",\n    type=\"FunctionalUnit\",\n    owners=[{ \"id\": \"\u003centra-object-id\u003e\" }],\n    status=\"Draft\",\n)\n\n# Show the updated governance domain\nprint(updated_domain)\n```\n\n#### Delete a Governance Domain\n\n```python\n# Delete a governance domain by ID\ndeleted = client.delete_governance_domain(\"\u003cyour-governance-domain-id\u003e\")\n\nif deleted:\n    print(\"Governance domain deleted successfully.\")\nelse:\n    print(\"Failed to delete governance domain.\")\n```\n\n---\n\n### Glossary Terms\n\nActive values that provide context but also apply policies that determine how your data should be managed, governed, and made discoverable for use. [Learn more](https://learn.microsoft.com/en-us/purview/concept-glossary-terms)\n\n#### Create a Glossary Term\n\n```python\n# Create new glossary term\nterm = client.create_term(\n    name=\"My First Term\",\n    description=\"\u003cdiv\u003eThis is a \u003cb\u003erich description\u003c/b\u003e of my first term.\u003c/div\u003e\",\n    status=\"Draft\",\n    governance_domain_id=\"\u003cyour-governance-domain-id\u003e\",\n    acronyms=[\"ACRONYM_1\", \"ACRONYM_2\"],\n    resources=[\n        {\n            \"name\": \"Read more details\",\n            \"url\": \"https://example.com\",\n        }\n    ],\n    owners=[{\"id\": \"\u003centra-object-id\u003e\"}],\n)\n\n# Show the new glossary term\nprint(term)\n```\n\n#### Retrieve all Glossary Terms in a Governance Domain\n\n```python\n# Get all terms in the governance domain\nterms = client.get_terms(\"\u003cyour-governance-domain-id\u003e\")\n\n# Enumerate the terms\nfor term in terms:\n    print(term)\n```\n\n_Note: Pagination over glossary terms is not yet supported._\n\n#### Retrieve a Glossary Term by ID\n\n```python\n# Get a specific term by ID\nterm = client.get_term_by_id(\"\u003cyour-term-id\u003e\")\n\n# Show the term\nprint(term)\n```\n\n#### Update a Glossary Term\n\n```python\n# Update a term\nupdated_term = client.update_term(\n    term_id=\"\u003cyour-term-id\u003e\",\n    name=\"Updated Term Name\",\n    description=\"\u003cdiv\u003eThis is an updated term description.\u003c/div\u003e\",\n    governance_domain_id=\"\u003cyour-governance-domain-id\u003e\",\n    owners=[{\"id\": \"\u003centra-object-id\u003e\"}],\n    acronyms=[\"ACRONYM_1_UPDATED\", \"ACRONYM_2_UPDATED\"],\n    resources=[\n        {\n            \"name\": \"Read more about this term\",\n            \"url\": \"https://example.com/more\",\n        }\n    ],\n    status=\"Draft\",\n)\n\n# Show the updated term\nprint(updated_term)\n```\n\n#### Delete a Glossary Term\n\n```python\n# Delete a term\ndeleted = client.delete_term(\"\u003cyour-term-id\u003e\")\n\nif deleted:\n    print(\"Governance domain deleted successfully.\")\nelse:\n    print(\"Failed to delete governance domain.\")\n```\n\n#### Create a Term Relationship (Synonyms / Related Terms)\n\n##### Link Term to a Synonym\n\n```python\n# Link a synonym to a term\nrelationship = client.create_term_relationship(\n    term_id=\"\u003cyour-term-id\u003e\",\n    relationship_type=\"Synonym\",\n    entity_id=\"\u003cyour-target-term-id\u003e\",\n    description=\"This is a synonym relationship.\",\n)\n\n# Show the relationship\nprint(relationship)\n```\n\n##### Link Term to a Related Term\n\n```python\n# Link a related term to a term\nrelationship = client.create_term_relationship(\n    term_id=\"\u003cyour-term-id\u003e\",\n    relationship_type=\"Related\",\n    entity_id=\"\u003cyour-related-term-id\u003e\",\n    description=\"This is a related term relationship.\",\n)\n\n# Show the relationship\nprint(relationship)\n```\n\n#### Delete a Term Relationship (Synonyms / Related Terms)\n\n##### Delete a Synonym relationship\n\n```python\n# Delete a term relationship\ndeleted = client.delete_term_relationship(\n    term_id=\"\u003cyour-term-id\u003e\",\n    entity_id=\"\u003cyour-target-term-id\u003e\",\n    relationship_type=\"Synonym\",\n    entity_type=\"Term\",\n)\n\nif deleted:\n    print(\"Synonym relationship deleted successfully.\")\nelse:\n    print(\"Failed to delete the synonym relationship.\")\n```\n\n##### Delete a Related Term relationship\n\n```python\n# Delete a term relationship\ndeleted = client.delete_term_relationship(\n    term_id=\"\u003cyour-term-id\u003e\",\n    entity_id=\"\u003cyour-target-term-id\u003e\",\n    relationship_type=\"Related\",\n    entity_type=\"Term\",\n)\n\nif deleted:\n    print(\"Related relationship deleted successfully.\")\nelse:\n    print(\"Failed to delete the related relationship.\")\n```\n\n---\n\n### Data Products\n\nA kit of data assets (tables, files, Power BI reports, etc.) that provides assets with a use case for ease of discovery and understanding. [Learn more](https://learn.microsoft.com/en-us/purview/concept-data-products)\n\n#### Create a Data Product\n\n```python\n# Create a new Data Product\ndata_product = client.create_data_product(\n    governance_domain_id=governance_domain,\n    name=\"My First Data Product\",\n    description=\"\u003cdiv\u003eThis is a \u003cb\u003enew\u003c/b\u003e data product created for demonstration purposes.\u003c/div\u003e\",\n    type=\"Operational\",\n    owners=[{\"id\": \"\u003centra-object-id\u003e\"}],\n    status=\"Draft\",\n    audience=[],\n    business_use=\"\u003cdiv\u003eUse Case 1, 2, 3\u003c/div\u003e\",\n    documentation=[],\n    updateFrequency=\"Weekly\",\n    endorsed=False,\n    terms_of_use=[],\n)\n\n# Show Data Product\nprint(data_product)\n```\n\n#### Retrieve all Data Products in a Governance Domain\n\n```python\n# Get all data products in the governance domain\ndata_products = client.get_data_products(\"\u003cyour-governance-domain-id\u003e\")\n\n# Enumerate the data products\nfor data_product in data_products:\n    print(data_product)\n```\n\n_Note: Pagination over data products is not yet supported._\n\n#### Retrieve a Data Product by ID\n\n```python\n# Get data product by ID\ndata_product = client.get_data_product_by_id(\"\u003cyour-data-product-id\u003e\")\n\n# Show data product\nprint(data_product)\n```\n\n#### Update a Data Product\n\n```python\n# Update a data product\nupdated_data_product = client.update_data_product(\n    data_product_id=\"\u003cyour-data-product-id\u003e\",\n    governance_domain_id=\"\u003cyour-governance-domain-id\u003e\",\n    name=\"My Updated Data Product\",\n    description=\"\u003cdiv\u003eThis is an \u003cb\u003eupdated\u003c/b\u003e data product description.\u003c/div\u003e\",\n    owners=[\n        {\n            \"id\": \"\u003centra-object-id\u003e\",\n            \"description\": \"Data Product Owner\",\n        }\n    ],\n    status=\"Draft\",\n    audience=[],\n    business_use=\"\u003cdiv\u003eUse Case 1, 2, 3\u003c/div\u003e\",\n    documentation=[],\n    endorsed=False,\n    terms_of_use=[],\n    type=\"Operational\",\n    updateFrequency=\"Monthly\",\n)\n\n# Show the updated data product\nprint(updated_data_product)\n```\n\n#### Delete a Data Product\n\n```python\n# Delete data product\ndeleted = client.delete_data_product(\"\u003cyour-data-product-id\u003e\")\n\nif deleted:\n    print(\"Data Product deleted successfully.\")\nelse:\n    print(\"Failed to delete Data Product.\")\n```\n\n#### Link a Glossary Term to a Data Product\n\n#### Unlink a Glossary Term from a Data Product\n\n#### Link an Asset to a Data Product\n\n#### Unlink an Asset from a Data Product\n\n#### Link an Objective to a Data Product\n\n#### Unlink an Objective from a Data Product\n\n#### Link a Critical Data Element to a Data Product\n\n#### Unlink a Critical Data Element from a Data Product\n\n---\n\n### Objectives and Key Results (OKRs)\n\nObjectives and key results link data products directly to your objectives to bridge the gap between your business and Unified Catalog. You use data to discover and track objectives in your business, and Unified Catalog should make it easy to see those connections and track your goals. [Learn more](https://learn.microsoft.com/en-us/purview/concept-okr)\n\n#### Create an Objective\n\n```python\n# Create an objective\nobjective = client.create_objective(\n    definition=\"Revamp customer service to improve satisfaction and retention rates.\",\n    governance_domain_id=\"\u003cyour-governance-domain-id\u003e\",\n    status=\"Draft\",\n    owners=[\n        {\n            \"id\": \"\u003centra-object-id\u003e\",\n            \"description\": \"Objective Owner\",\n        }\n    ],\n    target_date=\"2025-12-30T14:00:00.000Z\",\n)\n\n# Show the objective\nprint(objective)\n```\n\n#### Retrieve all Objectives in a Governance Domain\n\n```python\n# Get all objectives in the governance domain\nobjectives = client.get_objectives(\"\u003cyour-governance-domain-id\u003e\")\n\n# Show objectives\nprint(objectives)\n```\n\n_Note: Pagination over objectives is not yet supported._\n\n#### Retrieve an Objective by ID\n\n```python\n# Get objective by its ID\nobjective = client.get_objective_by_id(\"\u003cyour-objective-id\u003e\")\n\n# Show the objective\nprint(objective)\n```\n\n#### Update an Objective\n\n```python\n# Update an objective\nupdated_objective = client.update_objective(\n    objective_id=\"\u003cyour-objective-id\u003e\",\n    status=\"Draft\",\n    governance_domain_id=\"\u003cyour-governance-domain-id\u003e\",\n    owners=[\n        {\n            \"id\": \"\u003centra-object-id\u003e\",\n            \"description\": \"Objective Owner\",\n        }\n    ],\n    definition=\"Improve customer service to improve satisfaction and retention rates.\",\n    target_date=\"2025-06-15T14:00:00.000Z\",\n)\n\n# Show updated objective\nprint(updated_objective)\n```\n\n#### Delete an Objective\n\n```python\n# Delete an objective\ndeleted = client.delete_objective(\"\u003cyour-objective-id\u003e\")\n\nif deleted:\n    print(\"Objective deleted successfully.\")\nelse:\n    print(\"Failed to delete Objective.\")\n```\n\n#### Create a Key Result for an Objective\n\n```python\n# Create a key result\nkey_result = client.create_key_result(\n    progress=60,\n    goal=80,\n    max=100,\n    status=\"AtRisk\",\n    definition=\"Increase customer satisfaction score by 20%.\",\n    objective_id=\"\u003cyour-objective-id\u003e\",\n    governance_domain_id=\"\u003cyour-governance-domain-id\u003e\",\n)\n\n# Show the key result\nprint(key_result)\n```\n\n#### Retrieve all Key Results of an Objective\n\n```python\n# Get all key results of an objective\nkey_results = client.get_key_results(\"\u003cyour-objective-id\u003e\")\n\n# Show the key results\nprint(key_results)\n```\n\n#### Retrieve a Key Result by ID\n\n```python\n# Get a key result by ID\nkey_result = client.get_key_result_by_id(\n    key_result_id=\"\u003cyour-key-result-id\u003e\",\n    objective_id=\"\u003cyour-objective-id\u003e\",\n)\n\n# Show key result\nprint(key_result)\n```\n\n#### Update a Key Result of an Objective\n\n```python\n# Update a key result\nupdated_key_result = client.update_key_result(\n    key_result_id=\"\u003cyour-key-result-id\u003e\",\n    progress=70,\n    goal=80,\n    max=100,\n    status=\"OnTrack\",\n    definition=\"Increase customer satisfaction score by 20%.\",\n    objective_id=\"\u003cyour-objective-id\u003e\",\n    governance_domain_id=\"\u003cyour-governance-domain-id\u003e\",\n)\n\n# Show the updated key result\nprint(updated_key_result)\n```\n\n#### Delete a Key Result of an Objective\n\n```python\n# Delete a key result\ndeleted = client.delete_key_result(\n    key_result_id=\"\u003cyour-key-result-id\u003e\",\n    objective_id=\"\u003cyour-objective-id\u003e\",\n)\n\nif deleted:\n    print(\"Key Result deleted successfully.\")\nelse:\n    print(\"Failed to delete Key Result.\")\n```\n\n#### Link a Data Product to an Objective\n\n#### Unlink a Data Product from an Objective\n\n---\n\n### Critical Data Elements (preview)\n\nCritical data elements are a logical grouping of important pieces of information across your data estate. [Learn more](https://learn.microsoft.com/en-us/purview/how-to-create-manage-critical-data)\n\n#### Create a Critical Data Element\n\n```python\n# Create a critical data element\ncde = client.create_critical_data_element(\n    name=\"Customer Identifier (CID)\",\n    status=\"Draft\",\n    governance_domain_id=\"\u003cyour-governance-domain-id\u003e\",\n    description=\"\u003cdiv\u003eDescribes a numeric \u003cb\u003ecustomer identifier\u003c/b\u003e throughout the data estate.\u003c/div\u003e\",\n    data_type=\"Number\",\n    owners=[{ \"id\": \"\u003centra-object-id\u003e\" }],\n)\n\n# Show critical data element\nprint(cde)\n```\n\n#### Retrieve all Critical Data Elements in a Governance Domain\n\n```python\n# Get all critical data elements in the governance domain\ncdes = client.get_critical_data_elements(\"\u003cyour-governance-domain-id\u003e\")\n\n# Enumerate the critical data elements\nfor cde in cdes:\n    print(cde)\n```\n\n_Note: Pagination over critical data elements is not yet supported._\n\n#### Retrieve a Critical Data Element by ID\n\n```python\n# Get critical data element by its ID\ncde = client.get_critical_data_element_by_id(\"\u003cyour-critical-data-element-id\u003e\")\n\n# Show critical data element\nprint(cde)\n```\n\n#### Update a Critical Data Element\n\n```python\n# Update a critical data element\nupdated_cde = client.update_critical_data_element(\n    cde_id=\"\u003cyour-critical-data-element-id\u003e\",\n    name=\"Customer Identifier (CID)\",\n    description=\"\u003cdiv\u003eAn \u003cb\u003eupdated description\u003c/b\u003e of a customer identifier.\u003c/div\u003e\",\n    status=\"Draft\",\n    governance_domain_id=\"\u003cyour-governance-domain-id\u003e\",\n    data_type=\"String\",\n    owners=[{ \"id\": \"\u003centra-object-id\u003e\" }],\n)\n\n# Show updated critical data element\nprint(updated_cde)\n```\n\n#### Delete a Critical Data Element\n\n```python\n# Delete a critical data element\ndeleted = client.delete_critical_data_element(\"\u003cyour-critical-data-element-id\u003e\")\n\nif deleted:\n    print(\"Critical Data Element deleted successfully.\")\nelse:\n    print(\"Failed to delete Critical Data Element.\")\n```\n\n#### Add a Column to a Critical Data Element\n\n#### Remove a Column from a Critical Data Element\n\n#### Link a Glossary Term to a Critical Data Element\n\n#### Unlink a Glossary Term from a Critical Data Element\n\n---\n\n### Custom Attributes (preview)\n\nCustom attributes are admin-defined, attributes that can be applied to add additional metadata to business concepts in the Unified Catalog.\n\n\u003e [!WARNING]\n\u003e You cannot interact with Custom Attributes through this library yet.\n\n---\n\n### Requests\n\nIf you discover a data product in the catalog that you would like to access, you can request access directly through Microsoft Purview. The request triggers a workflow requesting that the owners of the data resource grant you access to the data product. [Learn more](https://learn.microsoft.com/en-us/purview/unified-catalog-access-policies)\n\n\u003e [!WARNING]\n\u003e You cannot interact with Requests through this library yet. This is work in progress. A pull request to add this functionality is welcome.\n\n#### Create a Request\n\n#### Retrieve all Requests in a Governance Domain\n\n#### Retrieve a Request by ID\n\n#### Update a Request\n\n#### Delete a Request\n\n---\n\n### Health Management\n\nHealth management refers to the ongoing processes and practices involved in ensuring that an organization's data remains accurate, complete, consistent, secure, and accessible throughout its lifecycle.\n\n#### Health Controls (preview)\n\nTrack your journey to complete data governance by monitoring health controls to track your progress. Health controls measure your current governance practices against standards that give your data estate a score. [Learn more](https://learn.microsoft.com/en-us/purview/how-to-health-controls)\n\n\u003e [!WARNING]\n\u003e You cannot interact with Health Controls through this library yet. This is work in progress. A pull request to add this functionality is welcome.\n\n##### Create a Health Control\n\n##### Retrieve a Health Control\n\n##### Update a Health Control\n\n##### Delete a Health Control\n\n#### Health Actions (preview)\n\nHealth actions are concrete steps you can take to improve data governance across your data estate. The actions are provided in a single list that can focus your data governance journey, and democratize ownership. Completing these actions will improve data quality and discoverability across your data estate. [Learn more](https://learn.microsoft.com/en-us/purview/data-estate-health-actions)\n\n\u003e [!WARNING]\n\u003e You cannot interact with Health Actions through this library yet. This is work in progress. A pull request to add this functionality is welcome.\n\n##### Create a Health Action\n\n##### Retrieve a Health Action\n\n##### Update a Health Action\n\n##### Delete a Health Action\n\n#### Data Quality\n\nData quality is the measurement of the quality of data in an organization, based on data quality rules that are configured and defined in Unified Catalog. [Learn more](https://learn.microsoft.com/en-us/purview/data-quality-overview)\n\n\u003e [!WARNING]\n\u003e You cannot interact with Data Quality through this library yet. There is a lot of complexity in the API, data quality sub-features, and interpretation of the results. A pull request to add this functionality is welcome.\n\n## Limitations 🚧\n\n- This library is not affiliated with Microsoft.\n- The library is not locked to a specific version of the Microsoft Purview API as an official Microsoft Purview Data Governance API for the Unified Catalog is not yet available. This means functionality may change unexpectedly. Do not rely on this library in production for this reason.\n- The library is maintained on a best-effort basis. It is not a full-time project and PRs are welcome.\n- Managing business concept policies and data quality is not yet supported.\n- No automated tests are included, functionality has been manually tested on a best-effort basis. PRs are welcome to add tests.\n- No typed return schema is provided as the API is not yet stable.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folafwrieden%2Funifiedcatalogpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Folafwrieden%2Funifiedcatalogpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folafwrieden%2Funifiedcatalogpy/lists"}