reverse-diagrams 0.2.5__tar.gz → 0.2.6__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.
- reverse_diagrams-0.2.6/.github/workflows/publish-to-test-pypi.yml +117 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/PKG-INFO +2 -3
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/pyproject.toml +5 -2
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/src/aws/describe_identity_store.py +59 -1
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/src/dgms/graph_mapper.py +2 -2
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/src/reverse_diagrams.py +1 -1
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/.gitignore +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/LICENSE +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/README.md +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/__init__.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/docs/graph_org.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/docs/graph_sso.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/docs/graph_sso_complete.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/docs/images/organizations-state-copy.png +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/iam_identity_center.png +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/src/__init__.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/src/aws/__init__.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/src/aws/describe_organization.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/src/aws/describe_sso.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/src/banner/__init__.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/src/banner/banner.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/src/dgms/__init__.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/src/dgms/graph_template.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/src/export_report/export_csv.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/test.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/test2.py +0 -0
- {reverse_diagrams-0.2.5 → reverse_diagrams-0.2.6}/testdata.txt +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI
|
|
2
|
+
|
|
3
|
+
on: push
|
|
4
|
+
|
|
5
|
+
jobs:
|
|
6
|
+
build:
|
|
7
|
+
name: Build distribution 📦
|
|
8
|
+
runs-on: ubuntu-latest
|
|
9
|
+
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
- name: Set up Python
|
|
13
|
+
uses: actions/setup-python@v4
|
|
14
|
+
with:
|
|
15
|
+
python-version: "3.x"
|
|
16
|
+
- name: Install pypa/build
|
|
17
|
+
run: >-
|
|
18
|
+
python3 -m
|
|
19
|
+
pip install
|
|
20
|
+
build
|
|
21
|
+
--user
|
|
22
|
+
- name: Build a binary wheel and a source tarball
|
|
23
|
+
run: python3 -m build
|
|
24
|
+
- name: Store the distribution packages
|
|
25
|
+
uses: actions/upload-artifact@v3
|
|
26
|
+
with:
|
|
27
|
+
name: python-package-distributions
|
|
28
|
+
path: dist/
|
|
29
|
+
|
|
30
|
+
publish-to-pypi:
|
|
31
|
+
name: >-
|
|
32
|
+
Publish Python 🐍 distribution 📦 to PyPI
|
|
33
|
+
if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes
|
|
34
|
+
needs:
|
|
35
|
+
- build
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
environment:
|
|
38
|
+
name: pypi
|
|
39
|
+
url: https://pypi.org/p/reverse-diagrams # Replace reverse-diagrams with your PyPI project name
|
|
40
|
+
permissions:
|
|
41
|
+
id-token: write # IMPORTANT: mandatory for trusted publishing
|
|
42
|
+
|
|
43
|
+
steps:
|
|
44
|
+
- name: Download all the dists
|
|
45
|
+
uses: actions/download-artifact@v3
|
|
46
|
+
with:
|
|
47
|
+
name: python-package-distributions
|
|
48
|
+
path: dist/
|
|
49
|
+
- name: Publish distribution 📦 to PyPI
|
|
50
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
51
|
+
|
|
52
|
+
github-release:
|
|
53
|
+
name: >-
|
|
54
|
+
Sign the Python 🐍 distribution 📦 with Sigstore
|
|
55
|
+
and upload them to GitHub Release
|
|
56
|
+
needs:
|
|
57
|
+
- publish-to-pypi
|
|
58
|
+
runs-on: ubuntu-latest
|
|
59
|
+
|
|
60
|
+
permissions:
|
|
61
|
+
contents: write # IMPORTANT: mandatory for making GitHub Releases
|
|
62
|
+
id-token: write # IMPORTANT: mandatory for sigstore
|
|
63
|
+
|
|
64
|
+
steps:
|
|
65
|
+
- name: Download all the dists
|
|
66
|
+
uses: actions/download-artifact@v3
|
|
67
|
+
with:
|
|
68
|
+
name: python-package-distributions
|
|
69
|
+
path: dist/
|
|
70
|
+
- name: Sign the dists with Sigstore
|
|
71
|
+
uses: sigstore/gh-action-sigstore-python@v1.2.3
|
|
72
|
+
with:
|
|
73
|
+
inputs: >-
|
|
74
|
+
./dist/*.tar.gz
|
|
75
|
+
./dist/*.whl
|
|
76
|
+
- name: Create GitHub Release
|
|
77
|
+
env:
|
|
78
|
+
GITHUB_TOKEN: ${{ github.token }}
|
|
79
|
+
run: >-
|
|
80
|
+
gh release create
|
|
81
|
+
'${{ github.ref_name }}'
|
|
82
|
+
--repo '${{ github.repository }}'
|
|
83
|
+
--notes ""
|
|
84
|
+
- name: Upload artifact signatures to GitHub Release
|
|
85
|
+
env:
|
|
86
|
+
GITHUB_TOKEN: ${{ github.token }}
|
|
87
|
+
# Upload to GitHub Release using the `gh` CLI.
|
|
88
|
+
# `dist/` contains the built packages, and the
|
|
89
|
+
# sigstore-produced signatures and certificates.
|
|
90
|
+
run: >-
|
|
91
|
+
gh release upload
|
|
92
|
+
'${{ github.ref_name }}' dist/**
|
|
93
|
+
--repo '${{ github.repository }}'
|
|
94
|
+
|
|
95
|
+
publish-to-testpypi:
|
|
96
|
+
name: Publish Python 🐍 distribution 📦 to TestPyPI
|
|
97
|
+
needs:
|
|
98
|
+
- build
|
|
99
|
+
runs-on: ubuntu-latest
|
|
100
|
+
|
|
101
|
+
environment:
|
|
102
|
+
name: testpypi
|
|
103
|
+
url: https://test.pypi.org/p/reverse-diagrams
|
|
104
|
+
|
|
105
|
+
permissions:
|
|
106
|
+
id-token: write # IMPORTANT: mandatory for trusted publishing
|
|
107
|
+
|
|
108
|
+
steps:
|
|
109
|
+
- name: Download all the dists
|
|
110
|
+
uses: actions/download-artifact@v3
|
|
111
|
+
with:
|
|
112
|
+
name: python-package-distributions
|
|
113
|
+
path: dist/
|
|
114
|
+
- name: Publish distribution 📦 to TestPyPI
|
|
115
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
116
|
+
with:
|
|
117
|
+
repository-url: https://test.pypi.org/legacy/
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: reverse_diagrams
|
|
3
|
-
Version: 0.2.
|
|
4
|
-
Summary: Continuous Documentation Tool - Documentation as Code Tool -
|
|
5
|
-
This package create reverse diagrams based on your current state in your cloud environment
|
|
3
|
+
Version: 0.2.6
|
|
4
|
+
Summary: Continuous Documentation Tool - Documentation as Code Tool - This package create reverse diagrams based on your current state in your cloud environment
|
|
6
5
|
Project-URL: Homepage, https://github.com/velez94/reverse_diagrams
|
|
7
6
|
Project-URL: Bug Tracker, https://github.com/velez94/reverse_diagrams/issues
|
|
8
7
|
Author-email: Alejandro Velez <avelez@labvel.io>
|
|
@@ -7,7 +7,7 @@ build-backend = "hatchling.build"
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "reverse_diagrams"
|
|
10
|
-
version = "0.2.
|
|
10
|
+
version = "0.2.6"
|
|
11
11
|
authors = [
|
|
12
12
|
{ name = "Alejandro Velez", email = "avelez@labvel.io" },
|
|
13
13
|
]
|
|
@@ -36,4 +36,7 @@ classifiers = [
|
|
|
36
36
|
"Bug Tracker" = "https://github.com/velez94/reverse_diagrams/issues"
|
|
37
37
|
|
|
38
38
|
[project.scripts]
|
|
39
|
-
reverse_diagrams = "src.reverse_diagrams:main"
|
|
39
|
+
reverse_diagrams = "src.reverse_diagrams:main"
|
|
40
|
+
|
|
41
|
+
[tool.hatch.build.targets.wheel]
|
|
42
|
+
packages = ["src"]
|
|
@@ -49,24 +49,82 @@ def list_users(identity_store_id, client=boto3.client('identitystore', region_na
|
|
|
49
49
|
return response["Users"]
|
|
50
50
|
|
|
51
51
|
|
|
52
|
+
def get_members_pag(identity_store_id, client=boto3.client('identitystore', region_name="us-east-2"),
|
|
53
|
+
next_token: str = None):
|
|
54
|
+
paginator = client.get_paginator('list_group_memberships')
|
|
55
|
+
response_iterator = paginator.paginate(
|
|
56
|
+
IdentityStoreId=identity_store_id,
|
|
57
|
+
PaginationConfig={
|
|
58
|
+
'MaxItems': 1000,
|
|
59
|
+
'PageSize': 4,
|
|
60
|
+
'StartingToken': next_token
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
response = response_iterator.build_full_result()
|
|
64
|
+
logging.info(response_iterator.build_full_result())
|
|
65
|
+
return response["GroupMemberships"]
|
|
66
|
+
|
|
67
|
+
|
|
52
68
|
def get_members(identity_store_id, groups, client=boto3.client('identitystore', region_name="us-east-2")):
|
|
53
69
|
group_members = []
|
|
54
70
|
for g in groups:
|
|
55
71
|
response = client.list_group_memberships(
|
|
56
72
|
IdentityStoreId=identity_store_id,
|
|
57
73
|
GroupId=g["GroupId"],
|
|
74
|
+
MaxResults=20,
|
|
58
75
|
|
|
59
76
|
)
|
|
77
|
+
members = response["GroupMemberships"]
|
|
78
|
+
logging.info(members)
|
|
79
|
+
|
|
80
|
+
logging.info(len(members))
|
|
81
|
+
|
|
82
|
+
if len(members) >= 20:
|
|
83
|
+
logging.info("Paginating ...")
|
|
84
|
+
ad_members = get_members_pag(identity_store_id=identity_store_id, client=client,
|
|
85
|
+
next_token=response["NextToken"])
|
|
86
|
+
for ad in ad_members:
|
|
87
|
+
members.append(ad)
|
|
88
|
+
logging.info(f"You have {len(ad_members)} Members")
|
|
89
|
+
print(f"You have {len(ad_members)} Members")
|
|
90
|
+
|
|
60
91
|
group_members.append(
|
|
61
92
|
{"group_id": g["GroupId"],
|
|
62
93
|
"group_name": g["DisplayName"],
|
|
63
|
-
"members":
|
|
94
|
+
"members": members
|
|
64
95
|
}
|
|
65
96
|
)
|
|
66
97
|
|
|
67
98
|
return group_members
|
|
68
99
|
|
|
69
100
|
|
|
101
|
+
def list_group_memberships(identitystore_client, group_name, pagination=True):
|
|
102
|
+
"""
|
|
103
|
+
Lists memberships for a group in an AWS SSO identity store.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
identitystore_client (boto3.client): Boto3 SSO identity store client
|
|
107
|
+
group_name (str): Name of the group to list memberships for
|
|
108
|
+
pagination (bool): Whether to enable result pagination (default: True)
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
list: List of member objects
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
params = {'GroupName': group_name}
|
|
115
|
+
members = []
|
|
116
|
+
|
|
117
|
+
if pagination:
|
|
118
|
+
paginator = identitystore_client.get_paginator('list_group_memberships')
|
|
119
|
+
for page in paginator.paginate(**params):
|
|
120
|
+
members.extend(page['Members'])
|
|
121
|
+
else:
|
|
122
|
+
response = identitystore_client.list_group_memberships(**params)
|
|
123
|
+
members.extend(response['Members'])
|
|
124
|
+
|
|
125
|
+
return members
|
|
126
|
+
|
|
127
|
+
|
|
70
128
|
def complete_group_members(group_members, users_list):
|
|
71
129
|
for m in group_members:
|
|
72
130
|
for u in m["members"]:
|
|
@@ -26,9 +26,9 @@ def create_sso_mapper_complete(template_file, acc_assignments, d_groups):
|
|
|
26
26
|
ident = " "
|
|
27
27
|
|
|
28
28
|
for key, value in acc_assignments.items():
|
|
29
|
-
print(f"\n with Cluster('Account: {key}'):", file=f)
|
|
30
|
-
if len(value) > 0:
|
|
31
29
|
|
|
30
|
+
if len(value) > 0:
|
|
31
|
+
print(f"\n with Cluster('Account: {key}'):", file=f)
|
|
32
32
|
for m in value:
|
|
33
33
|
logging.debug(m)
|
|
34
34
|
|
|
@@ -15,7 +15,7 @@ from .dgms.graph_mapper import create_mapper, create_sso_mapper_complete, create
|
|
|
15
15
|
from .dgms.graph_template import graph_template, graph_template_sso, graph_template_sso_complete
|
|
16
16
|
from .banner.banner import get_version
|
|
17
17
|
|
|
18
|
-
__version__ = "0.2.
|
|
18
|
+
__version__ = "0.2.4"
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
def main() -> int:
|
|
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
|