agilicus 1.235.5__py3-none-any.whl → 1.235.7__py3-none-any.whl

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.
@@ -77,7 +77,7 @@ class ApiClient(object):
77
77
  self.default_headers[header_name] = header_value
78
78
  self.cookie = cookie
79
79
  # Set default User-Agent.
80
- self.user_agent = 'OpenAPI-Generator/1.235.5/python'
80
+ self.user_agent = 'OpenAPI-Generator/1.235.7/python'
81
81
 
82
82
  def __enter__(self):
83
83
  return self
@@ -387,7 +387,7 @@ class Configuration(object):
387
387
  "OS: {env}\n"\
388
388
  "Python Version: {pyversion}\n"\
389
389
  "Version of the API: 2023.12.15\n"\
390
- "SDK Package Version: 1.235.5".\
390
+ "SDK Package Version: 1.235.7".\
391
391
  format(env=sys.platform, pyversion=sys.version)
392
392
 
393
393
  def get_host_settings(self):
@@ -4,7 +4,7 @@ Agilicus is API-first. Modern software is controlled by other software, is open,
4
4
  The `agilicus_api` package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
5
5
 
6
6
  - API version: 2023.12.15
7
- - Package version: 1.235.5
7
+ - Package version: 1.235.7
8
8
  - Build package: org.openapitools.codegen.languages.PythonClientCodegen
9
9
  For more information, please visit [https://www.agilicus.com/api](https://www.agilicus.com/api)
10
10
 
@@ -47,6 +47,7 @@ def add_feature(
47
47
  min=None,
48
48
  max=None,
49
49
  enabled=None,
50
+ priority=None,
50
51
  **kwargs,
51
52
  ):
52
53
  api = get_api(ctx)
@@ -63,6 +64,8 @@ def add_feature(
63
64
  if enabled is not None:
64
65
  val.enabled = enabled
65
66
 
67
+ if priority is not None:
68
+ spec.priority = priority
66
69
  return api.create_feature(agilicus.Feature(spec))
67
70
 
68
71
 
@@ -10,9 +10,27 @@ from agilicus.output.table import format_table
10
10
 
11
11
  @click.command(name="list-features")
12
12
  @click.pass_context
13
- def cli_command_list_features(ctx, **kwargs):
13
+ @click.option("--show-columns", type=str, default=None)
14
+ @click.option("--reset-columns", is_flag=True, default=False)
15
+ def cli_command_list_features(ctx, show_columns, reset_columns, **kwargs):
14
16
  results = features.list_features(ctx, **kwargs)
15
- print(features.format_features(ctx, results))
17
+ spec = """
18
+ - metadata.id(newname=id)
19
+ - spec.name(newname=name)
20
+ - spec.priority(newname=priority)
21
+ - spec.key(newname=key)
22
+ - spec.value(newname=value)
23
+ - status.products(out_name=products):
24
+ - spec.label(newname=label)
25
+ """
26
+ columns = make_columns(
27
+ ctx,
28
+ results,
29
+ spec,
30
+ show=show_columns,
31
+ clear=reset_columns,
32
+ )
33
+ print(format_table(ctx, results, columns))
16
34
 
17
35
 
18
36
  @click.command(name="add-feature")
@@ -78,13 +96,13 @@ def cli_command_list_org_features(ctx, show_columns, reset_columns, **kwargs):
78
96
  columns = make_columns(
79
97
  ctx,
80
98
  results,
81
- [
82
- "metadata.id",
83
- "spec.name",
84
- "spec.priority",
85
- "spec.key",
86
- "spec.value",
87
- ],
99
+ """
100
+ - metadata.id(newname=id)
101
+ - spec.name(newname=name)
102
+ - spec.priority(newname=priority)
103
+ - spec.key(newname=key)
104
+ - spec.value(newname=value)
105
+ """,
88
106
  show=show_columns,
89
107
  clear=reset_columns,
90
108
  )
agilicus/main.py CHANGED
@@ -680,16 +680,16 @@ def list_users(ctx, organisation, org_id, show_columns, reset_columns, **kwargs)
680
680
  columns = make_columns(
681
681
  ctx,
682
682
  results,
683
- [
684
- "id",
685
- "first_name",
686
- "last_name",
687
- "email",
688
- "org_id",
689
- "status",
690
- "created",
691
- "updated",
692
- ],
683
+ """
684
+ - id
685
+ - first_name
686
+ - last_name
687
+ - email
688
+ - org_id
689
+ - status
690
+ - created
691
+ - updated
692
+ """,
693
693
  show=show_columns,
694
694
  clear=reset_columns,
695
695
  )
@@ -6787,8 +6787,17 @@ def override_replace(
6787
6787
  @click.option("--usage-group-by-org", default=None, multiple=True)
6788
6788
  @click.option("--subscription-id", default=None)
6789
6789
  @click.option("--billing-account-id", default=None)
6790
+ @click.option("--feature-id", default=None, multiple=True)
6791
+ @click.option("--remove-feature-id", default=None, multiple=True)
6790
6792
  @click.pass_context
6791
- def update_subscription(ctx, subscription_id, billing_account_id=None, **kwargs):
6793
+ def update_subscription(
6794
+ ctx,
6795
+ subscription_id,
6796
+ billing_account_id=None,
6797
+ feature_id=None,
6798
+ remove_feature_id=None,
6799
+ **kwargs,
6800
+ ):
6792
6801
  """Update the min/max overrides in a customer subscription."""
6793
6802
  bsub = billing.get_billing_subscription(ctx, kwargs["billing_subscription_id"])
6794
6803
  usage_override = bsub.spec.usage_override
@@ -6822,8 +6831,23 @@ def update_subscription(ctx, subscription_id, billing_account_id=None, **kwargs)
6822
6831
  if billing_account_id:
6823
6832
  bsub.spec.billing_account_id = billing_account_id
6824
6833
 
6834
+ if feature_id is not None:
6835
+ for feature_id in feature_id:
6836
+ bsub.spec.feature_overrides.append(feature_id)
6837
+
6838
+ if remove_feature_id is not None:
6839
+ old_features = bsub.spec.feature_overrides
6840
+ bsub.spec.feature_overrides = []
6841
+ for feature_id in old_features:
6842
+ if feature_id in remove_feature_id:
6843
+ # needs to be removed.
6844
+ continue
6845
+ bsub.spec.feature_overrides.append(feature_id)
6846
+
6825
6847
  sub = billing.update_subscription(
6826
- ctx, billing_subscription_id=kwargs["billing_subscription_id"], subscription=bsub
6848
+ ctx,
6849
+ billing_subscription_id=kwargs["billing_subscription_id"],
6850
+ subscription=bsub,
6827
6851
  )
6828
6852
  output_entry(ctx, sub.to_dict())
6829
6853
 
@@ -0,0 +1,134 @@
1
+ import yaml
2
+ import re
3
+ from collections import OrderedDict
4
+ from . import table
5
+
6
+
7
+ class ColumnBuilder:
8
+ def __init__(self, ctx, result_list):
9
+ self.ctx = ctx
10
+ self.result_list = result_list
11
+
12
+ def _get_column_names(self, subtable_column_name):
13
+ results = set()
14
+ if not self.result_list:
15
+ return results
16
+ obj = self.result_list[0]
17
+ if subtable_column_name:
18
+ obj = getattr(obj, subtable_column_name)
19
+ if not obj:
20
+ # nothing available
21
+ return results
22
+ obj = obj[0]
23
+ return set(obj.to_dict().keys())
24
+
25
+ def _make_subtable(self, table_name, format_doc):
26
+ m = re.search("(.*)\\((.+)\\).*", table_name)
27
+ all_options = {}
28
+ if m:
29
+ found = m.group(2)
30
+ for option in found.split(","):
31
+ split_str = option.split("=")
32
+ all_options[split_str[0]] = split_str[1]
33
+ table_name = m.group(1)
34
+ columns = self.build_columns(format_doc, subtable_column_name=table_name)
35
+ return table.subtable(
36
+ self.ctx,
37
+ table_name,
38
+ columns=columns,
39
+ optional=True,
40
+ **all_options,
41
+ )
42
+
43
+ def _get_output_column(self, column_name: str):
44
+ m = re.search("(.*)\\((.+)\\).*", column_name)
45
+ if m:
46
+ found = m.group(2)
47
+ all_options = {}
48
+ for option in found.split(","):
49
+ split_str = option.split("=")
50
+ all_options[split_str[0]] = split_str[1]
51
+ return table.column(m.group(1), optional=True, **all_options)
52
+ return table.column(column_name, optional=True)
53
+
54
+ def build_columns(
55
+ self,
56
+ format_doc,
57
+ subtable_column_name=None,
58
+ **kwargs,
59
+ ):
60
+ column_names = OrderedDict()
61
+ for column_name in format_doc:
62
+ if column_name == "all":
63
+ for c in self._get_column_names(subtable_column_name):
64
+ column_names[c] = self._get_output_column(c)
65
+ elif isinstance(column_name, dict):
66
+ sub_table_col = list(column_name.keys())[0]
67
+ sub_table_val = column_name[sub_table_col]
68
+ column_names[sub_table_col] = self._make_subtable(
69
+ sub_table_col,
70
+ sub_table_val,
71
+ )
72
+ else:
73
+ column_names[column_name] = self._get_output_column(column_name)
74
+
75
+ return list(column_names.values())
76
+
77
+
78
+ def make_columns(
79
+ ctx,
80
+ result_list,
81
+ base_columns,
82
+ show=None,
83
+ clear=False,
84
+ **kwargs,
85
+ ):
86
+ """
87
+ A generic build for making columns, configurable by user
88
+ to choose specific columns or subtables.
89
+
90
+ Add the following options to your command:
91
+ @click.option("--show-columns", type=str, default=None)
92
+ @click.option("--reset-columns", is_flag=True, default=False)
93
+
94
+ Then call make_columns (for example)
95
+ columns = make_columns(ctx, results, ["id", "email"], show=show, clear=clear)
96
+
97
+ This make the 'default' show have columns 'id', 'email'.
98
+
99
+ You may clear it, and start from scratch:
100
+
101
+ show just email:
102
+ --clear --show email
103
+
104
+ show email and the id
105
+ --clear --show id,email
106
+
107
+ show all columns
108
+ --clear --show all
109
+
110
+ show a subtable:
111
+ --clear --show "[id,email,upstream_user_identities: [all]]"
112
+
113
+ show a specific column in the subtable:
114
+ --clear --show "[id,email,upstream_user_identities: [spec.upstream_idp_id]]"
115
+
116
+ rename the output column
117
+ --clear --show "[id,email,upstream_user_identities: [spec.upstream_idp_id(newname=upstream_idp_id)]]" # noqa
118
+
119
+ Note that the show format is a valid yaml doc. Its a list of columns, when
120
+ a mapping (dictionary) is found that is assumed to be a subtable, where the
121
+ key name is the subtable name
122
+ """
123
+ format_doc = []
124
+ if not clear and base_columns:
125
+ format_doc = yaml.safe_load(base_columns)
126
+
127
+ if show:
128
+ if "[" not in show:
129
+ # incase the user hasn't created a valid yaml list,
130
+ # make it a list.
131
+ show = "[" + show + "]"
132
+ format_doc.extend(yaml.safe_load(show))
133
+
134
+ return ColumnBuilder(ctx, result_list).build_columns(format_doc, **kwargs)
agilicus/output/table.py CHANGED
@@ -2,7 +2,6 @@ import operator
2
2
  import json
3
3
  from babel import numbers
4
4
  from datetime import timezone, datetime
5
- from collections import OrderedDict
6
5
 
7
6
  from agilicus import context
8
7
  from agilicus.output.json import convert_to_json
@@ -11,6 +10,7 @@ from dataclasses import dataclass
11
10
  from typing import Callable
12
11
 
13
12
  from prettytable import PrettyTable
13
+ from . import column_builder
14
14
 
15
15
 
16
16
  def format_date(date_input):
@@ -288,91 +288,5 @@ def output_entry(ctx, entry):
288
288
  print(table)
289
289
 
290
290
 
291
- def get_column_names(result_list, subtable_column_name):
292
- results = set()
293
- if not result_list:
294
- return results
295
- obj = result_list[0]
296
- if subtable_column_name:
297
- obj = getattr(obj, subtable_column_name)
298
- if not obj:
299
- # nothing available
300
- return results
301
- obj = obj[0]
302
- return set(obj.to_dict().keys())
303
-
304
-
305
- def make_subtable(ctx, result_list, name):
306
- split_name = name.split(":")
307
- base_name = split_name[0]
308
- show = ":".join(split_name[1:])
309
- columns = make_columns(
310
- ctx, result_list, [], show=show, subtable_column_name=base_name
311
- )
312
- return subtable(
313
- ctx,
314
- base_name,
315
- columns=columns,
316
- optional=True,
317
- )
318
-
319
-
320
- def make_columns(
321
- ctx,
322
- result_list,
323
- base_columns,
324
- show=None,
325
- clear=False,
326
- subtable_column_name=None,
327
- **kwargs,
328
- ):
329
- """
330
- A generic build for making columns, configurable by user
331
- to choose specific columns or subtables.
332
-
333
- Add the following options to your command:
334
- @click.option("--show", type=str, default=None)
335
- @click.option("--clear", is_flag=True, default=False)
336
-
337
- Then call make_columns (for example)
338
- columns = make_columns(ctx, results, ["id", "email"], show=show, clear=clear)
339
-
340
- This make the 'default' show have columns 'id', 'email'.
341
-
342
- You may clear it, and start from scratch:
343
-
344
- show just email:
345
- --clear --show email
346
-
347
- show email and the id
348
- --clear --show id,email
349
-
350
- show all columns
351
- --clear --show all
352
-
353
- show a subtable:
354
- --clear --show id,email,upstream_user_identities:all
355
-
356
- show a specific column in the subtable:
357
- --clear --show id,email,upstream_user_identities:spec.upstream_idp_id
358
- """
359
- column_names = OrderedDict()
360
- if not clear:
361
- for name in base_columns:
362
- column_names[name] = column(name, optional=True)
363
-
364
- if not show:
365
- return list(column_names.values())
366
-
367
- for column_name in show.split(","):
368
- if column_name == "all":
369
- for c in get_column_names(result_list, subtable_column_name):
370
- column_names[c] = column(c, optional=True)
371
- elif ":" in column_name:
372
- column_names[column_name.split(":")[0]] = make_subtable(
373
- ctx, result_list, column_name
374
- )
375
- else:
376
- column_names[column_name] = column(column_name, optional=True)
377
-
378
- return list(column_names.values())
291
+ def make_columns(*args, **kwargs):
292
+ return column_builder.make_columns(*args, **kwargs)
File without changes
@@ -0,0 +1,73 @@
1
+ import agilicus
2
+ from .. import column_builder
3
+
4
+
5
+ def test_simple():
6
+ assert column_builder.make_columns(None, [], "") == []
7
+
8
+
9
+ def test_show_single_column():
10
+ results = [
11
+ agilicus.User._from_openapi_data(
12
+ email=agilicus.Email("foo@bar.com"), type="user"
13
+ )
14
+ ]
15
+ columns = column_builder.make_columns(None, results, "[email]")
16
+ assert len(columns) == 1
17
+ assert columns[0].in_name == "email"
18
+ assert columns[0].out_name == "email"
19
+
20
+
21
+ def test_show_multi_column():
22
+ results = [
23
+ agilicus.User._from_openapi_data(
24
+ id="one", email=agilicus.Email("foo@bar.com"), type="user"
25
+ )
26
+ ]
27
+ columns = column_builder.make_columns(None, results, "[id,email]")
28
+ assert len(columns) == 2
29
+ assert columns[0].in_name == "id"
30
+ assert columns[0].out_name == "id"
31
+
32
+ assert columns[1].in_name == "email"
33
+ assert columns[1].out_name == "email"
34
+
35
+
36
+ def test_rename_col():
37
+ results = [
38
+ agilicus.User._from_openapi_data(
39
+ id="one", email=agilicus.Email("foo@bar.com"), type="user"
40
+ )
41
+ ]
42
+ columns = column_builder.make_columns(
43
+ None, results, "[id(newname=blah),email(newname=huh)]"
44
+ )
45
+ assert len(columns) == 2
46
+ assert columns[0].in_name == "id"
47
+ assert columns[0].out_name == "blah"
48
+
49
+ assert columns[1].in_name == "email"
50
+ assert columns[1].out_name == "huh"
51
+
52
+
53
+ def test_subtable():
54
+ spec = agilicus.UpstreamUserIdentitySpec(
55
+ upstream_user_id="user-id", upstream_idp_id="idp-id", local_user_id="local-id"
56
+ )
57
+ identities = [agilicus.UpstreamUserIdentity(spec)]
58
+ results = [
59
+ agilicus.User._from_openapi_data(
60
+ id="one",
61
+ email=agilicus.Email("foo@bar.com"),
62
+ type="user",
63
+ upstream_user_identites=identities,
64
+ )
65
+ ]
66
+ columns = column_builder.make_columns(
67
+ None,
68
+ results,
69
+ "[id,email,upstream_user_identities: [upstream_user_id,local_user_id]]",
70
+ )
71
+ assert len(columns) == 3
72
+ assert columns[2].in_name == "upstream_user_identities"
73
+ assert columns[2].out_name == "upstream_user_identities"
agilicus/users.py CHANGED
@@ -26,7 +26,6 @@ from .output.table import (
26
26
  spec_column,
27
27
  status_column,
28
28
  subtable,
29
- make_columns,
30
29
  )
31
30
 
32
31
  USERS_BASE_URI = "/users"
@@ -1189,26 +1188,3 @@ def format_user_orgs(ctx, orgs):
1189
1188
  ]
1190
1189
 
1191
1190
  return format_table(ctx, orgs, columns)
1192
-
1193
-
1194
- def format_users(
1195
- ctx,
1196
- users_list,
1197
- **kwargs,
1198
- ):
1199
- columns = make_columns(
1200
- ctx,
1201
- users_list,
1202
- [
1203
- "id",
1204
- "first_name",
1205
- "last_name",
1206
- "email",
1207
- "org_id",
1208
- "status",
1209
- "created",
1210
- "updated",
1211
- ],
1212
- **kwargs,
1213
- )
1214
- return format_table(ctx, users_list, columns, getter=operator.itemgetter)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: agilicus
3
- Version: 1.235.5
3
+ Version: 1.235.7
4
4
  Summary: Agilicus SDK
5
5
  Home-page: https://www.agilicus.com/
6
6
  License: MIT
@@ -67,9 +67,9 @@ agilicus/agilicus_api/api/users_api.py,sha256=LYBkMTRfpgSYHuFgFnkndHdJn9J__dGbqK
67
67
  agilicus/agilicus_api/api/users_api_mock.py,sha256=wA_xiqL3Pz3KjljKlsmf5NveLZS1FpbaKJHBp7QvarY,15411
68
68
  agilicus/agilicus_api/api/whoami_api.py,sha256=g871DyNxDhGWCmkr-jiMan9gsz9vf9CTkhZ_0VG5iuQ,7941
69
69
  agilicus/agilicus_api/api/whoami_api_mock.py,sha256=rlvZoWnMCqORMZBg7SOv6d3xp52kELdh6wXcCaIZ93w,346
70
- agilicus/agilicus_api/api_client.py,sha256=XwCXsmlpJKlNscQV6eOXDIOHeY2VrzOdJhvlAJHLYjc,38845
70
+ agilicus/agilicus_api/api_client.py,sha256=zByfZSGzpdL56Th5cUFUiz31gx_C8uDPiIj8XDo8cPo,38845
71
71
  agilicus/agilicus_api/apis/__init__.py,sha256=m_hg6OJsEsMp6mZ1mn9OlaTflLjrU3Jc-jvYD9gi_PA,2092
72
- agilicus/agilicus_api/configuration.py,sha256=sPyrZLcHiRqHuMzGTyhWm-6LEWh0FnzLbrlQPPi-s_Q,18447
72
+ agilicus/agilicus_api/configuration.py,sha256=N3olY94-AK3IiVFHCZwHYtguOXLAL_d2TgcBhFpeQ8k,18447
73
73
  agilicus/agilicus_api/docs/APIKey.md,sha256=4cKuz4_l9HcEDnUrLwYbEnn9C2WoDayrjfrY1Ixgaf4,1747
74
74
  agilicus/agilicus_api/docs/APIKeyIntrospect.md,sha256=nJ-zkuFm3JMbWFDYYN_vYyQk1snGBtBvIxtCQxamhAU,1019
75
75
  agilicus/agilicus_api/docs/APIKeyIntrospectAuthorizationInfo.md,sha256=7RApOOLjvWQs5sw2jb25g7i3Kta1BiEY-s8VRXfppH8,725
@@ -2338,7 +2338,7 @@ agilicus/agilicus_api/test/test_x509_root_certificate.py,sha256=Lfg4RqEI4LW1TcMv
2338
2338
  agilicus/agilicus_api/test/test_x509_root_certificate_spec.py,sha256=8rBBKZ1fEUFWalJ-Us0gW8YsEiQ0CvWx9rwvYXY2xSw,2832
2339
2339
  agilicus/agilicus_api/test/test_x509_root_certificate_status.py,sha256=sU8X_0AYylgIY7t39Eu1S_0EkxfJF25QBxIVOQlrwoU,2846
2340
2340
  agilicus/agilicus_api/test/test_xss_settings.py,sha256=e_pj73f8a6buA5B0cZgLV4Pu2BXUyfFmLLxVvW3I3Tw,2746
2341
- agilicus/agilicus_api_README.md,sha256=_NccAZ82qgsXLGC0UlWwnAN7kDw5eEaG3Riln7Dj3Wc,150199
2341
+ agilicus/agilicus_api_README.md,sha256=ZPZtB66boJs_i4YT5e-fFnWfGU-JV_fMFIcBFGvO8VE,150199
2342
2342
  agilicus/aliases.ini,sha256=MxqiVo2f2xdUDVF1YDkNW36AIqN8hrYjlTVfraEUZXY,455
2343
2343
  agilicus/amq.py,sha256=yxi-YTbJPVl10s78Hlr1dmrQR63iaSIoROGVILzFPmE,1775
2344
2344
  agilicus/apps.py,sha256=3j7Yj82S8hr4IHw2uzYiJ1-kOq_9PT1G0-0ZbxflAQ0,48757
@@ -2364,8 +2364,8 @@ agilicus/desktops.py,sha256=YdZlo5-MP9zNajfQ4xfoHOux1hKkcpnZZDAs3YjvMgU,10013
2364
2364
  agilicus/env_config.py,sha256=sqg9hecJYA7jXj58TmZOvmYboqIKbZ5Rxl2Rqe75M4Q,7629
2365
2365
  agilicus/examples/update_user.py,sha256=jGaEVTWFFlD26soSEYYcAtlGfELU85z3YnXAwK5q4fM,1082
2366
2366
  agilicus/features/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2367
- agilicus/features/features.py,sha256=cXhlp_HsKqGe5fg3gwanVMhRiBjs3tNd00ZChubWkQM,2246
2368
- agilicus/features/features_main.py,sha256=cSe5zRNu_da-jw_5-VOeNjo2gPRYpFXkyt2Dxa-MbrI,3160
2367
+ agilicus/features/features.py,sha256=nqxAo69Bn1zafBB2VbiCXixa17jWMrxN6V0u3iyqs0c,2327
2368
+ agilicus/features/features_main.py,sha256=InvXz-Eka6ySQAUM-u6KBkRPEY5lviHuZXeow5uqLto,3779
2369
2369
  agilicus/features.py,sha256=wnh3uD57xZRzt4aCYCrGXu4DaMKv2-uwZc3akUiXUYE,1118
2370
2370
  agilicus/file_shares.py,sha256=ZwO3OwfRsDTZu6VwDcvqyC5OeHWnoA9hQ8vzygXGeE8,4326
2371
2371
  agilicus/files.py,sha256=rgyUytII4LjsPdIIJVvqx8GnsUQmowDbGKK0VKGiglk,7272
@@ -2385,14 +2385,17 @@ agilicus/labels/labels_main.py,sha256=aXRNRT1CPiUc0x1Gh_VoCmzrbROzsC5e9ycrwPNT0q
2385
2385
  agilicus/launchers.py,sha256=Yy59dzHMCz9ZSs_mMjVGaTw3vdNX58WsmIfX56by69U,11077
2386
2386
  agilicus/logs.py,sha256=tS8c_sdre1Dncrl59GVGQ0L3d2jtwlVjvIMl3SHJraY,766
2387
2387
  agilicus/lookups.py,sha256=MNmNsKpP7Fq_poLAnL9xo_iptFilKM9ziGLyIe8VKaw,669
2388
- agilicus/main.py,sha256=RRuhTjZPNzGbJ_QEAnK12QYrwNOuYLfiXExGc66tcwQ,255174
2388
+ agilicus/main.py,sha256=MIkxsAQM3MB2xMP-toZ1iRlQZiXJuEPh7oxFUert3Mk,255835
2389
2389
  agilicus/messages.py,sha256=Ydm-VhAsK23UnYdstv_HsOybBODfui5ubKc7F8R_dsw,5187
2390
2390
  agilicus/metrics.py,sha256=9l0T7ea4Gvcj7A1C4uC4mv6v26_S8HKnmIuxJjq3mQw,1424
2391
2391
  agilicus/orgs.py,sha256=hrKmF8RI4H1htQNWPiwFOzy2EPBLdgNpV4c9CMxYSiM,12701
2392
2392
  agilicus/output/__init__.py,sha256=UKZbHS4t15vazJuN46FN-3HHqkxMXU0p3df2VcsSLcY,110
2393
+ agilicus/output/column_builder.py,sha256=TWo4t8ygaTUv7qjD_moDroD1bKzzyTIao0FmLy5gs4o,4284
2393
2394
  agilicus/output/console.py,sha256=xBURxlA7H1kmQ7zIKuifs_aQJq1cvmCJ5CtQVSo3_Ns,400
2394
2395
  agilicus/output/json.py,sha256=5UU8Fm_b46y8iu3EPkg2eWwdbCyubgCxIdfecDTd4_Y,663
2395
- agilicus/output/table.py,sha256=Qsao03onz1XKprD7s3FeFHUvggEstK0UYIVSBo2Fo-Y,9896
2396
+ agilicus/output/table.py,sha256=RzPMpaFPP5HP7h6LQSQF8nNnDBErJnOjosuCGiDS2jI,7542
2397
+ agilicus/output/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2398
+ agilicus/output/tests/column_builder_test.py,sha256=fKP4V5sqXtmEIr-Q0gWVSFdBqCUtugZkP6G5gML_T7I,2130
2396
2399
  agilicus/pagination/pagination.py,sha256=AG2DI6Kurv6akZ6lV2M3ynDtE8C4js5x3wCOVzasCuI,1576
2397
2400
  agilicus/patches.py,sha256=qTqLOgCAcFZPcPOkgfqMnK9bnqTXMvj_0ERsjRFcZug,1384
2398
2401
  agilicus/permissions.py,sha256=uB65yuDFICp1N10m0cdUjgizx9MQzAbLbAsBSTw1Rcc,2117
@@ -2416,11 +2419,11 @@ agilicus/tokens.py,sha256=PAqIE_9nLPEcXAGWP5g9WFAEiUelj56NPb4-gQEvTuA,15177
2416
2419
  agilicus/transfers.py,sha256=PYr_fW7dyXNUXzi5Wp5mUjZOvU7MbRzoN-D8Omo-YSQ,1523
2417
2420
  agilicus/trusted_certs/trusted_certs.py,sha256=HCAvYxOA3ooaee2_KbYJd6Yt_dxDEn8hjhy1upVJUYE,7951
2418
2421
  agilicus/trusted_certs/trusted_certs_main.py,sha256=6dHHWXvNIcUa_nA9ptigL4Vibe4nB2wnWFTTJ8AOgXo,5155
2419
- agilicus/users.py,sha256=X8BdmfyTwGGZRZi34HQomVPqCAPq0T45bZTUITt5bdc,39190
2422
+ agilicus/users.py,sha256=lT1EoyjwKjRoc0NoU6ANGHRSetN-t8AMgkllCKZP0UM,38746
2420
2423
  agilicus/version.py,sha256=G9OFdL1v_4dLDfk6I6taDNypM5bbO-JHAwilsu9LYgg,23
2421
2424
  agilicus/whoami.py,sha256=kqghtWMgZOd2rhKmfguDwCTm6A3gNS8Kj-S2IBxBtl0,206
2422
- agilicus-1.235.5.dist-info/LICENSE.txt,sha256=Zq4tqiCroC2CVrBB_PWjapRdvpae23nljdiaSkOzUho,1061
2423
- agilicus-1.235.5.dist-info/METADATA,sha256=cSg9u3lQPVI8XmcJdWcE7kJaN8YarPHA9IB7dGCEvs8,3742
2424
- agilicus-1.235.5.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
2425
- agilicus-1.235.5.dist-info/entry_points.txt,sha256=a66hGozzLkHu0IewFzIMbSAhMTNTddUaA2T3_16Gb_s,51
2426
- agilicus-1.235.5.dist-info/RECORD,,
2425
+ agilicus-1.235.7.dist-info/LICENSE.txt,sha256=Zq4tqiCroC2CVrBB_PWjapRdvpae23nljdiaSkOzUho,1061
2426
+ agilicus-1.235.7.dist-info/METADATA,sha256=5kIvoRTQYYlA8PeqFzf4hi6dilXYLkKy6INVmDxj4uM,3742
2427
+ agilicus-1.235.7.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
2428
+ agilicus-1.235.7.dist-info/entry_points.txt,sha256=a66hGozzLkHu0IewFzIMbSAhMTNTddUaA2T3_16Gb_s,51
2429
+ agilicus-1.235.7.dist-info/RECORD,,