Skip to content

Commit 540518a

Browse files
committed
fix privileges issue
1 parent 81ce40e commit 540518a

3 files changed

Lines changed: 76 additions & 64 deletions

File tree

src/mistapi/__api_session.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -948,11 +948,7 @@ def get_privilege_by_org_id(self, org_id: str):
948948
"""
949949
logger.debug("apisession:get_privilege_by_org_id")
950950
org_priv = next(
951-
(
952-
priv
953-
for priv in self.privileges.privileges
954-
if priv.get("org_id") == org_id
955-
),
951+
(priv for priv in self.privileges if priv.get("org_id") == org_id),
956952
None,
957953
)
958954
if org_priv:
@@ -1001,7 +997,7 @@ def get_privilege_by_org_id(self, org_id: str):
1001997
msp_priv = next(
1002998
(
1003999
priv
1004-
for priv in self.privileges.privileges
1000+
for priv in self.privileges
10051001
if priv.get("scope") == "msp" and priv.get("msp_id") == msp_id
10061002
),
10071003
None,

src/mistapi/__models/privilege.py

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,8 @@
1-
from typing import Any
1+
from typing import Any, Iterator
22

33
from tabulate import tabulate
44

55

6-
class Privileges:
7-
def __init__(self, privileges: list[dict]) -> None:
8-
self.privileges: list[_Privilege] = []
9-
for privilege in privileges:
10-
self.privileges.append(_Privilege(privilege))
11-
12-
def __str__(self) -> str:
13-
columns_headers = [
14-
"scope",
15-
"role",
16-
"name",
17-
"site_id",
18-
"org_name",
19-
"org_id",
20-
"msp_name",
21-
"msp_id",
22-
"views",
23-
]
24-
table = []
25-
for entry in self.privileges:
26-
temp = []
27-
for field in columns_headers:
28-
if hasattr(entry, field):
29-
temp.append(str(getattr(entry, field)))
30-
else:
31-
temp.append("")
32-
table.append(temp)
33-
return tabulate(table, columns_headers)
34-
35-
def display(self):
36-
return str(self)
37-
38-
396
class _Privilege:
407
def __init__(self, privilege) -> None:
418
self.scope: str = ""
@@ -77,3 +44,42 @@ def get(self, key: str, default: Any | None = None) -> Any:
7744
return getattr(self, key)
7845
else:
7946
return default
47+
48+
49+
class Privileges:
50+
def __init__(self, privileges: list[dict]) -> None:
51+
self.privileges: list[_Privilege] = []
52+
for privilege in privileges:
53+
self.privileges.append(_Privilege(privilege))
54+
55+
def __iter__(self) -> Iterator[_Privilege]:
56+
"""Return an iterator over the privileges."""
57+
if not self.privileges:
58+
return iter([])
59+
return iter(self.privileges)
60+
61+
def __str__(self) -> str:
62+
columns_headers = [
63+
"scope",
64+
"role",
65+
"name",
66+
"site_id",
67+
"org_name",
68+
"org_id",
69+
"msp_name",
70+
"msp_id",
71+
"views",
72+
]
73+
table = []
74+
for entry in self.privileges:
75+
temp = []
76+
for field in columns_headers:
77+
if hasattr(entry, field):
78+
temp.append(str(getattr(entry, field)))
79+
else:
80+
temp.append("")
81+
table.append(temp)
82+
return tabulate(table, columns_headers)
83+
84+
def display(self):
85+
return str(self)

src/mistapi/cli.py

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import mistapi
2121
from mistapi.__api_response import APIResponse as _APIResponse
2222
from mistapi.__logger import console
23+
from mistapi.__models.privilege import Privileges
2324

2425

2526
###########################################
@@ -63,7 +64,7 @@ def wrapper(*args, **kwargs):
6364

6465
###########################################
6566
#### CLI SELECTIONS
66-
def _forge_privileges(mist_session: mistapi.APISession, msp_id: str):
67+
def _forge_privileges(mist_session: mistapi.APISession, msp_id: str) -> Privileges:
6768
"""
6869
Function to generate user privileges for Orgs belonging to a MSP Account
6970
@@ -84,11 +85,11 @@ def _forge_privileges(mist_session: mistapi.APISession, msp_id: str):
8485
custom_privileges = []
8586
for org in orgs:
8687
custom_privileges.append(mist_session.get_privilege_by_org_id(org["id"]))
87-
return custom_privileges
88+
return Privileges(custom_privileges)
8889

8990

9091
@is_authenticated
91-
def _select_msp(mist_session: mistapi.APISession) -> list:
92+
def _select_msp(mist_session: mistapi.APISession) -> Privileges:
9293
"""
9394
Function to list all the Mist MSPs allowed for the current user
9495
and ask to pick one. Return the list org ORG privileges based
@@ -105,12 +106,10 @@ def _select_msp(mist_session: mistapi.APISession) -> list:
105106
List of ORG privileges
106107
"""
107108
msp_accounts = [
108-
priv
109-
for priv in mist_session.privileges.privileges
110-
if priv.get("scope") == "msp"
109+
priv for priv in mist_session.privileges if priv.get("scope") == "msp"
111110
]
112111
if len(msp_accounts) == 0:
113-
return mist_session.privileges.privileges
112+
return mist_session.privileges
114113
else:
115114
msp_accounts = sorted(msp_accounts, key=lambda x: x.get("name").lower())
116115
while True:
@@ -128,16 +127,16 @@ def _select_msp(mist_session: mistapi.APISession) -> list:
128127
if resp == "q":
129128
sys.exit(0)
130129
elif resp.lower() == "n":
131-
standalone = []
132-
for priv in mist_session.privileges.privileges:
130+
standalone: list = []
131+
for priv in mist_session.privileges:
133132
msp = [
134133
msp
135134
for msp in msp_accounts
136135
if msp.get("msp_id") == priv.get("msp_id", "xyz")
137136
]
138137
if not msp:
139138
standalone.append(priv)
140-
return standalone
139+
return Privileges(standalone)
141140
# return [priv for priv in mist_session.privileges if not priv.get("msp_id")]
142141
else:
143142
tested_val = _test_choice(resp, i)
@@ -172,41 +171,52 @@ def select_org(mist_session: mistapi.APISession, allow_many=False) -> list:
172171
"""
173172
data = _select_msp(mist_session)
174173
data = [d for d in data if d.get("name")]
175-
data = sorted(data, key=lambda x: x["name"].lower())
174+
data = sorted(data, key=lambda x: x.get("name").lower())
176175
while True:
177176
i = -1
178177
org_ids: list[str] = []
179178
resp_ids: list[str] = []
180179
print("\r\nAvailable organizations:")
181180
for privilege in data:
182-
if privilege["scope"] == "org" and privilege["org_id"] not in org_ids:
181+
if (
182+
privilege.get("scope") == "org"
183+
and privilege.get("org_id") not in org_ids
184+
):
183185
i += 1
184-
org_ids.append(privilege["org_id"])
185-
print(f"{i}) {privilege['name']} (id: {privilege['org_id']})")
186+
org_ids.append(privilege.get("org_id"))
187+
print(f"{i}) {privilege.get('name')} (id: {privilege.get('org_id')})")
186188

187189
orgs_with_sites: list[dict] = []
188190
for privilege in data:
189-
if privilege["scope"] == "site" and privilege["org_id"] not in org_ids:
190-
index = _search_org(orgs_with_sites, privilege["org_id"])
191+
if (
192+
privilege.get("scope") == "site"
193+
and privilege.get("org_id") not in org_ids
194+
):
195+
index = _search_org(orgs_with_sites, privilege.get("org_id"))
191196
if index is None:
192197
i += 1
193-
org_ids.append(privilege["org_id"])
194-
print(f"{i}) {privilege['name']} (id: {privilege['org_id']})")
198+
org_ids.append(privilege.get("org_id"))
199+
print(
200+
f"{i}) {privilege.get('name')} (id: {privilege.get('org_id')})"
201+
)
195202
orgs_with_sites.append(
196203
{
197-
"org_id": privilege["org_id"],
198-
"name": privilege["name"],
204+
"org_id": privilege.get("org_id"),
205+
"name": privilege.get("name"),
199206
"sites": [
200207
{
201-
"site_id": privilege["site_id"],
202-
"name": privilege["name"],
208+
"site_id": privilege.get("site_id"),
209+
"name": privilege.get("name"),
203210
}
204211
],
205212
}
206213
)
207214
else:
208215
orgs_with_sites[index]["sites"].append(
209-
{"site_id": privilege["site_id"], "name": privilege["name"]}
216+
{
217+
"site_id": privilege.get("site_id"),
218+
"name": privilege.get("name"),
219+
}
210220
)
211221

212222
if allow_many:
@@ -273,7 +283,7 @@ def select_site(
273283
if org_id is None:
274284
org_id = select_org(mist_session)[0]
275285

276-
for privilege in mist_session.privileges.privileges:
286+
for privilege in mist_session.privileges:
277287
if privilege.get("scope") == "org" and privilege.get("org_id") == org_id:
278288
org_access = True
279289
if privilege.get("scope") == "site" and privilege.get("org_id") == org_id:

0 commit comments

Comments
 (0)