osi-dump 0.1.3.3.4.2__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 -141
  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 -21
  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.2.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.2.dist-info → osi_dump-0.1.4.dist-info}/WHEEL +1 -1
  100. osi_dump-0.1.3.3.4.2.dist-info/RECORD +0 -124
  101. {osi_dump-0.1.3.3.4.2.dist-info → osi_dump-0.1.4.dist-info}/entry_points.txt +0 -0
  102. {osi_dump-0.1.3.3.4.2.dist-info → osi_dump-0.1.4.dist-info}/top_level.txt +0 -0
@@ -1,39 +1,39 @@
1
- from openpyxl import load_workbook
2
-
3
-
4
- def excel_autosize_column(file_path: str):
5
- """Auto size column for all sheets in excel file
6
-
7
- Args:
8
- file_path (str): Path to excel file
9
-
10
- Raises:
11
- e: Exception when loading workbook
12
- """
13
- try:
14
- wb = load_workbook(file_path)
15
- except Exception as e:
16
- raise e
17
-
18
- # Iterate through all sheets
19
- for sheet_name in wb.sheetnames:
20
- ws = wb[sheet_name]
21
-
22
- # Auto-size columns
23
- for col in ws.columns:
24
- max_length = 0
25
- column = col[0].column_letter # Get the column name (e.g., 'A')
26
- for cell in col:
27
- try:
28
- if cell.value:
29
- cell_length = len(str(cell.value))
30
- if cell_length > max_length:
31
- max_length = cell_length
32
- except:
33
- pass
34
- adjusted_width = max_length + 2 # Adjust as needed for padding
35
- ws.column_dimensions[column].width = adjusted_width
36
-
37
- # Save the modified workbook
38
-
39
- wb.save(file_path)
1
+ from openpyxl import load_workbook
2
+
3
+
4
+ def excel_autosize_column(file_path: str):
5
+ """Auto size column for all sheets in excel file
6
+
7
+ Args:
8
+ file_path (str): Path to excel file
9
+
10
+ Raises:
11
+ e: Exception when loading workbook
12
+ """
13
+ try:
14
+ wb = load_workbook(file_path)
15
+ except Exception as e:
16
+ raise e
17
+
18
+ # Iterate through all sheets
19
+ for sheet_name in wb.sheetnames:
20
+ ws = wb[sheet_name]
21
+
22
+ # Auto-size columns
23
+ for col in ws.columns:
24
+ max_length = 0
25
+ column = col[0].column_letter # Get the column name (e.g., 'A')
26
+ for cell in col:
27
+ try:
28
+ if cell.value:
29
+ cell_length = len(str(cell.value))
30
+ if cell_length > max_length:
31
+ max_length = cell_length
32
+ except:
33
+ pass
34
+ adjusted_width = max_length + 2 # Adjust as needed for padding
35
+ ws.column_dimensions[column].width = adjusted_width
36
+
37
+ # Save the modified workbook
38
+
39
+ wb.save(file_path)
@@ -1,35 +1,35 @@
1
- import logging
2
-
3
- from openpyxl import load_workbook
4
-
5
- logger = logging.getLogger(__name__)
6
-
7
-
8
- def excel_sort_sheet(file_path):
9
- """
10
- Sorts sheets in an Excel workbook alphabetically and saves the workbook.
11
-
12
- Args:
13
- file_path (str): The path to the Excel file to be sorted.
14
- """
15
- try:
16
- # Load the existing workbook
17
- workbook = load_workbook(file_path)
18
-
19
- # Get the current sheet names
20
- sheet_names = workbook.sheetnames
21
-
22
- # Sort sheet names alphabetically
23
- sorted_sheet_names = sorted(sheet_names)
24
-
25
- # Reorder sheets in the workbook
26
- for index, sheet_name in enumerate(sorted_sheet_names):
27
- sheet = workbook[sheet_name]
28
- workbook._sheets.remove(sheet) # Remove the sheet from its current position
29
- workbook._sheets.insert(index, sheet) # Insert it at the new position
30
-
31
- # Save the workbook with the sheets reordered
32
- workbook.save(file_path)
33
-
34
- except Exception as e:
35
- logger.warning(f"Error in sorting sheet: {e}")
1
+ import logging
2
+
3
+ from openpyxl import load_workbook
4
+
5
+ logger = logging.getLogger(__name__)
6
+
7
+
8
+ def excel_sort_sheet(file_path):
9
+ """
10
+ Sorts sheets in an Excel workbook alphabetically and saves the workbook.
11
+
12
+ Args:
13
+ file_path (str): The path to the Excel file to be sorted.
14
+ """
15
+ try:
16
+ # Load the existing workbook
17
+ workbook = load_workbook(file_path)
18
+
19
+ # Get the current sheet names
20
+ sheet_names = workbook.sheetnames
21
+
22
+ # Sort sheet names alphabetically
23
+ sorted_sheet_names = sorted(sheet_names)
24
+
25
+ # Reorder sheets in the workbook
26
+ for index, sheet_name in enumerate(sorted_sheet_names):
27
+ sheet = workbook[sheet_name]
28
+ workbook._sheets.remove(sheet) # Remove the sheet from its current position
29
+ workbook._sheets.insert(index, sheet) # Insert it at the new position
30
+
31
+ # Save the workbook with the sheets reordered
32
+ workbook.save(file_path)
33
+
34
+ except Exception as e:
35
+ logger.warning(f"Error in sorting sheet: {e}")
@@ -1,36 +1,36 @@
1
- import logging
2
-
3
- import os
4
-
5
- import pandas as pd
6
-
7
- from openpyxl import load_workbook
8
-
9
- logger = logging.getLogger(__name__)
10
-
11
- BOOTSTRAP_SHEET = "sheet1"
12
-
13
-
14
- def export_data_excel(file_path: str, sheet_name: str, df: pd.DataFrame):
15
-
16
- if not os.path.exists(file_path):
17
- with pd.ExcelWriter(path=file_path, engine="openpyxl") as writer:
18
- empty_df = pd.DataFrame()
19
-
20
- empty_df.to_excel(writer, sheet_name=BOOTSTRAP_SHEET, index=False)
21
-
22
- try:
23
- with pd.ExcelWriter(
24
- path=file_path, engine="openpyxl", mode="a", if_sheet_exists="replace"
25
- ) as writer:
26
-
27
- df.to_excel(writer, sheet_name=sheet_name, index=False)
28
-
29
- except Exception as e:
30
- logger.warning(e)
31
-
32
- workbook = load_workbook(file_path)
33
-
34
- if BOOTSTRAP_SHEET in workbook.sheetnames:
35
- del workbook[BOOTSTRAP_SHEET]
36
- workbook.save(file_path)
1
+ import logging
2
+
3
+ import os
4
+
5
+ import pandas as pd
6
+
7
+ from openpyxl import load_workbook
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+ BOOTSTRAP_SHEET = "sheet1"
12
+
13
+
14
+ def export_data_excel(file_path: str, sheet_name: str, df: pd.DataFrame):
15
+
16
+ if not os.path.exists(file_path):
17
+ with pd.ExcelWriter(path=file_path, engine="openpyxl") as writer:
18
+ empty_df = pd.DataFrame()
19
+
20
+ empty_df.to_excel(writer, sheet_name=BOOTSTRAP_SHEET, index=False)
21
+
22
+ try:
23
+ with pd.ExcelWriter(
24
+ path=file_path, engine="openpyxl", mode="a", if_sheet_exists="replace"
25
+ ) as writer:
26
+
27
+ df.to_excel(writer, sheet_name=sheet_name, index=False)
28
+
29
+ except Exception as e:
30
+ logger.warning(e)
31
+
32
+ workbook = load_workbook(file_path)
33
+
34
+ if BOOTSTRAP_SHEET in workbook.sheetnames:
35
+ del workbook[BOOTSTRAP_SHEET]
36
+ workbook.save(file_path)
@@ -1,5 +1,5 @@
1
- from urllib.parse import urlparse
2
-
3
-
4
- def extract_hostname(link: str) -> str:
5
- return urlparse(link).hostname
1
+ from urllib.parse import urlparse
2
+
3
+
4
+ def extract_hostname(link: str) -> str:
5
+ return urlparse(link).hostname
@@ -1,48 +1,48 @@
1
- import urllib
2
- import urllib.parse
3
-
4
- from openstack.connection import Connection
5
-
6
-
7
- def get_endpoint(connection: Connection, service_type: str, interface: str) -> str:
8
- endpoint = connection.endpoint_for(service_type=service_type, interface=interface)
9
-
10
- parsed_endpoint = urllib.parse.urlparse(endpoint)
11
-
12
- new_hostname = urllib.parse.urlparse(connection.auth["auth_url"]).hostname
13
-
14
- port = parsed_endpoint.port
15
-
16
- ret = urllib.parse.urlunparse(
17
- parsed_endpoint._replace(netloc=f"{new_hostname}:{port}")._replace(
18
- scheme="https"
19
- )
20
- )
21
-
22
- return ret
23
-
24
-
25
- def get_endpoints(
26
- connection: Connection, service_type: str, interface: str
27
- ) -> list[str]:
28
- endpoint = connection.endpoint_for(service_type=service_type, interface=interface)
29
-
30
- parsed_endpoint = urllib.parse.urlparse(endpoint)
31
-
32
- new_hostname = urllib.parse.urlparse(connection.auth["auth_url"]).hostname
33
-
34
- port = parsed_endpoint.port
35
-
36
- http_ret = urllib.parse.urlunparse(
37
- parsed_endpoint._replace(netloc=f"{new_hostname}:{port}")._replace(
38
- scheme="http"
39
- )
40
- )
41
-
42
- https_ret = urllib.parse.urlunparse(
43
- parsed_endpoint._replace(netloc=f"{new_hostname}:{port}")._replace(
44
- scheme="https"
45
- )
46
- )
47
-
48
- return [https_ret, http_ret]
1
+ import urllib
2
+ import urllib.parse
3
+
4
+ from openstack.connection import Connection
5
+
6
+
7
+ def get_endpoint(connection: Connection, service_type: str, interface: str) -> str:
8
+ endpoint = connection.endpoint_for(service_type=service_type, interface=interface)
9
+
10
+ parsed_endpoint = urllib.parse.urlparse(endpoint)
11
+
12
+ new_hostname = urllib.parse.urlparse(connection.auth["auth_url"]).hostname
13
+
14
+ port = parsed_endpoint.port
15
+
16
+ ret = urllib.parse.urlunparse(
17
+ parsed_endpoint._replace(netloc=f"{new_hostname}:{port}")._replace(
18
+ scheme="https"
19
+ )
20
+ )
21
+
22
+ return ret
23
+
24
+
25
+ def get_endpoints(
26
+ connection: Connection, service_type: str, interface: str
27
+ ) -> list[str]:
28
+ endpoint = connection.endpoint_for(service_type=service_type, interface=interface)
29
+
30
+ parsed_endpoint = urllib.parse.urlparse(endpoint)
31
+
32
+ new_hostname = urllib.parse.urlparse(connection.auth["auth_url"]).hostname
33
+
34
+ port = parsed_endpoint.port
35
+
36
+ http_ret = urllib.parse.urlunparse(
37
+ parsed_endpoint._replace(netloc=f"{new_hostname}:{port}")._replace(
38
+ scheme="http"
39
+ )
40
+ )
41
+
42
+ https_ret = urllib.parse.urlunparse(
43
+ parsed_endpoint._replace(netloc=f"{new_hostname}:{port}")._replace(
44
+ scheme="https"
45
+ )
46
+ )
47
+
48
+ return [https_ret, http_ret]
@@ -1,26 +1,26 @@
1
- import pandas as pd
2
-
3
- from pandas import DataFrame
4
-
5
-
6
- def expand_list_column(df, column):
7
- # Find the maximum length of the list in the column
8
- max_len = df[column].apply(len).max()
9
-
10
- # Expand each dictionary in the list into columns
11
- expanded_df = pd.DataFrame(
12
- df[column]
13
- .apply(lambda x: [{**item} for item in x] + [{}] * (max_len - len(x)))
14
- .tolist(),
15
- index=df.index,
16
- )
17
-
18
- # Flatten the nested dictionaries into separate columns
19
- expanded_df = pd.json_normalize(expanded_df.to_dict(orient="records"))
20
-
21
- expanded_df = expanded_df.add_prefix(column)
22
-
23
- # Drop the original column and join the expanded columns
24
- df = df.drop(column, axis=1).join(expanded_df)
25
-
26
- return df
1
+ import pandas as pd
2
+
3
+ from pandas import DataFrame
4
+
5
+
6
+ def expand_list_column(df, column):
7
+ # Find the maximum length of the list in the column
8
+ max_len = df[column].apply(len).max()
9
+
10
+ # Expand each dictionary in the list into columns
11
+ expanded_df = pd.DataFrame(
12
+ df[column]
13
+ .apply(lambda x: [{**item} for item in x] + [{}] * (max_len - len(x)))
14
+ .tolist(),
15
+ index=df.index,
16
+ )
17
+
18
+ # Flatten the nested dictionaries into separate columns
19
+ expanded_df = pd.json_normalize(expanded_df.to_dict(orient="records"))
20
+
21
+ expanded_df = expanded_df.add_prefix(column)
22
+
23
+ # Drop the original column and join the expanded columns
24
+ df = df.drop(column, axis=1).join(expanded_df)
25
+
26
+ return df
@@ -1,20 +1,20 @@
1
- import os
2
-
3
-
4
- def validate_dir_path(file_path: str):
5
- """
6
- Extracts the directory path from a file path and checks if it is valid.
7
-
8
- Args:
9
- file_path (str): The file path to extract the directory from.
10
-
11
- Returns:
12
- str: The directory path if it exists, otherwise an appropriate message.
13
- """
14
- # Extract the directory path
15
- dir_path = os.path.dirname(file_path)
16
-
17
- if not dir_path:
18
- return True
19
- # Check if the directory exists
20
- return os.path.exists(dir_path)
1
+ import os
2
+
3
+
4
+ def validate_dir_path(file_path: str):
5
+ """
6
+ Extracts the directory path from a file path and checks if it is valid.
7
+
8
+ Args:
9
+ file_path (str): The file path to extract the directory from.
10
+
11
+ Returns:
12
+ str: The directory path if it exists, otherwise an appropriate message.
13
+ """
14
+ # Extract the directory path
15
+ dir_path = os.path.dirname(file_path)
16
+
17
+ if not dir_path:
18
+ return True
19
+ # Check if the directory exists
20
+ return os.path.exists(dir_path)
@@ -1,40 +1,40 @@
1
- Metadata-Version: 2.2
2
- Name: osi-dump
3
- Version: 0.1.3.3.4.2
4
- Summary: OpenStack information dump tool
5
- Author: TVKain
6
- License: Apache-2.0
7
- Classifier: License :: OSI Approved :: Apache Software License
8
- Requires-Python: >=3.10
9
- Description-Content-Type: text/markdown
10
- Requires-Dist: typer
11
- Requires-Dist: openstacksdk==3.3.0
12
- Requires-Dist: pydantic
13
- Requires-Dist: pandas
14
- Requires-Dist: openpyxl
15
- Requires-Dist: numpy
16
- Provides-Extra: test
17
- Requires-Dist: pytest; extra == "test"
18
-
19
- # OpenStack Information Dump
20
-
21
- ## Set up
22
-
23
- Create virtual environment
24
-
25
- ```
26
- python3 -m venv venv
27
- ```
28
-
29
- Install packages
30
-
31
- ```
32
- pip install .
33
- ```
34
-
35
- ## Execute
36
-
37
- ```
38
- Usage: osi-dump [OPTIONS] FILE_PATH [OUTPUT_PATH]
39
- ```
40
-
1
+ Metadata-Version: 2.4
2
+ Name: osi-dump
3
+ Version: 0.1.4
4
+ Summary: OpenStack information dump tool
5
+ Author: TVKain
6
+ License: Apache-2.0
7
+ Classifier: License :: OSI Approved :: Apache Software License
8
+ Requires-Python: >=3.10
9
+ Description-Content-Type: text/markdown
10
+ Requires-Dist: typer
11
+ Requires-Dist: openstacksdk==3.3.0
12
+ Requires-Dist: pydantic
13
+ Requires-Dist: pandas
14
+ Requires-Dist: openpyxl
15
+ Requires-Dist: numpy
16
+ Provides-Extra: test
17
+ Requires-Dist: pytest; extra == "test"
18
+
19
+ # OpenStack Information Dump
20
+
21
+ ## Set up
22
+
23
+ Create virtual environment
24
+
25
+ ```
26
+ python3 -m venv venv
27
+ ```
28
+
29
+ Install packages
30
+
31
+ ```
32
+ pip install .
33
+ ```
34
+
35
+ ## Execute
36
+
37
+ ```
38
+ Usage: osi-dump [OPTIONS] FILE_PATH [OUTPUT_PATH]
39
+ ```
40
+
@@ -0,0 +1,130 @@
1
+ osi_dump/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ osi_dump/__main__.py,sha256=dNjLtLxScWF658kVvzNKvfBTNMZjld8SDQQCZdQxSWg,75
3
+ osi_dump/cli.py,sha256=ZBI1gRHftMnystxQ8F9rn5uxlW1rbowNr91inhVZVwA,7491
4
+ osi_dump/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ osi_dump/api/keystone.py,sha256=kjST1EyBryJT61jTbAXE0i_ku_SixtVXtQGqWvI1X8w,2181
6
+ osi_dump/api/neutron.py,sha256=YzVtbr2ySAyb88zYIHpYqZ3xn4ISdCWdvkNcDu9eCK8,1853
7
+ osi_dump/api/octavia.py,sha256=1488xe3LJOpVm8W_vF30EcJiTfVKvNqRAhvl6cyiic4,2680
8
+ osi_dump/api/placement.py,sha256=vLL8GWAKDT6_glSmiesI_0cQBKKCjfAijmKaEgAg0dg,1137
9
+ osi_dump/batch_handler/__init__.py,sha256=ii_uSQZ3f4llytLNPZENCxI3aKstwfkC8maM58foRxw,360
10
+ osi_dump/batch_handler/external_port_batch_handler.py,sha256=zs-H7MvQrKL83tzFEKanDPxLn8GkzfzvLv8HCHLH8_g,1838
11
+ osi_dump/batch_handler/flavor_batch_handler.py,sha256=CKI-SF7HAeWSMt0Biau4396MYby0yOX0w-5SCNDq09I,1640
12
+ osi_dump/batch_handler/floating_ip_batch_handler.py,sha256=w6s4KO7af71WUCquqFKpgKUU_0-z3CDHV9zeUJqaRTQ,1828
13
+ osi_dump/batch_handler/hypervisor_batch_handler.py,sha256=6-QgTKev0FsReva9voHFGBxokpcRo8d4_0m9qKYf5W0,1810
14
+ osi_dump/batch_handler/image_batch_handler.py,sha256=xav8_Db3vKvoVyQMrK4DSNsVTtRsPf71I0RRSXZeWyg,1615
15
+ osi_dump/batch_handler/instance_batch_handler.py,sha256=9Q6T7qLGgxVWGMWX9Re7rW0UcBN5T_pD1lplgFqVoZ0,1883
16
+ osi_dump/batch_handler/load_balancer_batch_handler.py,sha256=57M8umBGPGkzJfES8Ge7NyW2PPkURTIH-jo5TfNKvhE,1855
17
+ osi_dump/batch_handler/network_batch_handler.py,sha256=k-WLnz5UCiX70fGjLywRV_ufEMySSP8UZbdlI0W1DSM,1665
18
+ osi_dump/batch_handler/project_batch_handler.py,sha256=8tpF3_yJMXXvOogX2iN1C4xx5_IKt_xIP71ZFwOzNPI,1677
19
+ osi_dump/batch_handler/role_assignment_batch_handler.py,sha256=LBaPY7rD34sJSXznCx8_R4W4VZMOP3x45oHZrsKjYFM,1787
20
+ osi_dump/batch_handler/router_batch_handler.py,sha256=cjccPBF7nBzLMxaMgPYa7yNU6YLWz6Wcsbur7o9Jwa4,1636
21
+ osi_dump/batch_handler/security_group_batch_handler.py,sha256=iI5s-Lup9masy1s0TNtdKTCYpbQ1Hznwqc3edfRsPyo,1747
22
+ osi_dump/batch_handler/volume_batch_handler.py,sha256=Lqd5CHsdRZzr7dxCy0jiXKatTHFdqU4H7AdO0OFHiYU,1614
23
+ osi_dump/exporter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ osi_dump/exporter/external_port/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ osi_dump/exporter/external_port/excel_external_port_exporter.py,sha256=6QHhgu6AJgnaIRGlNL0MJbPqejVdKOTpJXjvgqywc2A,1142
26
+ osi_dump/exporter/external_port/external_port_exporter.py,sha256=VWdVoebM1_2GgfbEOI5hoYMNiHKosDzHiVxaYx_Itpw,176
27
+ osi_dump/exporter/flavor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ osi_dump/exporter/flavor/excel_flavor_exporter.py,sha256=urK95TkpaRJlpZCVXeMGDnI0wdFy0UWCgFMTbZptl1g,901
29
+ osi_dump/exporter/flavor/flavor_exporter.py,sha256=b9jpE29fXuJTcApCtwuUm41bGU1ikzFNmdqsYRn82_M,162
30
+ osi_dump/exporter/floating_ip/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
+ osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py,sha256=O1SGyYDOuvkltuWAE0YYDzT8LvO-l9o1DppPl2qCuV4,1005
32
+ osi_dump/exporter/floating_ip/floating_ip_exporter.py,sha256=nq8MewRi9WoYZNo3fujkUZorkzZKIc77Jkn5b0YmfSA,176
33
+ osi_dump/exporter/hypervisor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py,sha256=-TNI8Xyqbq6FFBp9ZA0nA5fdwYYdxCeMOOjcEpcZkF4,1052
35
+ osi_dump/exporter/hypervisor/hypervisor_exporter.py,sha256=B9fpcgG4tkpLN9RUbKLgdbWIS1lvx_4xOZiZAN2RXjc,174
36
+ osi_dump/exporter/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ osi_dump/exporter/image/excel_image_exporter.py,sha256=iq64q5KdMAbyCdv3WnTZoPK-v3vl53RzWU1K-yhLwBI,881
38
+ osi_dump/exporter/image/image_exporter.py,sha256=DrY5Eubf3RE7MvD3i0o6NrOWjv-iGzqxfq4xY8vjrd4,159
39
+ osi_dump/exporter/instance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ osi_dump/exporter/instance/excel_instance_exporter.py,sha256=ngBOvN7ACpozkrl7yYXQz0XBd3jJAGi_NVY99TN8oi8,1153
41
+ osi_dump/exporter/instance/instance_exporter.py,sha256=UZb5lcD2fongm1qCyZZvWe6LrqulW3arCmrfvNyav5g,255
42
+ osi_dump/exporter/load_balancer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py,sha256=e99rozMi7KkjZ5_WD5qM8pM5KPmzcv-7PK8jpuz1esc,1141
44
+ osi_dump/exporter/load_balancer/load_balancer_exporter.py,sha256=zapsGrSyGY7P_7qKI9VKAl3YANN0rZW7v_ywBnVgRAI,182
45
+ osi_dump/exporter/network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ osi_dump/exporter/network/excel_network_exporter.py,sha256=mXWlrWg7das2afN_LBAVny_CoUgpOYT_ynzqrxia-gQ,982
47
+ osi_dump/exporter/network/network_exporter.py,sha256=geUDKQ3_Vm8JiY9ItH_O47IPZ_NGcni6MaBM9AIZCDk,165
48
+ osi_dump/exporter/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ osi_dump/exporter/project/excel_project_exporter.py,sha256=mr0QKYxkTt8ilFLyIjBZ9SFIFBOKV5hEaq5D0enam6A,946
50
+ osi_dump/exporter/project/project_exporter.py,sha256=iD0TfkhNCGzu6GXDoK5amabPWNwbio8n16I68ezNWfc,165
51
+ osi_dump/exporter/role_assignment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
+ osi_dump/exporter/role_assignment/excel_role_assignment_exporter.py,sha256=XPYcINXWZ1SLiYmo2DG3DSMd286rkxNigWvddHawNsc,1888
53
+ osi_dump/exporter/role_assignment/role_assignment_exporter.py,sha256=7PJuwTTkSolSWalbKY5iydniPGPUS5eoB3kf1mMFlNQ,277
54
+ osi_dump/exporter/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ osi_dump/exporter/router/excel_router_exporter.py,sha256=rckGg5SMCK6Y1gbXjasWpkOnkBEWSj6c1jrtt0Pd-wU,930
56
+ osi_dump/exporter/router/router_exporter.py,sha256=mAl4tvY-w1j49FHc_-hRQbZ-dEEUG1Y_K98RvciQH3k,162
57
+ osi_dump/exporter/security_group/excel_security_group_exporter.py,sha256=Vixd9rDEZhgarmORDWdQGHvoicT7HSSHJ5dDkINc5BA,1390
58
+ osi_dump/exporter/security_group/security_group_exporter.py,sha256=u_kfBH9xSZldCd7tqTpr5WBvQEbNSlj0DwNx2z0nh4U,288
59
+ osi_dump/exporter/volume/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
+ osi_dump/exporter/volume/excel_volume_exporter.py,sha256=6LxyjYV3fKEE5gbnrk6NmWqO6L1rDgejJO6stmh4qGQ,894
61
+ osi_dump/exporter/volume/volume_exporter.py,sha256=_cqyBCc0Pbl5_zQ7aHUKiYrgQtqFzQUoztJvHgPalAI,162
62
+ osi_dump/importer/external_port/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ osi_dump/importer/external_port/external_port_importer.py,sha256=-VKEEnCHtqi5yJ10FYS0pJtbll1kM0CCc64-p21Z6EE,227
64
+ osi_dump/importer/external_port/openstack_external_port_importer.py,sha256=Rin6p26N91thvd5D2EmQxVOPxRvnHXUWtxh2cwFmD_s,5977
65
+ osi_dump/importer/flavor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
+ osi_dump/importer/flavor/flavor_importer.py,sha256=tZJAuSV-4BljB5Qw_zhL7-uUDMmtUcOgnfJf-JkcES4,195
67
+ osi_dump/importer/flavor/openstack_flavor_importer.py,sha256=EVLz6nY6Cu7lvkk8QUZ5r_IXq15Y-fwgEVT11AS9zfY,1940
68
+ osi_dump/importer/floating_ip/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
+ osi_dump/importer/floating_ip/floating_ip_importer.py,sha256=YQVPRQI18J5b2UjCEuyM8URQCtlQs9F8ndXQQ9LuAWM,217
70
+ osi_dump/importer/floating_ip/openstack_floating_ip_importer.py,sha256=3-AL7J1TW8wsZyRbACY5PDlL589nug3iJUrot1U-zY0,2354
71
+ osi_dump/importer/hypervisor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
+ osi_dump/importer/hypervisor/hypervisor_importer.py,sha256=2MpvYwh3pT-fs1laEYTqJtZmdTJipaebMdoCoSQThOQ,215
73
+ osi_dump/importer/hypervisor/openstack_hypervisor_importer.py,sha256=vUG7BTKLNnIeswxYdVH3Q6HaonlUZv6S_3Nuv_8m1WM,4421
74
+ osi_dump/importer/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
+ osi_dump/importer/image/image_importer.py,sha256=-S4zjWvnEONK_G_D8cJaK7txDgICgmdeP8UWKKbuAgY,190
76
+ osi_dump/importer/image/openstack_image_importer.py,sha256=jf0bE6SNV8vMInGsrMNWrtAt1U7cJqbRLMEPNpGQLGg,2666
77
+ osi_dump/importer/instance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
+ osi_dump/importer/instance/instance_importer.py,sha256=PaTGNBzMtIht624LGTumlXEZVdcLS2WkXvzeAtDNAHA,246
79
+ osi_dump/importer/instance/openstack_instance_importer.py,sha256=PWckeP7o1QWdgGvfJ4sn2E7seEtK-J-wTf68gwv_f4Q,4385
80
+ osi_dump/importer/load_balancer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
+ osi_dump/importer/load_balancer/load_balancer_importer.py,sha256=8QPbe0DmaLEOcRcr82IcCuB1gRc0ZG-vIuSXiO_QfhQ,227
82
+ osi_dump/importer/load_balancer/openstack_load_balancer_importer.py,sha256=U1DyAc_ca0fXR1n27sMk14R_X_vI2rQESOGBEpdlR4I,4146
83
+ osi_dump/importer/network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
+ osi_dump/importer/network/network_importer.py,sha256=zmzW1fDPl9ElojBLgcMO_WwcTGVqm76KTuEcdPNEQm4,200
85
+ osi_dump/importer/network/openstack_network_importer.py,sha256=gAOdGwxMJOypLvzj6nI-vZFdDAb9C9utyfLKCZuNA8E,2796
86
+ osi_dump/importer/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ osi_dump/importer/project/openstack_project_importer.py,sha256=wlPPGEi1uOBDCU0eoxsof6KjIs2lVy3laXiRvt53QyQ,5105
88
+ osi_dump/importer/project/project_importer.py,sha256=DYQFTIPsROt0BYgPWI8NNRwyvnjmaTNThXoCB415xe8,200
89
+ osi_dump/importer/role_assignment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
+ osi_dump/importer/role_assignment/openstack_role_assignment_importer.py,sha256=uIdnvebqXcH8E_039ltQ-7LpCcqWAs-7dgZVLf0eJdw,5094
91
+ osi_dump/importer/role_assignment/role_assignment_importer.py,sha256=5KerMFUQ8cXHXnn1RQORydNihL_21vkn8WFTpiYXtO0,555
92
+ osi_dump/importer/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
+ osi_dump/importer/router/openstack_router_importer.py,sha256=cV-R4qUFUYlAIVLFxxozlD6howOfjZ-O4vgU4mL5UhE,2868
94
+ osi_dump/importer/router/router_importer.py,sha256=4tEbkMPErSrFiW648fSRwnd80DtSKbz70et-gzzRJMA,195
95
+ osi_dump/importer/security_group/openstack_security_group_importer.py,sha256=VRM_wKUFWNd6jRFQRSHk8ICZv2-U1IefKtXMpW97XW4,2332
96
+ osi_dump/importer/security_group/security_group_importer.py,sha256=8WZCwYWD1_Br3sZefglrIHgoIX6WqgJbhcRj7Vb-Inw,274
97
+ osi_dump/importer/volume/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
+ osi_dump/importer/volume/openstack_volume_importer.py,sha256=iRvuABQOtFaFRmLog5kf-HgooU4Z6Y2VdxRgxA5p34E,2572
99
+ osi_dump/importer/volume/volume_importer.py,sha256=5yn4O62myxg7xWjm5EFYjRdLTwhhBxcUu2K2Mvkj3NU,195
100
+ osi_dump/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
+ osi_dump/model/authentication_info.py,sha256=VaMCahiZuRpTlXxJSGDb3AyS2a-mq7c4zZnh2E6uBSY,341
102
+ osi_dump/model/external_port.py,sha256=D1Ng_DIZqEbJlDGhCt95ieDEDVJ1Hq7kBAxule_04ZA,571
103
+ osi_dump/model/flavor.py,sha256=-IFPH_9_mN0JS5EBEwsEVm31sH_aS5tmzx9MSvjmEwk,321
104
+ osi_dump/model/floating_ip.py,sha256=AZrFWFeJbMglYGZ7LY7V85QRnYxz6c019AiQXuOgMHc,451
105
+ osi_dump/model/hypervisor.py,sha256=1eI2j7JEVwnig4_Lb-KrT4USXKDkfV5ZR5yWjv0wi3E,479
106
+ osi_dump/model/image.py,sha256=dz8Zbe_OZEZuEVd6v8NycLhuMp09SR9dpH6q0wCy77o,551
107
+ osi_dump/model/instance.py,sha256=UjJagGoD86sSEkAC4vS0j4VFoHTGZvns-TV45KynOtU,668
108
+ osi_dump/model/load_balancer.py,sha256=uPYqzoh2vbPeAhKPHdM2TGhh5-ZpGC0u2fhX6IZxdKk,597
109
+ osi_dump/model/network.py,sha256=HJmRIrVPCu4FLEPVY3Q0W05CE42qFhiEpMId2gclSRs,565
110
+ osi_dump/model/project.py,sha256=nTVswIdfhLH-vvtvrcHvxc31Wol_jPCKopGVMhEN2XE,782
111
+ osi_dump/model/role_assignment.py,sha256=X_-GeBLwTlwjzOlLKIMPrazCQBsnBLuUDGocaCOmH1g,803
112
+ osi_dump/model/router.py,sha256=CORkRw5AuU_A8eGY1t2FJSFX0l0nExzjZTGl3I0hGLs,440
113
+ osi_dump/model/security_group.py,sha256=MJjmgSM8WOuGW2h4PxMv6PwlwLrZzRiToR-5JFUDbBc,642
114
+ osi_dump/model/volume.py,sha256=cHbIVmG1Cs08AkQGE167Ih3hYCIWRjdKHSwD3SDb4js,448
115
+ osi_dump/os_connection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
+ osi_dump/os_connection/get_connections.py,sha256=EK8t7OUc_IN4rI6C5FCkMaXF6AhZZu-jEagwqIUjljM,1862
117
+ osi_dump/util/__init__.py,sha256=zw7CukPx6S2UEcQ7SeJwfRSQ9O-ynJBf8eumYIXnHY8,337
118
+ osi_dump/util/create_file.py,sha256=ICvH44BOV6twCbgxDOvnbKKE-Ft_1Rr6hHDsFKUyl7A,253
119
+ osi_dump/util/excel_autosize_column.py,sha256=GJi5fxQWx4DyzuY9fhEYqbQesd9c_0QIEVO9C0Bd6zs,1141
120
+ osi_dump/util/excel_sort_sheet.py,sha256=4_S38Iw2B5nF-69o6XTOICOF6Ir0PKhoKdyeu6jPJn0,1082
121
+ osi_dump/util/export_data_excel.py,sha256=3cw570iG-8X64fNgMFs3GA8VRCn8hWizzYZrKslO5Dk,918
122
+ osi_dump/util/extract_hostname.py,sha256=NdpF2tYt-Gl1Wx4nVZA0FkBzh-IbPfid_dLGQrA281g,116
123
+ osi_dump/util/openstack_util.py,sha256=m8Xcp2KNNf3jzo-J7BYj_SdnoNymRN-1DJeQcOwygDg,1347
124
+ osi_dump/util/panda_excel.py,sha256=db53jqLsBhSE1oM14GbeKJZpF7RAUA7bHBjDh9Be8H4,760
125
+ osi_dump/util/validate_dir_path.py,sha256=JHjZBsQIT5ubw8rnsHbw2hkKDBFzYMjmjQ_oJT8EtJc,527
126
+ osi_dump-0.1.4.dist-info/METADATA,sha256=gLvhzT2bIRdlKkndUGA3iUcQ1TT-laKX3HO1hXPXRaQ,719
127
+ osi_dump-0.1.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
128
+ osi_dump-0.1.4.dist-info/entry_points.txt,sha256=ozm5sIBtXzLv6_FiUe26v1BgA3_xUReGLPhKQKZ56wQ,46
129
+ osi_dump-0.1.4.dist-info/top_level.txt,sha256=OtAAwmJfcoPvlw_Cemo_H1aXIGV_7w0O2941KQt6faQ,9
130
+ osi_dump-0.1.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5