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

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,,