pvw-cli 1.0.8__tar.gz → 1.0.10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pvw-cli might be problematic. Click here for more details.

Files changed (72) hide show
  1. pvw_cli-1.0.10/PKG-INFO +888 -0
  2. pvw_cli-1.0.10/README.md +830 -0
  3. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/__init__.py +1 -1
  4. pvw_cli-1.0.10/purviewcli/cli/health.py +250 -0
  5. pvw_cli-1.0.10/purviewcli/cli/search.py +319 -0
  6. pvw_cli-1.0.10/purviewcli/cli/unified_catalog.py +1302 -0
  7. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/workflow.py +44 -4
  8. pvw_cli-1.0.10/purviewcli/client/_health.py +192 -0
  9. pvw_cli-1.0.10/purviewcli/client/_unified_catalog.py +935 -0
  10. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_workflow.py +3 -3
  11. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/endpoint.py +21 -0
  12. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/sync_client.py +13 -8
  13. pvw_cli-1.0.10/pvw_cli.egg-info/PKG-INFO +888 -0
  14. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/pvw_cli.egg-info/SOURCES.txt +2 -0
  15. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/pvw_cli.egg-info/requires.txt +2 -6
  16. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/pyproject.toml +3 -7
  17. pvw_cli-1.0.8/PKG-INFO +0 -458
  18. pvw_cli-1.0.8/README.md +0 -396
  19. pvw_cli-1.0.8/purviewcli/cli/search.py +0 -128
  20. pvw_cli-1.0.8/purviewcli/cli/unified_catalog.py +0 -766
  21. pvw_cli-1.0.8/purviewcli/client/_unified_catalog.py +0 -269
  22. pvw_cli-1.0.8/pvw_cli.egg-info/PKG-INFO +0 -458
  23. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/__main__.py +0 -0
  24. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/__init__.py +0 -0
  25. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/account.py +0 -0
  26. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/cli.py +0 -0
  27. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/collections.py +0 -0
  28. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/domain.py +0 -0
  29. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/entity.py +0 -0
  30. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/glossary.py +0 -0
  31. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/insight.py +0 -0
  32. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/lineage.py +0 -0
  33. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/management.py +0 -0
  34. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/policystore.py +0 -0
  35. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/relationship.py +0 -0
  36. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/scan.py +0 -0
  37. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/share.py +0 -0
  38. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/cli/types.py +0 -0
  39. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/__init__.py +0 -0
  40. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_account.py +0 -0
  41. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_collections.py +0 -0
  42. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_domain.py +0 -0
  43. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_entity.py +0 -0
  44. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_glossary.py +0 -0
  45. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_insight.py +0 -0
  46. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_lineage.py +0 -0
  47. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_management.py +0 -0
  48. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_policystore.py +0 -0
  49. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_relationship.py +0 -0
  50. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_scan.py +0 -0
  51. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_search.py +0 -0
  52. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_share.py +0 -0
  53. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/_types.py +0 -0
  54. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/api_client.py +0 -0
  55. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/business_rules.py +0 -0
  56. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/config.py +0 -0
  57. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/data_quality.py +0 -0
  58. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/endpoints.py +0 -0
  59. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/exceptions.py +0 -0
  60. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/lineage_visualization.py +0 -0
  61. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/monitoring_dashboard.py +0 -0
  62. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/rate_limiter.py +0 -0
  63. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/retry_handler.py +0 -0
  64. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/scanning_operations.py +0 -0
  65. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/client/settings.py +0 -0
  66. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/plugins/__init__.py +0 -0
  67. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/purviewcli/plugins/plugin_system.py +0 -0
  68. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/pvw_cli.egg-info/dependency_links.txt +0 -0
  69. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/pvw_cli.egg-info/entry_points.txt +0 -0
  70. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/pvw_cli.egg-info/not-zip-safe +0 -0
  71. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/pvw_cli.egg-info/top_level.txt +0 -0
  72. {pvw_cli-1.0.8 → pvw_cli-1.0.10}/setup.cfg +0 -0
@@ -0,0 +1,888 @@
1
+ Metadata-Version: 2.4
2
+ Name: pvw-cli
3
+ Version: 1.0.10
4
+ Summary: Microsoft Purview CLI with comprehensive automation capabilities
5
+ Author-email: AYOUB KEBAILI <keayoub@msn.com>
6
+ Maintainer-email: AYOUB KEBAILI <keayoub@msn.com>
7
+ License-Expression: MIT
8
+ Project-URL: Homepage, https://github.com/Keayoub/Purview_cli
9
+ Project-URL: Documentation, https://github.com/Keayoub/Purview_cli/wiki
10
+ Project-URL: Repository, https://github.com/Keayoub/Purview_cli.git
11
+ Project-URL: Bug Tracker, https://github.com/Keayoub/Purview_cli/issues
12
+ Project-URL: Source, https://github.com/Keayoub/Purview_cli
13
+ Keywords: azure,purview,cli,data,catalog,governance,automation,pvw
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Intended Audience :: System Administrators
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.8
20
+ Classifier: Programming Language :: Python :: 3.9
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
+ Classifier: Topic :: System :: Systems Administration
26
+ Classifier: Topic :: Database
27
+ Classifier: Topic :: Internet :: WWW/HTTP
28
+ Requires-Python: >=3.8
29
+ Description-Content-Type: text/markdown
30
+ Requires-Dist: azure-identity>=1.12.0
31
+ Requires-Dist: azure-core>=1.24.0
32
+ Requires-Dist: click>=8.0.0
33
+ Requires-Dist: rich>=12.0.0
34
+ Requires-Dist: requests>=2.28.0
35
+ Requires-Dist: pandas>=1.5.0
36
+ Requires-Dist: aiohttp>=3.8.0
37
+ Requires-Dist: pydantic<3.0.0,>=1.10.0
38
+ Requires-Dist: PyYAML>=6.0
39
+ Requires-Dist: cryptography<46.0.0,>=41.0.5
40
+ Provides-Extra: dev
41
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
42
+ Requires-Dist: pytest-asyncio>=0.20.0; extra == "dev"
43
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
44
+ Requires-Dist: black>=22.0.0; extra == "dev"
45
+ Requires-Dist: isort>=5.10.0; extra == "dev"
46
+ Requires-Dist: flake8>=5.0.0; extra == "dev"
47
+ Requires-Dist: mypy>=0.991; extra == "dev"
48
+ Requires-Dist: pre-commit>=2.20.0; extra == "dev"
49
+ Provides-Extra: docs
50
+ Requires-Dist: sphinx>=5.0.0; extra == "docs"
51
+ Requires-Dist: sphinx-rtd-theme>=1.0.0; extra == "docs"
52
+ Requires-Dist: myst-parser>=0.18.0; extra == "docs"
53
+ Provides-Extra: test
54
+ Requires-Dist: pytest>=7.0.0; extra == "test"
55
+ Requires-Dist: pytest-asyncio>=0.20.0; extra == "test"
56
+ Requires-Dist: pytest-cov>=4.0.0; extra == "test"
57
+ Requires-Dist: requests-mock>=1.9.0; extra == "test"
58
+
59
+ # PURVIEW CLI v1.0.10 - Microsoft Purview Automation & Data Governance
60
+
61
+ > **LATEST UPDATE (October 2025):**
62
+ > - **🚀 NEW: Complete Data Product CRUD Operations** - Full update and delete support with smart partial updates
63
+ > - **🏥 NEW: Health Monitoring API** - Automated governance health checks and recommendations
64
+ > - **🔄 NEW: Workflow Management** - Approval workflows and business process automation
65
+ > - **✨ Enhanced ID Display** - Full UUIDs now visible in all list commands (no truncation)
66
+ > - **🚀 MAJOR: Complete Microsoft Purview Unified Catalog (UC) Support** (see new `uc` command group)
67
+ > - Full governance domains, glossary terms, data products, OKRs, and critical data elements management
68
+ > - Feature parity with UnifiedCatalogPy project with enhanced CLI experience
69
+ > - Advanced Data Product Management (legacy `data-product` command group)
70
+ > - Enhanced Discovery Query/Search support
71
+
72
+ ---
73
+
74
+ ## What is PVW CLI?
75
+
76
+ **PVW CLI v1.0.10** is a modern, full-featured command-line interface and Python library for Microsoft Purview. It enables automation and management of *all major Purview APIs* including:
77
+
78
+ - **NEW Unified Catalog (UC) Management** - Complete governance domains, glossary terms, data products, OKRs, CDEs (NEW)
79
+ - Entity management (create, update, bulk, import/export)
80
+ - Glossary and term management
81
+ - Lineage operations
82
+ - Collection and account management
83
+ - Advanced search and discovery
84
+ - Data product management (legacy compatibility)
85
+ - Classification, label, and status management
86
+ - And more (see command reference)
87
+
88
+ The CLI is designed for data engineers, stewards, architects, and platform teams to automate, scale, and enhance their Microsoft Purview experience.
89
+
90
+ ---
91
+
92
+ ## Quick Start (pip install)
93
+
94
+ Get started with PVW CLI in minutes:
95
+
96
+ 1. **Install the CLI**
97
+
98
+ ```bash
99
+ pip install pvw-cli
100
+ ```
101
+
102
+ 2. **Set Required Environment Variables**
103
+
104
+ ```bash
105
+ # Required for Purview API access
106
+ set PURVIEW_ACCOUNT_NAME=your-purview-account
107
+ set PURVIEW_ACCOUNT_ID=your-purview-account-id-guid
108
+ set PURVIEW_RESOURCE_GROUP=your-resource-group-name
109
+
110
+ # Optional
111
+ set AZURE_REGION= # (optional, e.g. 'china', 'usgov')
112
+ ```
113
+
114
+ 3. **Authenticate**
115
+
116
+ - Run `az login` (recommended)
117
+ - Or set Service Principal credentials as environment variables
118
+
119
+ 4. **List Your Governance Domains (UC)**
120
+
121
+ ```bash
122
+ pvw uc domain list
123
+ ```
124
+
125
+ 5. **Run Your First Search**
126
+
127
+ ```bash
128
+ pvw search query --keywords="customer" --limit=5
129
+ ```
130
+
131
+ 6. **See All Commands**
132
+
133
+ ```bash
134
+ pvw --help
135
+ pvw uc --help
136
+ ```
137
+
138
+ For more advanced usage, see the sections below or visit the [documentation](https://pvw-cli.readthedocs.io/).
139
+
140
+ ---
141
+
142
+ ## Overview
143
+
144
+ **PVW CLI v1.0.10** is a modern command-line interface and Python library for Microsoft Purview, enabling:
145
+
146
+ - Advanced data catalog search and discovery
147
+ - Bulk import/export of entities, glossary terms, and lineage
148
+ - Real-time monitoring and analytics
149
+ - Automated governance and compliance
150
+ - Extensible plugin system
151
+
152
+ ---
153
+
154
+ ## Installation
155
+
156
+ You can install PVW CLI in two ways:
157
+
158
+ 1. **From PyPI (recommended for most users):**
159
+
160
+ ```bash
161
+ pip install pvw-cli
162
+ ```
163
+
164
+ 2. **Directly from the GitHub repository (for latest/dev version):**
165
+
166
+ ```bash
167
+ pip install git+https://github.com/Keayoub/Purview_cli.git
168
+ ```
169
+
170
+ Or for development (editable install):
171
+
172
+ ```bash
173
+ git clone https://github.com/Keayoub/Purview_cli.git
174
+ cd Purview_cli
175
+ pip install -r requirements.txt
176
+ pip install -e .
177
+ ```
178
+
179
+ ---
180
+
181
+ ## Requirements
182
+
183
+ - Python 3.8+
184
+ - Azure CLI (`az login`) or Service Principal credentials
185
+ - Microsoft Purview account
186
+
187
+ ---
188
+
189
+ ## Getting Started
190
+
191
+ 1. **Install**
192
+
193
+ ```bash
194
+ pip install pvw-cli
195
+ ```
196
+
197
+ 2. **Set Required Environment Variables**
198
+
199
+ ```bash
200
+ # Required for Purview API access
201
+ set PURVIEW_ACCOUNT_NAME=your-purview-account
202
+ set PURVIEW_ACCOUNT_ID=your-purview-account-id-guid
203
+ set PURVIEW_RESOURCE_GROUP=your-resource-group-name
204
+
205
+ # Optional
206
+ set AZURE_REGION= # (optional, e.g. 'china', 'usgov')
207
+ ```
208
+
209
+ 3. **Authenticate**
210
+
211
+ - Azure CLI: `az login`
212
+
213
+ - Or set Service Principal credentials as environment variables
214
+
215
+ 4. **Run a Command**
216
+
217
+ ```bash
218
+ pvw search query --keywords="customer" --limit=5
219
+ ```
220
+
221
+ 5. **See All Commands**
222
+
223
+ ```bash
224
+ pvw --help
225
+ ```
226
+
227
+ ---
228
+
229
+ ## Authentication
230
+
231
+ PVW CLI supports multiple authentication methods for connecting to Microsoft Purview, powered by Azure Identity's `DefaultAzureCredential`. This allows you to use the CLI securely in local development, CI/CD, and production environments.
232
+
233
+ ### 1. Azure CLI Authentication (Recommended for Interactive Use)
234
+
235
+ - Run `az login` to authenticate interactively with your Azure account.
236
+ - The CLI will automatically use your Azure CLI credentials.
237
+
238
+ ### 2. Service Principal Authentication (Recommended for Automation/CI/CD)
239
+
240
+ Set the following environment variables before running any PVW CLI command:
241
+
242
+ - `AZURE_CLIENT_ID` (your Azure AD app registration/client ID)
243
+ - `AZURE_TENANT_ID` (your Azure AD tenant ID)
244
+ - `AZURE_CLIENT_SECRET` (your client secret)
245
+
246
+ **Example (Windows):**
247
+
248
+ ```cmd
249
+ set AZURE_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
250
+ set AZURE_TENANT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
251
+ set AZURE_CLIENT_SECRET=your-client-secret
252
+ ```
253
+
254
+ **Example (Linux/macOS):**
255
+
256
+ ```bash
257
+ export AZURE_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
258
+ export AZURE_TENANT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
259
+ export AZURE_CLIENT_SECRET=your-client-secret
260
+ ```
261
+
262
+ ### 3. Managed Identity (for Azure VMs, App Services, etc.)
263
+
264
+ If running in Azure with a managed identity, no extra configuration is needed. The CLI will use the managed identity automatically.
265
+
266
+ ### 4. Visual Studio/VS Code Authentication
267
+
268
+ If you are signed in to Azure in Visual Studio or VS Code, `DefaultAzureCredential` can use those credentials as a fallback.
269
+
270
+ ---
271
+
272
+ **Note:**
273
+ - The CLI will try all supported authentication methods in order. The first one that works will be used.
274
+ - For most automation and CI/CD scenarios, service principal authentication is recommended.
275
+ - For local development, Azure CLI authentication is easiest.
276
+
277
+ For more details, see the [Azure Identity documentation](https://learn.microsoft.com/en-us/python/api/overview/azure/identity-readme?view=azure-python).
278
+
279
+ ---
280
+
281
+ ## Required Purview Configuration
282
+
283
+ Before using PVW CLI, you need to set three essential environment variables. Here's how to find them:
284
+
285
+ ### 🔍 **How to Find Your Purview Values**
286
+
287
+ #### **1. PURVIEW_ACCOUNT_NAME**
288
+ - This is your Purview account name as it appears in Azure Portal
289
+ - Example: `kaydemopurview`
290
+
291
+ #### **2. PURVIEW_ACCOUNT_ID**
292
+ - This is the GUID that identifies your Purview account for Unified Catalog APIs
293
+ - **✅ Important: For most Purview deployments, this is your Azure Tenant ID**
294
+
295
+ - **Method 1 - Get your Tenant ID (recommended):**
296
+
297
+ **Bash/Command Prompt:**
298
+ ```bash
299
+ az account show --query tenantId -o tsv
300
+ ```
301
+
302
+ **PowerShell:**
303
+ ```powershell
304
+ az account show --query tenantId -o tsv
305
+ # Or store directly in environment variable:
306
+ $env:PURVIEW_ACCOUNT_ID = az account show --query tenantId -o tsv
307
+ ```
308
+
309
+ - **Method 2 - Azure CLI (extract from Atlas endpoint):**
310
+ ```bash
311
+ az purview account show --name YOUR_ACCOUNT_NAME --resource-group YOUR_RG --query endpoints.catalog -o tsv
312
+ ```
313
+ Extract the GUID from the URL (before `-api.purview-service.microsoft.com`)
314
+
315
+ - **Method 3 - Azure Portal:**
316
+ 1. Go to your Purview account in Azure Portal
317
+ 2. Navigate to Properties → Atlas endpoint URL
318
+ 3. Extract GUID from: `https://GUID-api.purview-service.microsoft.com/catalog`
319
+
320
+ #### **3. PURVIEW_RESOURCE_GROUP**
321
+ - The Azure resource group containing your Purview account
322
+ - Example: `fabric-artifacts`
323
+
324
+ ### 📋 **Setting the Variables**
325
+
326
+ **Windows Command Prompt:**
327
+ ```cmd
328
+ set PURVIEW_ACCOUNT_NAME=your-purview-account
329
+ set PURVIEW_ACCOUNT_ID=your-purview-account-id
330
+ set PURVIEW_RESOURCE_GROUP=your-resource-group
331
+ ```
332
+
333
+ **Windows PowerShell:**
334
+ ```powershell
335
+ $env:PURVIEW_ACCOUNT_NAME="your-purview-account"
336
+ $env:PURVIEW_ACCOUNT_ID="your-purview-account-id"
337
+ $env:PURVIEW_RESOURCE_GROUP="your-resource-group"
338
+ ```
339
+
340
+ **Linux/macOS:**
341
+ ```bash
342
+ export PURVIEW_ACCOUNT_NAME=your-purview-account
343
+ export PURVIEW_ACCOUNT_ID=your-purview-account-id
344
+ export PURVIEW_RESOURCE_GROUP=your-resource-group
345
+ ```
346
+
347
+ **Permanent (Windows Command Prompt):**
348
+ ```cmd
349
+ setx PURVIEW_ACCOUNT_NAME "your-purview-account"
350
+ setx PURVIEW_ACCOUNT_ID "your-purview-account-id"
351
+ setx PURVIEW_RESOURCE_GROUP "your-resource-group"
352
+ ```
353
+
354
+ **Permanent (Windows PowerShell):**
355
+ ```powershell
356
+ [Environment]::SetEnvironmentVariable("PURVIEW_ACCOUNT_NAME", "your-purview-account", "User")
357
+ [Environment]::SetEnvironmentVariable("PURVIEW_ACCOUNT_ID", "your-purview-account-id", "User")
358
+ [Environment]::SetEnvironmentVariable("PURVIEW_RESOURCE_GROUP", "your-resource-group", "User")
359
+ ```
360
+
361
+ ### 🔧 **Debug Environment Issues**
362
+
363
+ If you experience issues with environment variables between different terminals, use these debug commands:
364
+
365
+ **Command Prompt/Bash:**
366
+ ```bash
367
+ # Run this to check your current environment
368
+ python -c "
369
+ import os
370
+ print('PURVIEW_ACCOUNT_NAME:', os.getenv('PURVIEW_ACCOUNT_NAME'))
371
+ print('PURVIEW_ACCOUNT_ID:', os.getenv('PURVIEW_ACCOUNT_ID'))
372
+ print('PURVIEW_RESOURCE_GROUP:', os.getenv('PURVIEW_RESOURCE_GROUP'))
373
+ "
374
+ ```
375
+
376
+ **PowerShell:**
377
+ ```powershell
378
+ # Check environment variables in PowerShell
379
+ python -c "
380
+ import os
381
+ print('PURVIEW_ACCOUNT_NAME:', os.getenv('PURVIEW_ACCOUNT_NAME'))
382
+ print('PURVIEW_ACCOUNT_ID:', os.getenv('PURVIEW_ACCOUNT_ID'))
383
+ print('PURVIEW_RESOURCE_GROUP:', os.getenv('PURVIEW_RESOURCE_GROUP'))
384
+ "
385
+
386
+ # Or use PowerShell native commands
387
+ Write-Host "PURVIEW_ACCOUNT_NAME: $env:PURVIEW_ACCOUNT_NAME"
388
+ Write-Host "PURVIEW_ACCOUNT_ID: $env:PURVIEW_ACCOUNT_ID"
389
+ Write-Host "PURVIEW_RESOURCE_GROUP: $env:PURVIEW_RESOURCE_GROUP"
390
+ ```
391
+
392
+ ---
393
+
394
+ ## Search Command (Discovery Query API)
395
+
396
+ The PVW CLI provides advanced search using the latest Microsoft Purview Discovery Query API:
397
+
398
+ - Search for assets, tables, files, and more with flexible filters
399
+ - Use autocomplete and suggestion endpoints
400
+ - Perform faceted, time-based, and entity-type-specific queries
401
+
402
+ ### CLI Usage Examples
403
+
404
+ #### 🎯 **Multiple Output Formats**
405
+
406
+ ```bash
407
+ # 1. Table Format (Default) - Quick overview
408
+ pvw search query --keywords="customer" --limit=5
409
+ # → Clean table with Name, Type, Collection, Classifications, Qualified Name
410
+
411
+ # 2. Detailed Format - Human-readable with all metadata
412
+ pvw search query --keywords="customer" --limit=5 --detailed
413
+ # → Rich panels showing full details, timestamps, search scores
414
+
415
+ # 3. JSON Format - Complete technical details with syntax highlighting (WELL-FORMATTED)
416
+ pvw search query --keywords="customer" --limit=5 --json
417
+ # → Full JSON response with indentation, line numbers and color coding
418
+
419
+ # 4. Table with IDs - For entity operations
420
+ pvw search query --keywords="customer" --limit=5 --show-ids
421
+ # → Table format + entity GUIDs for copy/paste into update commands
422
+ ```
423
+
424
+ #### 🔍 **Search Operations**
425
+
426
+ ```bash
427
+ # Basic search for assets with keyword 'customer'
428
+ pvw search query --keywords="customer" --limit=5
429
+
430
+ # Advanced search with classification filter
431
+ pvw search query --keywords="sales" --classification="PII" --objectType="Tables" --limit=10
432
+
433
+ # Pagination through large result sets
434
+ pvw search query --keywords="SQL" --offset=10 --limit=5
435
+
436
+ # Autocomplete suggestions for partial keyword
437
+ pvw search autocomplete --keywords="ord" --limit=3
438
+
439
+ # Get search suggestions (fuzzy matching)
440
+ pvw search suggest --keywords="prod" --limit=2
441
+
442
+ **⚠️ IMPORTANT - Command Line Quoting:**
443
+ ```cmd
444
+ # ✅ CORRECT - Use quotes around keywords
445
+ pvw search query --keywords="customer" --limit=5
446
+
447
+ # ✅ CORRECT - For wildcard searches, use quotes
448
+ pvw search query --keywords="*" --limit=5
449
+
450
+ # ❌ WRONG - Don't use unquoted * (shell expands to file names)
451
+ pvw search query --keywords=* --limit=5
452
+ # This causes: "Error: Got unexpected extra arguments (dist doc ...)"
453
+ ```
454
+
455
+ ```bash
456
+ # Faceted search with aggregation
457
+ pvw search query --keywords="finance" --facetFields="objectType,classification" --limit=5
458
+
459
+ # Browse entities by type and path
460
+ pvw search browse --entityType="Tables" --path="/root/finance" --limit=2
461
+
462
+ # Time-based search for assets created after a date
463
+ pvw search query --keywords="audit" --createdAfter="2024-01-01" --limit=1
464
+
465
+ # Entity type specific search
466
+ pvw search query --keywords="finance" --entityTypes="Files,Tables" --limit=2
467
+ ```
468
+
469
+ #### 💡 **Usage Scenarios**
470
+
471
+ - **Daily browsing**: Use default table format for quick scans
472
+ - **Understanding assets**: Use `--detailed` for rich information panels
473
+ - **Technical work**: Use `--json` for complete API data access
474
+ - **Entity operations**: Use `--show-ids` to get GUIDs for updates
475
+
476
+ ### Python Usage Example
477
+
478
+ ```python
479
+ from purviewcli.client._search import Search
480
+
481
+ search = Search()
482
+ args = {"--keywords": "customer", "--limit": 5}
483
+ search.searchQuery(args)
484
+ print(search.payload) # Shows the constructed search payload
485
+ ```
486
+
487
+ ### Test Examples
488
+
489
+ See `tests/test_search_examples.py` for ready-to-run pytest examples covering all search scenarios:
490
+
491
+ - Basic query
492
+ - Advanced filter
493
+ - Autocomplete
494
+ - Suggest
495
+ - Faceted search
496
+ - Browse
497
+ - Time-based search
498
+ - Entity type search
499
+
500
+ ---
501
+
502
+ ## Unified Catalog Management (NEW)
503
+
504
+ PVW CLI now includes comprehensive **Microsoft Purview Unified Catalog (UC)** support with the new `uc` command group. This provides complete management of modern data governance features including governance domains, glossary terms, data products, objectives (OKRs), and critical data elements.
505
+
506
+ **🎯 Feature Parity**: Full compatibility with [UnifiedCatalogPy](https://github.com/olafwrieden/unifiedcatalogpy) functionality.
507
+
508
+ See [`doc/commands/unified-catalog.md`](doc/commands/unified-catalog.md) for complete documentation and examples.
509
+
510
+ ### Quick UC Examples
511
+
512
+ #### 🏛️ **Governance Domains Management**
513
+
514
+ ```bash
515
+ # List all governance domains
516
+ pvw uc domain list
517
+
518
+ # Create a new governance domain
519
+ pvw uc domain create --name "Finance" --description "Financial data governance domain"
520
+
521
+ # Get domain details
522
+ pvw uc domain get --domain-id "abc-123-def-456"
523
+
524
+ # Update domain information
525
+ pvw uc domain update --domain-id "abc-123" --description "Updated financial governance"
526
+ ```
527
+
528
+ #### 📖 **Glossary Terms in UC**
529
+
530
+ ```bash
531
+ # List all terms in a domain
532
+ pvw uc term list --domain-id "abc-123"
533
+
534
+ # Create a new glossary term
535
+ pvw uc term create --name "Customer" --domain-id "abc-123" --definition "A person or entity that purchases products"
536
+
537
+ # Get term details with relationships
538
+ pvw uc term get --term-id "term-456" --domain-id "abc-123"
539
+
540
+ # Link terms to data assets
541
+ pvw uc term assign --term-id "term-456" --asset-id "asset-789" --domain-id "abc-123"
542
+ ```
543
+
544
+ #### 📦 **Data Products Management**
545
+
546
+ ```bash
547
+ # List all data products in a domain
548
+ pvw uc dataproduct list --domain-id "abc-123"
549
+
550
+ # Create a comprehensive data product
551
+ pvw uc dataproduct create \
552
+ --name "Customer Analytics Dashboard" \
553
+ --domain-id "abc-123" \
554
+ --description "360-degree customer analytics with behavioral insights" \
555
+ --type Analytical \
556
+ --status Draft
557
+
558
+ # Get detailed data product information
559
+ pvw uc dataproduct show --product-id "prod-789"
560
+
561
+ # Update data product (partial updates supported - only specify fields to change)
562
+ pvw uc dataproduct update \
563
+ --product-id "prod-789" \
564
+ --status Published \
565
+ --description "Updated comprehensive customer analytics" \
566
+ --endorsed
567
+
568
+ # Update multiple fields at once
569
+ pvw uc dataproduct update \
570
+ --product-id "prod-789" \
571
+ --status Published \
572
+ --update-frequency Monthly \
573
+ --endorsed
574
+
575
+ # Delete a data product (with confirmation)
576
+ pvw uc dataproduct delete --product-id "prod-789"
577
+
578
+ # Delete without confirmation prompt
579
+ pvw uc dataproduct delete --product-id "prod-789" --yes
580
+ ```
581
+
582
+ #### 🎯 **Objectives & Key Results (OKRs)**
583
+
584
+ ```bash
585
+ # List objectives for a domain
586
+ pvw uc objective list --domain-id "abc-123"
587
+
588
+ # Create measurable objectives
589
+ pvw uc objective create \
590
+ --definition "Improve data quality score by 25% within Q4" \
591
+ --domain-id "abc-123" \
592
+ --target-value "95" \
593
+ --measurement-unit "percentage"
594
+
595
+ # Track objective progress
596
+ pvw uc objective update \
597
+ --objective-id "obj-456" \
598
+ --domain-id "abc-123" \
599
+ --current-value "87" \
600
+ --status "in-progress"
601
+ ```
602
+
603
+ #### 🔑 **Critical Data Elements (CDEs)**
604
+
605
+ ```bash
606
+ # List critical data elements
607
+ pvw uc cde list --domain-id "abc-123"
608
+
609
+ # Define critical data elements with governance rules
610
+ pvw uc cde create \
611
+ --name "Social Security Number" \
612
+ --data-type "String" \
613
+ --domain-id "abc-123" \
614
+ --classification "PII" \
615
+ --retention-period "7-years"
616
+
617
+ # Associate CDEs with data assets
618
+ pvw uc cde link \
619
+ --cde-id "cde-789" \
620
+ --domain-id "abc-123" \
621
+ --asset-id "ea3412c3-7387-4bc1-9923-11f6f6f60000"
622
+ ```
623
+
624
+ #### 🏥 **Health Monitoring (NEW)**
625
+
626
+ Monitor governance health and get automated recommendations to improve your data governance posture.
627
+
628
+ ```bash
629
+ # List all health findings and recommendations
630
+ pvw uc health query
631
+
632
+ # Filter by severity
633
+ pvw uc health query --severity High
634
+ pvw uc health query --severity Medium
635
+
636
+ # Filter by status
637
+ pvw uc health query --status NotStarted
638
+ pvw uc health query --status InProgress
639
+
640
+ # Get detailed information about a specific health action
641
+ pvw uc health show --action-id "5ea3fc78-6a77-4098-8779-ed81de6f87c9"
642
+
643
+ # Update health action status
644
+ pvw uc health update \
645
+ --action-id "5ea3fc78-6a77-4098-8779-ed81de6f87c9" \
646
+ --status InProgress \
647
+ --reason "Working on assigning glossary terms to data products"
648
+
649
+ # Get health summary statistics
650
+ pvw uc health summary
651
+
652
+ # Output health findings in JSON format
653
+ pvw uc health query --json
654
+ ```
655
+
656
+ **Health Finding Types:**
657
+ - Missing glossary terms on data products (High)
658
+ - Data products without OKRs (Medium)
659
+ - Missing data quality scores (Medium)
660
+ - Classification gaps on data assets (Medium)
661
+ - Description quality issues (Medium)
662
+ - Business domains without critical data entities (Medium)
663
+
664
+ #### 🔄 **Workflow Management (NEW)**
665
+
666
+ Manage approval workflows and business process automation in Purview.
667
+
668
+ ```bash
669
+ # List all workflows
670
+ pvw workflow list
671
+
672
+ # Get workflow details
673
+ pvw workflow get --workflow-id "workflow-123"
674
+
675
+ # Create a new workflow (requires JSON definition)
676
+ pvw workflow create --workflow-id "approval-flow-1" --payload-file workflow-definition.json
677
+
678
+ # Execute a workflow
679
+ pvw workflow execute --workflow-id "workflow-123"
680
+
681
+ # List workflow executions
682
+ pvw workflow executions --workflow-id "workflow-123"
683
+
684
+ # View specific execution details
685
+ pvw workflow execution-details --workflow-id "workflow-123" --execution-id "exec-456"
686
+
687
+ # Update workflow configuration
688
+ pvw workflow update --workflow-id "workflow-123" --payload-file updated-workflow.json
689
+
690
+ # Delete a workflow
691
+ pvw workflow delete --workflow-id "workflow-123"
692
+
693
+ # Output workflows in JSON format
694
+ pvw workflow list --json
695
+ ```
696
+
697
+ **Workflow Use Cases:**
698
+ - Data access request approvals
699
+ - Glossary term certification workflows
700
+ - Data product publishing approvals
701
+ - Classification review processes
702
+
703
+ #### 🔄 **Integrated Workflow Example**
704
+
705
+ ```bash
706
+ # 1. Discover assets to govern
707
+ pvw search query --keywords="customer" --detailed
708
+
709
+ # 2. Create governance domain for discovered assets
710
+ pvw uc domain create --name "Customer Data" --description "Customer information governance"
711
+
712
+ # 3. Define governance terms
713
+ pvw uc term create --name "Customer PII" --domain-id "new-domain-id" --definition "Personal customer information"
714
+
715
+ # 4. Create data product from discovered assets
716
+ pvw uc dataproduct create --name "Customer Master Data" --domain-id "new-domain-id"
717
+
718
+ # 5. Set governance objectives
719
+ pvw uc objective create --definition "Ensure 100% PII classification compliance" --domain-id "new-domain-id"
720
+ ```
721
+
722
+ ---
723
+
724
+ ## Entity Management & Updates
725
+
726
+ PVW CLI provides comprehensive entity management capabilities for updating Purview assets like descriptions, classifications, and custom attributes.
727
+
728
+ ### 🔄 **Entity Update Examples**
729
+
730
+ #### **Update Asset Descriptions**
731
+
732
+ ```bash
733
+ # Update table description using GUID
734
+ pvw entity update-attribute \
735
+ --guid "ece43ce5-ac45-4e50-a4d0-365a64299efc" \
736
+ --attribute "description" \
737
+ --value "Updated customer data warehouse table with enhanced analytics"
738
+
739
+ # Update dataset description using qualified name
740
+ pvw entity update-attribute \
741
+ --qualifiedName "https://app.powerbi.com/groups/abc-123/datasets/def-456" \
742
+ --attribute "description" \
743
+ --value "Power BI dataset for customer analytics dashboard"
744
+ ```
745
+
746
+ #### **Bulk Entity Operations**
747
+
748
+ ```bash
749
+ # Read entity details before updating
750
+ pvw entity read-by-attribute \
751
+ --guid "ea3412c3-7387-4bc1-9923-11f6f6f60000" \
752
+ --attribute "description,classifications,customAttributes"
753
+
754
+ # Update multiple attributes at once
755
+ pvw entity update-bulk \
756
+ --input-file entities_to_update.json \
757
+ --output-file update_results.json
758
+ ```
759
+
760
+ #### **Column-Level Updates**
761
+
762
+ ```bash
763
+ # Update specific column descriptions in a table
764
+ pvw entity update-attribute \
765
+ --guid "column-guid-123" \
766
+ --attribute "description" \
767
+ --value "Customer unique identifier - Primary Key"
768
+
769
+ # Add classifications to sensitive columns
770
+ pvw entity add-classification \
771
+ --guid "column-guid-456" \
772
+ --classification "MICROSOFT.PERSONAL.EMAIL"
773
+ ```
774
+
775
+ ### 🔍 **Discovery to Update Workflow**
776
+
777
+ ```bash
778
+ # 1. Find assets that need updates
779
+ pvw search query --keywords="customer table" --show-ids --limit=10
780
+
781
+ # 2. Get detailed information about a specific asset
782
+ pvw entity read-by-attribute --guid "FOUND_GUID" --attribute "description,classifications"
783
+
784
+ # 3. Update the asset description
785
+ pvw entity update-attribute \
786
+ --guid "FOUND_GUID" \
787
+ --attribute "description" \
788
+ --value "Updated description based on business requirements"
789
+
790
+ # 4. Verify the update
791
+ pvw search query --keywords="FOUND_GUID" --detailed
792
+ ```
793
+
794
+ ---
795
+
796
+ ## Data Product Management (Legacy)
797
+
798
+ PVW CLI also includes the original `data-product` command group for backward compatibility with traditional data product lifecycle management.
799
+
800
+ See [`doc/commands/data-product.md`](doc/commands/data-product.md) for full documentation and examples.
801
+
802
+ ### Example Commands
803
+
804
+ ```bash
805
+ # Create a data product
806
+ pvw data-product create --qualified-name="product.test.1" --name="Test Product" --description="A test data product"
807
+
808
+ # Add classification and label
809
+ pvw data-product add-classification --qualified-name="product.test.1" --classification="PII"
810
+ pvw data-product add-label --qualified-name="product.test.1" --label="gold"
811
+
812
+ # Link glossary term
813
+ pvw data-product link-glossary --qualified-name="product.test.1" --term="Customer"
814
+
815
+ # Set status and show lineage
816
+ pvw data-product set-status --qualified-name="product.test.1" --status="active"
817
+ pvw data-product show-lineage --qualified-name="product.test.1"
818
+ ```
819
+
820
+ ---
821
+
822
+ ## Core Features
823
+
824
+ - **Unified Catalog (UC)**: Complete modern data governance (NEW)
825
+ ```bash
826
+ # Manage governance domains, terms, data products, OKRs, CDEs
827
+ pvw uc domain list
828
+ pvw uc term create --name "Customer" --domain-id "abc-123"
829
+ pvw uc objective create --definition "Improve quality" --domain-id "abc-123"
830
+ ```
831
+ - **Discovery Query/Search**: Flexible, advanced search for all catalog assets
832
+ - **Entity Management**: Bulk import/export, update, and validation
833
+ - **Glossary Management**: Import/export terms, assign terms in bulk
834
+ ```bash
835
+ # List all terms in a glossary
836
+ pvw glossary list-terms --glossary-guid "your-glossary-guid"
837
+
838
+ # Create and manage glossary terms
839
+ pvw glossary create-term --payload-file term.json
840
+ ```
841
+ - **Lineage Operations**: Lineage discovery, CSV-based bulk lineage
842
+ - **Monitoring & Analytics**: Real-time dashboards, metrics, and reporting
843
+ - **Plugin System**: Extensible with custom plugins
844
+
845
+ ---
846
+
847
+ ## API Coverage and Support
848
+
849
+ PVW CLI provides comprehensive automation for all major Microsoft Purview APIs, including the new **Unified Catalog APIs** for modern data governance.
850
+
851
+ ### Supported API Groups
852
+
853
+ - **Unified Catalog**: Complete governance domains, glossary terms, data products, OKRs, CDEs management ✅
854
+ - **Health Monitoring**: Automated governance health checks and recommendations ✅ NEW
855
+ - **Workflows**: Approval workflows and business process automation ✅ NEW
856
+ - **Data Map**: Full entity and lineage management ✅
857
+ - **Discovery**: Advanced search, browse, and query capabilities ✅
858
+ - **Collections**: Collection and account management ✅
859
+ - **Management**: Administrative operations ✅
860
+ - **Scan**: Data source scanning and configuration ✅
861
+
862
+ ### API Version Support
863
+
864
+ - **Unified Catalog**: Latest UC API endpoints (September 2025)
865
+ - Data Map: **2024-03-01-preview** (default) or **2023-09-01** (stable)
866
+ - Collections: **2019-11-01-preview**
867
+ - Account: **2019-11-01-preview**
868
+ - Management: **2021-07-01**
869
+ - Scan: **2018-12-01-preview**
870
+
871
+ For the latest API documentation and updates, see:
872
+ - [Microsoft Purview REST API reference](https://learn.microsoft.com/en-us/rest/api/purview/)
873
+ - [Atlas 2.2 API documentation](https://learn.microsoft.com/en-us/purview/data-gov-api-atlas-2-2)
874
+ - [Azure Updates](https://azure.microsoft.com/updates/) for new releases
875
+
876
+ If you need a feature that is not yet implemented, please open an issue or check for updates in future releases.
877
+
878
+ ---
879
+
880
+ ## Contributing & Support
881
+
882
+ - [Documentation](https://github.com/Keayoub/Purview_cli/blob/main/doc/README.md)
883
+ - [Issue Tracker](https://github.com/Keayoub/Purview_cli/issues)
884
+ - [Email Support](mailto:keayoub@msn.com)
885
+
886
+ ---
887
+
888
+ **PVW CLI empowers data engineers, stewards, and architects to automate, scale, and enhance their Microsoft Purview experience with powerful command-line and programmatic capabilities.**