systemlink-cli 1.4.6__tar.gz → 1.4.7__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.
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/PKG-INFO +1 -1
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/pyproject.toml +1 -1
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/_version.py +1 -1
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/user_click.py +43 -49
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/LICENSE +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/dff-editor/editor.js +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/dff-editor/index.html +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/__init__.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/__main__.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/asset_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/cli_formatters.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/cli_utils.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/comment_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/completion_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/config.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/config_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/dff_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/dff_decorators.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/example_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/example_loader.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/example_provisioner.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/README.md +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/_schema/schema-v1.0.json +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/demo-complete-workflow/README.md +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/demo-complete-workflow/config.yaml +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/demo-test-plans/README.md +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/demo-test-plans/config.yaml +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/exercise-7-1-test-plans/README.md +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/exercise-7-1-test-plans/config.yaml +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/feed_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/file_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/function_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/function_templates.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/main.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/mcp_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/mcp_server.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/notebook_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/platform.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/policy_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/policy_utils.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/profiles.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/response_handlers.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/routine_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/skill_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/skills/slcli/SKILL.md +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/skills/slcli/references/analysis-recipes.md +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/skills/slcli/references/filtering.md +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/skills/systemlink-webapp/SKILL.md +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/skills/systemlink-webapp/references/deployment.md +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/skills/systemlink-webapp/references/nimble-angular.md +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/skills/systemlink-webapp/references/systemlink-services.md +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/ssl_trust.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/system_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/table_utils.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/tag_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/templates_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/testmonitor_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/universal_handlers.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/utils.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/web_editor.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/webapp_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/workflow_preview.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/workflows_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/workitem_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/workspace_click.py +0 -0
- {systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/workspace_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "systemlink-cli"
|
|
3
|
-
version = "1.4.
|
|
3
|
+
version = "1.4.7"
|
|
4
4
|
description = "SystemLink Integrator CLI - cross-platform CLI for SystemLink workflows and templates."
|
|
5
5
|
authors = ["Fred Visser <fred.visser@emerson.com>"]
|
|
6
6
|
packages = [{ include = "slcli" }]
|
|
@@ -13,6 +13,7 @@ from uuid import uuid4
|
|
|
13
13
|
|
|
14
14
|
import click
|
|
15
15
|
import questionary
|
|
16
|
+
from click.core import ParameterSource
|
|
16
17
|
|
|
17
18
|
from .cli_utils import paginate_list_output, validate_output_format
|
|
18
19
|
from .utils import (
|
|
@@ -25,6 +26,10 @@ from .utils import (
|
|
|
25
26
|
from .workspace_utils import get_workspace_display_name, resolve_workspace_id
|
|
26
27
|
|
|
27
28
|
|
|
29
|
+
USER_QUERY_PAGE_SIZE = 100
|
|
30
|
+
USER_JSON_DEFAULT_TAKE = 1000
|
|
31
|
+
|
|
32
|
+
|
|
28
33
|
def _get_policy_details(policy_id: str) -> Optional[dict]:
|
|
29
34
|
"""Fetch policy details from the Auth service.
|
|
30
35
|
|
|
@@ -412,6 +417,7 @@ def _query_all_users(
|
|
|
412
417
|
sortby: str = "firstName",
|
|
413
418
|
order: str = "asc",
|
|
414
419
|
include_disabled: bool = False,
|
|
420
|
+
max_items: Optional[int] = None,
|
|
415
421
|
) -> list:
|
|
416
422
|
"""Query all users from the API with server-side pagination using continuation tokens.
|
|
417
423
|
|
|
@@ -430,6 +436,7 @@ def _query_all_users(
|
|
|
430
436
|
sortby: Field to sort by
|
|
431
437
|
order: Sort order ('asc' or 'desc')
|
|
432
438
|
include_disabled: Whether to include disabled users
|
|
439
|
+
max_items: Maximum number of users to return. When omitted, fetches all pages.
|
|
433
440
|
|
|
434
441
|
Returns:
|
|
435
442
|
List of all users
|
|
@@ -437,7 +444,7 @@ def _query_all_users(
|
|
|
437
444
|
url = f"{get_base_url()}/niuser/v1/users/query"
|
|
438
445
|
all_users = []
|
|
439
446
|
continuation_token = None
|
|
440
|
-
|
|
447
|
+
remaining_items = max_items if max_items and max_items > 0 else None
|
|
441
448
|
|
|
442
449
|
# Build the base filter - combine user filter with active status filter if needed
|
|
443
450
|
combined_filter = filter_str
|
|
@@ -451,8 +458,13 @@ def _query_all_users(
|
|
|
451
458
|
combined_filter = active_filter
|
|
452
459
|
|
|
453
460
|
while True:
|
|
461
|
+
request_take = (
|
|
462
|
+
USER_QUERY_PAGE_SIZE
|
|
463
|
+
if remaining_items is None
|
|
464
|
+
else min(USER_QUERY_PAGE_SIZE, remaining_items)
|
|
465
|
+
)
|
|
454
466
|
payload = {
|
|
455
|
-
"take":
|
|
467
|
+
"take": request_take,
|
|
456
468
|
"sortby": sortby,
|
|
457
469
|
"order": "ascending" if order == "asc" else "descending",
|
|
458
470
|
}
|
|
@@ -472,6 +484,11 @@ def _query_all_users(
|
|
|
472
484
|
|
|
473
485
|
all_users.extend(users)
|
|
474
486
|
|
|
487
|
+
if remaining_items is not None:
|
|
488
|
+
remaining_items -= len(users)
|
|
489
|
+
if remaining_items <= 0:
|
|
490
|
+
return all_users[:max_items]
|
|
491
|
+
|
|
475
492
|
# Check for continuation token to get next page
|
|
476
493
|
continuation_token = data.get("continuationToken")
|
|
477
494
|
if not continuation_token:
|
|
@@ -499,8 +516,10 @@ def register_user_commands(cli: click.Group) -> None:
|
|
|
499
516
|
"-t",
|
|
500
517
|
type=int,
|
|
501
518
|
default=25,
|
|
502
|
-
|
|
503
|
-
|
|
519
|
+
help=(
|
|
520
|
+
"Table page size (default 25). JSON returns up to 1000 users by default; "
|
|
521
|
+
"use --take to override."
|
|
522
|
+
),
|
|
504
523
|
)
|
|
505
524
|
@click.option(
|
|
506
525
|
"--format",
|
|
@@ -573,59 +592,34 @@ def register_user_commands(cli: click.Group) -> None:
|
|
|
573
592
|
if user_type != "all":
|
|
574
593
|
type_filter = f'type = "{user_type}"'
|
|
575
594
|
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
if format_output.lower() == "json":
|
|
579
|
-
# Use server-side pagination for JSON output
|
|
580
|
-
url = f"{get_base_url()}/niuser/v1/users/query"
|
|
581
|
-
|
|
582
|
-
# Build the filter - combine search filter with active status filter if needed
|
|
583
|
-
combined_filter = search_filter
|
|
584
|
-
if not include_disabled:
|
|
585
|
-
# Add active status filter to the query using correct Dynamic LINQ syntax
|
|
586
|
-
# Note: User API uses 'status' field with values 'pending' or 'active'
|
|
587
|
-
active_filter = 'status = "active"'
|
|
588
|
-
if combined_filter:
|
|
589
|
-
combined_filter = f"({combined_filter}) and {active_filter}"
|
|
590
|
-
else:
|
|
591
|
-
combined_filter = active_filter
|
|
592
|
-
|
|
593
|
-
# Add type filter
|
|
594
|
-
if type_filter:
|
|
595
|
-
if combined_filter:
|
|
596
|
-
combined_filter = f"({combined_filter}) and {type_filter}"
|
|
597
|
-
else:
|
|
598
|
-
combined_filter = type_filter
|
|
599
|
-
|
|
600
|
-
payload = {
|
|
601
|
-
"take": take,
|
|
602
|
-
"sortby": sortby,
|
|
603
|
-
"order": "ascending" if order == "asc" else "descending",
|
|
604
|
-
}
|
|
605
|
-
|
|
595
|
+
combined_filter = search_filter
|
|
596
|
+
if type_filter:
|
|
606
597
|
if combined_filter:
|
|
607
|
-
|
|
598
|
+
combined_filter = f"({combined_filter}) and {type_filter}"
|
|
599
|
+
else:
|
|
600
|
+
combined_filter = type_filter
|
|
608
601
|
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
602
|
+
if format_output.lower() == "json":
|
|
603
|
+
ctx = click.get_current_context()
|
|
604
|
+
take_source = ctx.get_parameter_source("take")
|
|
605
|
+
json_take = (
|
|
606
|
+
USER_JSON_DEFAULT_TAKE if take_source == ParameterSource.DEFAULT else take
|
|
607
|
+
)
|
|
608
|
+
|
|
609
|
+
users = _query_all_users(
|
|
610
|
+
filter_str=combined_filter,
|
|
611
|
+
sortby=sortby,
|
|
612
|
+
order=order,
|
|
613
|
+
include_disabled=include_disabled,
|
|
614
|
+
max_items=json_take,
|
|
615
|
+
)
|
|
612
616
|
|
|
613
617
|
click.echo(json.dumps(users, indent=2))
|
|
614
618
|
return
|
|
615
619
|
else:
|
|
616
620
|
# For table format, fetch all users for proper client-side pagination
|
|
617
|
-
# Combine filters for table output
|
|
618
|
-
combined_filter_for_table = search_filter
|
|
619
|
-
if type_filter:
|
|
620
|
-
if combined_filter_for_table:
|
|
621
|
-
combined_filter_for_table = (
|
|
622
|
-
f"({combined_filter_for_table}) and {type_filter}"
|
|
623
|
-
)
|
|
624
|
-
else:
|
|
625
|
-
combined_filter_for_table = type_filter
|
|
626
|
-
|
|
627
621
|
all_users = _query_all_users(
|
|
628
|
-
filter_str=
|
|
622
|
+
filter_str=combined_filter,
|
|
629
623
|
sortby=sortby,
|
|
630
624
|
order=order,
|
|
631
625
|
include_disabled=include_disabled,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/demo-complete-workflow/README.md
RENAMED
|
File without changes
|
{systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/demo-complete-workflow/config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/exercise-7-1-test-plans/README.md
RENAMED
|
File without changes
|
{systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/exercise-7-1-test-plans/config.yaml
RENAMED
|
File without changes
|
{systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/spec-compliance-notebooks/README.md
RENAMED
|
File without changes
|
{systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/examples/spec-compliance-notebooks/config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{systemlink_cli-1.4.6 → systemlink_cli-1.4.7}/slcli/skills/slcli/references/analysis-recipes.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|