osi-dump 0.1.3.3.4.3__py3-none-any.whl → 0.1.4__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.
Files changed (102) hide show
  1. osi_dump/__main__.py +4 -4
  2. osi_dump/api/keystone.py +70 -70
  3. osi_dump/api/neutron.py +65 -65
  4. osi_dump/api/octavia.py +94 -94
  5. osi_dump/api/placement.py +41 -41
  6. osi_dump/batch_handler/__init__.py +6 -5
  7. osi_dump/batch_handler/external_port_batch_handler.py +55 -55
  8. osi_dump/batch_handler/flavor_batch_handler.py +51 -51
  9. osi_dump/batch_handler/floating_ip_batch_handler.py +57 -57
  10. osi_dump/batch_handler/hypervisor_batch_handler.py +55 -55
  11. osi_dump/batch_handler/image_batch_handler.py +51 -51
  12. osi_dump/batch_handler/instance_batch_handler.py +46 -54
  13. osi_dump/batch_handler/load_balancer_batch_handler.py +59 -59
  14. osi_dump/batch_handler/network_batch_handler.py +51 -51
  15. osi_dump/batch_handler/project_batch_handler.py +51 -51
  16. osi_dump/batch_handler/role_assignment_batch_handler.py +38 -61
  17. osi_dump/batch_handler/router_batch_handler.py +49 -49
  18. osi_dump/batch_handler/security_group_batch_handler.py +37 -0
  19. osi_dump/batch_handler/volume_batch_handler.py +45 -45
  20. osi_dump/cli.py +267 -257
  21. osi_dump/exporter/external_port/excel_external_port_exporter.py +34 -34
  22. osi_dump/exporter/external_port/external_port_exporter.py +7 -7
  23. osi_dump/exporter/flavor/excel_flavor_exporter.py +30 -30
  24. osi_dump/exporter/flavor/flavor_exporter.py +7 -7
  25. osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py +30 -30
  26. osi_dump/exporter/floating_ip/floating_ip_exporter.py +7 -7
  27. osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py +32 -32
  28. osi_dump/exporter/hypervisor/hypervisor_exporter.py +7 -7
  29. osi_dump/exporter/image/excel_image_exporter.py +28 -28
  30. osi_dump/exporter/image/image_exporter.py +7 -7
  31. osi_dump/exporter/instance/excel_instance_exporter.py +29 -29
  32. osi_dump/exporter/instance/instance_exporter.py +8 -7
  33. osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py +36 -36
  34. osi_dump/exporter/load_balancer/load_balancer_exporter.py +7 -7
  35. osi_dump/exporter/network/excel_network_exporter.py +32 -32
  36. osi_dump/exporter/network/network_exporter.py +7 -7
  37. osi_dump/exporter/project/excel_project_exporter.py +30 -30
  38. osi_dump/exporter/project/project_exporter.py +7 -7
  39. osi_dump/exporter/role_assignment/excel_role_assignment_exporter.py +43 -35
  40. osi_dump/exporter/role_assignment/role_assignment_exporter.py +7 -7
  41. osi_dump/exporter/router/excel_router_exporter.py +30 -30
  42. osi_dump/exporter/router/router_exporter.py +7 -7
  43. osi_dump/exporter/security_group/excel_security_group_exporter.py +35 -0
  44. osi_dump/exporter/security_group/security_group_exporter.py +8 -0
  45. osi_dump/exporter/volume/excel_volume_exporter.py +29 -29
  46. osi_dump/exporter/volume/volume_exporter.py +7 -7
  47. osi_dump/importer/external_port/external_port_importer.py +9 -9
  48. osi_dump/importer/external_port/openstack_external_port_importer.py +177 -177
  49. osi_dump/importer/flavor/flavor_importer.py +9 -9
  50. osi_dump/importer/flavor/openstack_flavor_importer.py +64 -64
  51. osi_dump/importer/floating_ip/floating_ip_importer.py +9 -9
  52. osi_dump/importer/floating_ip/openstack_floating_ip_importer.py +68 -68
  53. osi_dump/importer/hypervisor/hypervisor_importer.py +9 -9
  54. osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +137 -137
  55. osi_dump/importer/image/image_importer.py +9 -9
  56. osi_dump/importer/image/openstack_image_importer.py +81 -81
  57. osi_dump/importer/instance/instance_importer.py +8 -9
  58. osi_dump/importer/instance/openstack_instance_importer.py +136 -136
  59. osi_dump/importer/load_balancer/load_balancer_importer.py +9 -9
  60. osi_dump/importer/load_balancer/openstack_load_balancer_importer.py +113 -113
  61. osi_dump/importer/network/network_importer.py +9 -9
  62. osi_dump/importer/network/openstack_network_importer.py +93 -93
  63. osi_dump/importer/project/openstack_project_importer.py +141 -141
  64. osi_dump/importer/project/project_importer.py +9 -9
  65. osi_dump/importer/role_assignment/openstack_role_assignment_importer.py +117 -147
  66. osi_dump/importer/role_assignment/role_assignment_importer.py +16 -9
  67. osi_dump/importer/router/openstack_router_importer.py +87 -87
  68. osi_dump/importer/router/router_importer.py +9 -9
  69. osi_dump/importer/security_group/openstack_security_group_importer.py +54 -0
  70. osi_dump/importer/security_group/security_group_importer.py +8 -0
  71. osi_dump/importer/volume/openstack_volume_importer.py +81 -81
  72. osi_dump/importer/volume/volume_importer.py +9 -9
  73. osi_dump/model/authentication_info.py +15 -15
  74. osi_dump/model/external_port.py +30 -30
  75. osi_dump/model/flavor.py +20 -20
  76. osi_dump/model/floating_ip.py +24 -24
  77. osi_dump/model/hypervisor.py +24 -24
  78. osi_dump/model/image.py +27 -27
  79. osi_dump/model/instance.py +29 -29
  80. osi_dump/model/load_balancer.py +26 -26
  81. osi_dump/model/network.py +25 -25
  82. osi_dump/model/project.py +33 -33
  83. osi_dump/model/role_assignment.py +30 -23
  84. osi_dump/model/router.py +23 -23
  85. osi_dump/model/security_group.py +22 -0
  86. osi_dump/model/volume.py +25 -25
  87. osi_dump/os_connection/get_connections.py +67 -67
  88. osi_dump/util/__init__.py +7 -7
  89. osi_dump/util/create_file.py +11 -11
  90. osi_dump/util/excel_autosize_column.py +39 -39
  91. osi_dump/util/excel_sort_sheet.py +35 -35
  92. osi_dump/util/export_data_excel.py +36 -36
  93. osi_dump/util/extract_hostname.py +5 -5
  94. osi_dump/util/openstack_util.py +48 -48
  95. osi_dump/util/panda_excel.py +26 -26
  96. osi_dump/util/validate_dir_path.py +20 -20
  97. {osi_dump-0.1.3.3.4.3.dist-info → osi_dump-0.1.4.dist-info}/METADATA +40 -40
  98. osi_dump-0.1.4.dist-info/RECORD +130 -0
  99. osi_dump-0.1.3.3.4.3.dist-info/RECORD +0 -124
  100. {osi_dump-0.1.3.3.4.3.dist-info → osi_dump-0.1.4.dist-info}/WHEEL +0 -0
  101. {osi_dump-0.1.3.3.4.3.dist-info → osi_dump-0.1.4.dist-info}/entry_points.txt +0 -0
  102. {osi_dump-0.1.3.3.4.3.dist-info → osi_dump-0.1.4.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
- from abc import ABC, abstractmethod
2
-
3
-
4
- class FlavorExporter(ABC):
5
- @abstractmethod
6
- def export_flavors(self, flavors, output_file: str):
7
- pass
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class FlavorExporter(ABC):
5
+ @abstractmethod
6
+ def export_flavors(self, flavors, output_file: str):
7
+ pass
@@ -1,30 +1,30 @@
1
- import logging
2
-
3
- from openpyxl import load_workbook
4
- import pandas as pd
5
-
6
-
7
- from osi_dump.exporter.floating_ip.floating_ip_exporter import FloatingIPExporter
8
-
9
- from osi_dump.model.floating_ip import FloatingIP
10
-
11
- from osi_dump import util
12
-
13
- logger = logging.getLogger(__name__)
14
-
15
-
16
- class ExcelFloatingIPExporter(FloatingIPExporter):
17
- def __init__(self, sheet_name: str, output_file: str):
18
- self.sheet_name = sheet_name
19
- self.output_file = output_file
20
-
21
- def export_floating_ips(self, floating_ips: list[FloatingIP]):
22
- df = pd.DataFrame([floating_ip.model_dump() for floating_ip in floating_ips])
23
-
24
- logger.info(f"Exporting floating ips for {self.sheet_name}")
25
- try:
26
- util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
27
-
28
- logger.info(f"Exported floating ips for {self.sheet_name}")
29
- except Exception as e:
30
- logger.warning(f"Exporting floating ips for {self.sheet_name} error: {e}")
1
+ import logging
2
+
3
+ from openpyxl import load_workbook
4
+ import pandas as pd
5
+
6
+
7
+ from osi_dump.exporter.floating_ip.floating_ip_exporter import FloatingIPExporter
8
+
9
+ from osi_dump.model.floating_ip import FloatingIP
10
+
11
+ from osi_dump import util
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+
16
+ class ExcelFloatingIPExporter(FloatingIPExporter):
17
+ def __init__(self, sheet_name: str, output_file: str):
18
+ self.sheet_name = sheet_name
19
+ self.output_file = output_file
20
+
21
+ def export_floating_ips(self, floating_ips: list[FloatingIP]):
22
+ df = pd.DataFrame([floating_ip.model_dump() for floating_ip in floating_ips])
23
+
24
+ logger.info(f"Exporting floating ips for {self.sheet_name}")
25
+ try:
26
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
27
+
28
+ logger.info(f"Exported floating ips for {self.sheet_name}")
29
+ except Exception as e:
30
+ logger.warning(f"Exporting floating ips for {self.sheet_name} error: {e}")
@@ -1,7 +1,7 @@
1
- from abc import ABC, abstractmethod
2
-
3
-
4
- class FloatingIPExporter(ABC):
5
- @abstractmethod
6
- def export_floating_ips(self, floating_ips, output_file: str):
7
- pass
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class FloatingIPExporter(ABC):
5
+ @abstractmethod
6
+ def export_floating_ips(self, floating_ips, output_file: str):
7
+ pass
@@ -1,32 +1,32 @@
1
- import logging
2
-
3
- from openpyxl import load_workbook
4
- import pandas as pd
5
-
6
-
7
- from osi_dump.exporter.hypervisor.hypervisor_exporter import HypervisorExporter
8
-
9
- from osi_dump.model.hypervisor import Hypervisor
10
-
11
- from osi_dump import util
12
-
13
- logger = logging.getLogger(__name__)
14
-
15
-
16
- class ExcelHypervisorExporter(HypervisorExporter):
17
- def __init__(self, sheet_name: str, output_file: str):
18
- self.sheet_name = sheet_name
19
- self.output_file = output_file
20
-
21
- def export_hypervisors(self, hypervisors: list[Hypervisor]):
22
- df = pd.DataFrame([hypervisor.model_dump() for hypervisor in hypervisors])
23
-
24
- df = util.expand_list_column(df, "aggregates")
25
-
26
- logger.info(f"Exporting hypervisors for {self.sheet_name}")
27
- try:
28
- util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
29
-
30
- logger.info(f"Exported hypervisors for {self.sheet_name}")
31
- except Exception as e:
32
- logger.warning(f"Exporting hypervisors for {self.sheet_name} error: {e}")
1
+ import logging
2
+
3
+ from openpyxl import load_workbook
4
+ import pandas as pd
5
+
6
+
7
+ from osi_dump.exporter.hypervisor.hypervisor_exporter import HypervisorExporter
8
+
9
+ from osi_dump.model.hypervisor import Hypervisor
10
+
11
+ from osi_dump import util
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+
16
+ class ExcelHypervisorExporter(HypervisorExporter):
17
+ def __init__(self, sheet_name: str, output_file: str):
18
+ self.sheet_name = sheet_name
19
+ self.output_file = output_file
20
+
21
+ def export_hypervisors(self, hypervisors: list[Hypervisor]):
22
+ df = pd.DataFrame([hypervisor.model_dump() for hypervisor in hypervisors])
23
+
24
+ df = util.expand_list_column(df, "aggregates")
25
+
26
+ logger.info(f"Exporting hypervisors for {self.sheet_name}")
27
+ try:
28
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
29
+
30
+ logger.info(f"Exported hypervisors for {self.sheet_name}")
31
+ except Exception as e:
32
+ logger.warning(f"Exporting hypervisors for {self.sheet_name} error: {e}")
@@ -1,7 +1,7 @@
1
- from abc import ABC, abstractmethod
2
-
3
-
4
- class HypervisorExporter(ABC):
5
- @abstractmethod
6
- def export_hypervisors(self, hypervisors, output_file: str):
7
- pass
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class HypervisorExporter(ABC):
5
+ @abstractmethod
6
+ def export_hypervisors(self, hypervisors, output_file: str):
7
+ pass
@@ -1,28 +1,28 @@
1
- import pandas as pd
2
-
3
- import logging
4
-
5
-
6
- from osi_dump import util
7
- from osi_dump.exporter.image.image_exporter import ImageExporter
8
-
9
- from osi_dump.model.image import Image
10
-
11
- logger = logging.getLogger(__name__)
12
-
13
-
14
- class ExcelImageExporter(ImageExporter):
15
- def __init__(self, sheet_name: str, output_file: str):
16
- self.sheet_name = sheet_name
17
- self.output_file = output_file
18
-
19
- def export_images(self, images: list[Image]):
20
- df = pd.json_normalize([image.model_dump() for image in images])
21
-
22
- logger.info(f"Exporting images for {self.sheet_name}")
23
- try:
24
- util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
25
-
26
- logger.info(f"Exported images for {self.sheet_name}")
27
- except Exception as e:
28
- logger.warning(f"Exporting images for {self.sheet_name} error: {e}")
1
+ import pandas as pd
2
+
3
+ import logging
4
+
5
+
6
+ from osi_dump import util
7
+ from osi_dump.exporter.image.image_exporter import ImageExporter
8
+
9
+ from osi_dump.model.image import Image
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+
14
+ class ExcelImageExporter(ImageExporter):
15
+ def __init__(self, sheet_name: str, output_file: str):
16
+ self.sheet_name = sheet_name
17
+ self.output_file = output_file
18
+
19
+ def export_images(self, images: list[Image]):
20
+ df = pd.json_normalize([image.model_dump() for image in images])
21
+
22
+ logger.info(f"Exporting images for {self.sheet_name}")
23
+ try:
24
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
25
+
26
+ logger.info(f"Exported images for {self.sheet_name}")
27
+ except Exception as e:
28
+ logger.warning(f"Exporting images for {self.sheet_name} error: {e}")
@@ -1,7 +1,7 @@
1
- from abc import ABC, abstractmethod
2
-
3
-
4
- class ImageExporter(ABC):
5
- @abstractmethod
6
- def export_images(self, images, output_file: str):
7
- pass
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class ImageExporter(ABC):
5
+ @abstractmethod
6
+ def export_images(self, images, output_file: str):
7
+ pass
@@ -1,29 +1,29 @@
1
- import pandas as pd
2
-
3
- import logging
4
-
5
- from openpyxl import load_workbook
6
-
7
- from osi_dump import util
8
- from osi_dump.exporter.instance.instance_exporter import InstanceExporter
9
-
10
- from osi_dump.model.instance import Instance
11
-
12
- logger = logging.getLogger(__name__)
13
-
14
-
15
- class ExcelInstanceExporter(InstanceExporter):
16
- def __init__(self, sheet_name: str, output_file: str):
17
- self.sheet_name = sheet_name
18
- self.output_file = output_file
19
-
20
- def export_instances(self, instances: list[Instance]):
21
- df = pd.DataFrame([instance.model_dump() for instance in instances])
22
-
23
- logger.info(f"Exporting instances for {self.sheet_name}")
24
- try:
25
- util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
26
-
27
- logger.info(f"Exported instances for {self.sheet_name}")
28
- except Exception as e:
29
- logger.warning(f"Exporting instances for {self.sheet_name} error: {e}")
1
+ import pandas as pd
2
+ import logging
3
+ from typing import Generator
4
+
5
+ from osi_dump import util
6
+ from osi_dump.exporter.instance.instance_exporter import InstanceExporter
7
+ from osi_dump.model.instance import Instance
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+ class ExcelInstanceExporter(InstanceExporter):
12
+ def __init__(self, sheet_name: str, output_file: str):
13
+ self.sheet_name = sheet_name
14
+ self.output_file = output_file
15
+
16
+ def export_instances(self, instances: Generator[Instance, None, None]):
17
+ df = pd.DataFrame(instance.model_dump() for instance in instances)
18
+
19
+ if df.empty:
20
+ logger.info(f"No instances to export for {self.sheet_name}")
21
+ return
22
+ df.sort_values(by='instance_name', inplace=True, na_position='last')
23
+
24
+ logger.info(f"Exporting instances for {self.sheet_name}")
25
+ try:
26
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
27
+ logger.info(f"Exported instances for {self.sheet_name}")
28
+ except Exception as e:
29
+ logger.warning(f"Exporting instances for {self.sheet_name} error: {e}")
@@ -1,7 +1,8 @@
1
- from abc import ABC, abstractmethod
2
-
3
-
4
- class InstanceExporter(ABC):
5
- @abstractmethod
6
- def export_instances(self, instances, output_file: str):
7
- pass
1
+ from abc import ABC, abstractmethod
2
+ from typing import Generator
3
+ from osi_dump.model.instance import Instance
4
+
5
+ class InstanceExporter(ABC):
6
+ @abstractmethod
7
+ def export_instances(self, instances: Generator[Instance, None, None]):
8
+ pass
@@ -1,36 +1,36 @@
1
- import pandas as pd
2
-
3
- import logging
4
-
5
-
6
- from osi_dump import util
7
-
8
- from osi_dump.exporter.load_balancer.load_balancer_exporter import (
9
- LoadBalancerExporter,
10
- )
11
-
12
- from osi_dump.model.load_balancer import LoadBalancer
13
-
14
- logger = logging.getLogger(__name__)
15
-
16
-
17
- class ExcelLoadBalancerExporter(LoadBalancerExporter):
18
- def __init__(self, sheet_name: str, output_file: str):
19
- self.sheet_name = sheet_name
20
- self.output_file = output_file
21
-
22
- def export_load_balancers(self, load_balancers: list[LoadBalancer]):
23
- df = pd.json_normalize(
24
- [load_balancer.model_dump() for load_balancer in load_balancers]
25
- )
26
-
27
- if "amphoraes" in df.columns:
28
- df = util.expand_list_column(df, "amphoraes")
29
-
30
- logger.info(f"Exporting load_balancers for {self.sheet_name}")
31
- try:
32
- util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
33
-
34
- logger.info(f"Exported load_balancers for {self.sheet_name}")
35
- except Exception as e:
36
- logger.warning(f"Exporting load_balancers for {self.sheet_name} error: {e}")
1
+ import pandas as pd
2
+
3
+ import logging
4
+
5
+
6
+ from osi_dump import util
7
+
8
+ from osi_dump.exporter.load_balancer.load_balancer_exporter import (
9
+ LoadBalancerExporter,
10
+ )
11
+
12
+ from osi_dump.model.load_balancer import LoadBalancer
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class ExcelLoadBalancerExporter(LoadBalancerExporter):
18
+ def __init__(self, sheet_name: str, output_file: str):
19
+ self.sheet_name = sheet_name
20
+ self.output_file = output_file
21
+
22
+ def export_load_balancers(self, load_balancers: list[LoadBalancer]):
23
+ df = pd.json_normalize(
24
+ [load_balancer.model_dump() for load_balancer in load_balancers]
25
+ )
26
+
27
+ if "amphoraes" in df.columns:
28
+ df = util.expand_list_column(df, "amphoraes")
29
+
30
+ logger.info(f"Exporting load_balancers for {self.sheet_name}")
31
+ try:
32
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
33
+
34
+ logger.info(f"Exported load_balancers for {self.sheet_name}")
35
+ except Exception as e:
36
+ logger.warning(f"Exporting load_balancers for {self.sheet_name} error: {e}")
@@ -1,7 +1,7 @@
1
- from abc import ABC, abstractmethod
2
-
3
-
4
- class LoadBalancerExporter(ABC):
5
- @abstractmethod
6
- def export_load_balancers(self, load_balancers, output_file: str):
7
- pass
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class LoadBalancerExporter(ABC):
5
+ @abstractmethod
6
+ def export_load_balancers(self, load_balancers, output_file: str):
7
+ pass
@@ -1,32 +1,32 @@
1
- import logging
2
-
3
-
4
- import pandas as pd
5
-
6
-
7
- from osi_dump.exporter.network.network_exporter import NetworkExporter
8
-
9
- from osi_dump.model.network import Network
10
-
11
- from osi_dump import util
12
-
13
- logger = logging.getLogger(__name__)
14
-
15
-
16
- class ExcelNetworkExporter(NetworkExporter):
17
- def __init__(self, sheet_name: str, output_file: str):
18
- self.sheet_name = sheet_name
19
- self.output_file = output_file
20
-
21
- def export_networks(self, networks: list[Network]):
22
- df = pd.json_normalize([network.model_dump() for network in networks])
23
-
24
- df = util.expand_list_column(df, "subnets")
25
-
26
- logger.info(f"Exporting networks for {self.sheet_name}")
27
- try:
28
- util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
29
-
30
- logger.info(f"Exported networks for {self.sheet_name}")
31
- except Exception as e:
32
- logger.warning(f"Exporting networks for {self.sheet_name} error: {e}")
1
+ import logging
2
+
3
+
4
+ import pandas as pd
5
+
6
+
7
+ from osi_dump.exporter.network.network_exporter import NetworkExporter
8
+
9
+ from osi_dump.model.network import Network
10
+
11
+ from osi_dump import util
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+
16
+ class ExcelNetworkExporter(NetworkExporter):
17
+ def __init__(self, sheet_name: str, output_file: str):
18
+ self.sheet_name = sheet_name
19
+ self.output_file = output_file
20
+
21
+ def export_networks(self, networks: list[Network]):
22
+ df = pd.json_normalize([network.model_dump() for network in networks])
23
+
24
+ df = util.expand_list_column(df, "subnets")
25
+
26
+ logger.info(f"Exporting networks for {self.sheet_name}")
27
+ try:
28
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
29
+
30
+ logger.info(f"Exported networks for {self.sheet_name}")
31
+ except Exception as e:
32
+ logger.warning(f"Exporting networks for {self.sheet_name} error: {e}")
@@ -1,7 +1,7 @@
1
- from abc import ABC, abstractmethod
2
-
3
-
4
- class NetworkExporter(ABC):
5
- @abstractmethod
6
- def export_networks(self, networks, output_file: str):
7
- pass
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class NetworkExporter(ABC):
5
+ @abstractmethod
6
+ def export_networks(self, networks, output_file: str):
7
+ pass
@@ -1,30 +1,30 @@
1
- import pandas as pd
2
-
3
- import logging
4
-
5
- from openpyxl import load_workbook
6
-
7
- from osi_dump import util
8
- from osi_dump.exporter.project.project_exporter import ProjectExporter
9
-
10
- from osi_dump.model.project import Project
11
-
12
- logger = logging.getLogger(__name__)
13
-
14
-
15
- class ExcelProjectExporter(ProjectExporter):
16
- def __init__(self, sheet_name: str, output_file: str):
17
- self.sheet_name = sheet_name
18
- self.output_file = output_file
19
-
20
- def export_projects(self, projects: list[Project]):
21
-
22
- df = pd.DataFrame([project.model_dump() for project in projects])
23
-
24
- logger.info(f"Exporting projects for {self.sheet_name}")
25
- try:
26
- util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
27
-
28
- logger.info(f"Exported projects for {self.sheet_name}")
29
- except Exception as e:
30
- logger.warning(f"Exporting projects for {self.sheet_name} error: {e}")
1
+ import pandas as pd
2
+
3
+ import logging
4
+
5
+ from openpyxl import load_workbook
6
+
7
+ from osi_dump import util
8
+ from osi_dump.exporter.project.project_exporter import ProjectExporter
9
+
10
+ from osi_dump.model.project import Project
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ class ExcelProjectExporter(ProjectExporter):
16
+ def __init__(self, sheet_name: str, output_file: str):
17
+ self.sheet_name = sheet_name
18
+ self.output_file = output_file
19
+
20
+ def export_projects(self, projects: list[Project]):
21
+
22
+ df = pd.DataFrame([project.model_dump() for project in projects])
23
+
24
+ logger.info(f"Exporting projects for {self.sheet_name}")
25
+ try:
26
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
27
+
28
+ logger.info(f"Exported projects for {self.sheet_name}")
29
+ except Exception as e:
30
+ logger.warning(f"Exporting projects for {self.sheet_name} error: {e}")
@@ -1,7 +1,7 @@
1
- from abc import ABC, abstractmethod
2
-
3
-
4
- class ProjectExporter(ABC):
5
- @abstractmethod
6
- def export_projects(self, projects, output_file: str):
7
- pass
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class ProjectExporter(ABC):
5
+ @abstractmethod
6
+ def export_projects(self, projects, output_file: str):
7
+ pass
@@ -1,35 +1,43 @@
1
- import pandas as pd
2
-
3
- import logging
4
-
5
-
6
- from osi_dump import util
7
-
8
- from osi_dump.exporter.role_assignment.role_assignment_exporter import (
9
- RoleAssignmentExporter,
10
- )
11
-
12
- from osi_dump.model.role_assignment import RoleAssignment
13
-
14
- logger = logging.getLogger(__name__)
15
-
16
-
17
- class ExcelRoleAssignmentExporter(RoleAssignmentExporter):
18
- def __init__(self, sheet_name: str, output_file: str):
19
- self.sheet_name = sheet_name
20
- self.output_file = output_file
21
-
22
- def export_role_assignments(self, role_assignments: list[RoleAssignment]):
23
- df = pd.json_normalize(
24
- [role_assignment.model_dump() for role_assignment in role_assignments]
25
- )
26
-
27
- logger.info(f"Exporting role_assignments for {self.sheet_name}")
28
- try:
29
- util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
30
-
31
- logger.info(f"Exported role_assignments for {self.sheet_name}")
32
- except Exception as e:
33
- logger.warning(
34
- f"Exporting role_assignments for {self.sheet_name} error: {e}"
35
- )
1
+ import logging
2
+ import pandas as pd
3
+ from osi_dump import util
4
+ from .role_assignment_exporter import RoleAssignmentExporter
5
+ from osi_dump.importer.role_assignment.role_assignment_importer import RoleAssignmentImporter
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+ class ExcelRoleAssignmentExporter(RoleAssignmentExporter):
10
+ def __init__(self, sheet_name_prefix: str, output_file: str):
11
+ self.sheet_name_prefix = sheet_name_prefix
12
+ self.output_file = output_file
13
+
14
+ def export_role_assignments(self, importer: RoleAssignmentImporter):
15
+ # Sheet 1: User Effective Roles
16
+ df_effective = pd.json_normalize(
17
+ (role.model_dump() for role in importer.calculate_effective_roles())
18
+ )
19
+ if not df_effective.empty:
20
+ df_effective.sort_values(by=['user_name', 'role_name'], inplace=True)
21
+ self._export_to_sheet(df_effective, f"{self.sheet_name_prefix}-effective")
22
+
23
+ # Sheet 2: Raw User Roles
24
+ df_user = pd.json_normalize(
25
+ (role.model_dump() for role in importer.get_user_roles())
26
+ )
27
+ if not df_user.empty:
28
+ self._export_to_sheet(df_user, f"{self.sheet_name_prefix}-user")
29
+
30
+ # Sheet 3: Raw Group Roles
31
+ df_group = pd.json_normalize(
32
+ (role.model_dump() for role in importer.get_group_roles())
33
+ )
34
+ if not df_group.empty:
35
+ self._export_to_sheet(df_group, f"{self.sheet_name_prefix}-group")
36
+
37
+ def _export_to_sheet(self, df: pd.DataFrame, sheet_name: str):
38
+ logger.info(f"Exporting data to sheet: {sheet_name}")
39
+ try:
40
+ util.export_data_excel(self.output_file, sheet_name=sheet_name, df=df)
41
+ logger.info(f"Exported data to sheet: {sheet_name}")
42
+ except Exception as e:
43
+ logger.warning(f"Exporting to {sheet_name} error: {e}")