openshift-python-wrapper 11.0.116__tar.gz → 11.0.118__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.
Files changed (469) hide show
  1. openshift_python_wrapper-11.0.118/.git +1 -0
  2. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.pre-commit-config.yaml +1 -1
  3. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/PKG-INFO +1 -1
  4. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/core/generator.py +14 -1
  5. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/core/schema.py +86 -33
  6. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/parsers/user_code_parser.py +1 -2
  7. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/test_schema_new_functions.py +173 -11
  8. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/test_user_code_parser.py +42 -2
  9. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/application_aware_cluster_resource_quota.py +2 -1
  10. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/application_aware_resource_quota.py +2 -1
  11. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/authorino.py +2 -1
  12. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/catalog_source.py +2 -1
  13. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/cluster_resource_quota.py +2 -1
  14. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/cluster_role.py +2 -1
  15. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/cluster_role_binding.py +2 -1
  16. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/cluster_user_defined_network.py +2 -1
  17. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/config_imageregistry_operator_openshift_io.py +2 -1
  18. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/controller_revision.py +2 -1
  19. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/cron_job.py +2 -1
  20. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/csi_storage_capacity.py +2 -1
  21. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/data_import_cron.py +2 -1
  22. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/data_source.py +2 -1
  23. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/deployment.py +2 -1
  24. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/dsc_initialization.py +2 -1
  25. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/endpoint_slice.py +2 -1
  26. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/endpoints.py +2 -1
  27. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/fence_agent_remediation_templates.py +2 -1
  28. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/group.py +2 -1
  29. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/image_caching_internal_knative_dev.py +2 -1
  30. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/image_digest_mirror_set.py +2 -1
  31. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/inference_graph.py +2 -1
  32. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/inference_service.py +2 -1
  33. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/ip_address_pool.py +2 -1
  34. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/limit_range.py +2 -1
  35. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/llama_stack_distribution.py +2 -1
  36. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/lm_eval_job.py +2 -1
  37. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/mig_analytic.py +2 -1
  38. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/mig_cluster.py +2 -1
  39. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/mig_migration.py +2 -1
  40. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/model_registry.py +2 -1
  41. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/model_registry_modelregistry_opendatahub_io.py +2 -1
  42. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/multi_cluster_observability.py +2 -1
  43. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/multi_network_policy.py +2 -1
  44. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/network_attachment_definition.py +2 -1
  45. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/node_health_check.py +2 -1
  46. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/performance_profile.py +2 -1
  47. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/pod.py +2 -2
  48. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/pod_metrics.py +2 -1
  49. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/reclaim_space_cron_job.py +2 -1
  50. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/reclaim_space_job.py +2 -1
  51. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/replica_set.py +2 -1
  52. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/resource_quota.py +2 -1
  53. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/restore.py +2 -1
  54. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/role.py +2 -1
  55. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/sealed_secret.py +2 -1
  56. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/security_context_constraints.py +2 -1
  57. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/service_mesh_member.py +2 -1
  58. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/serving_runtime.py +2 -1
  59. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/snapshot.py +2 -1
  60. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/ssp.py +2 -1
  61. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/storage_class.py +2 -1
  62. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/trustyai_service.py +2 -1
  63. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/user.py +2 -1
  64. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/user_defined_network.py +2 -1
  65. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/utils/utils.py +7 -0
  66. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_clone.py +2 -1
  67. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_cluster_instancetype.py +2 -1
  68. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_export.py +2 -1
  69. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_instance_preset.py +2 -1
  70. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_instance_replica_set.py +2 -1
  71. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_instancetype.py +2 -1
  72. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/volume_snapshot.py +2 -1
  73. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/volume_snapshot_class.py +2 -1
  74. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/pyproject.toml +1 -1
  75. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_camelcase_to_snake.py +15 -0
  76. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/uv.lock +49 -39
  77. openshift_python_wrapper-11.0.116/.git +0 -1
  78. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.coderabbit.yaml +0 -0
  79. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.dockerignore +0 -0
  80. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.flake8 +0 -0
  81. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.gitattributes +0 -0
  82. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  83. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  84. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.github/pull_request_template.md +0 -0
  85. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.github/weekly-digest.yml +0 -0
  86. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.github/workflows/close-stale-issues.yml +0 -0
  87. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.gitignore +0 -0
  88. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.gitleaks.toml +0 -0
  89. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.readthedocs.yaml +0 -0
  90. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.release-it.json +0 -0
  91. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/.sonarcloud.properties +0 -0
  92. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/CONTRIBUTING.md +0 -0
  93. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/LICENSE +0 -0
  94. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/Makefile +0 -0
  95. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/OWNERS +0 -0
  96. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/README.md +0 -0
  97. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/README.md +0 -0
  98. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/__init__.py +0 -0
  99. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/cli.py +0 -0
  100. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/constants.py +0 -0
  101. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/core/__init__.py +0 -0
  102. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/core/coverage.py +0 -0
  103. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/core/discovery.py +0 -0
  104. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/exceptions.py +0 -0
  105. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/formatters/__init__.py +0 -0
  106. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/formatters/file_writer.py +0 -0
  107. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/formatters/template_renderer.py +0 -0
  108. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/manifests/class_generator_template.j2 +0 -0
  109. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/parsers/__init__.py +0 -0
  110. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/parsers/explain_parser.py +0 -0
  111. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/parsers/type_parser.py +0 -0
  112. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/py.typed +0 -0
  113. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/schema/__cluster_version__.txt +0 -0
  114. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/schema/__resources-mappings.json.gz +0 -0
  115. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/schema/_definitions.json +0 -0
  116. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/APIServer/api_server.py +0 -0
  117. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/ClusterOperator/cluster_operator.py +0 -0
  118. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/ConfigMap/config_map.py +0 -0
  119. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/DNS/dns_config_openshift_io.py +0 -0
  120. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/DNS/dns_operator_openshift_io.py +0 -0
  121. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/Deployment/deployment.py +0 -0
  122. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/ImageContentSourcePolicy/image_content_source_policy.py +0 -0
  123. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/Ingress/ingress_config_openshift_io.py +0 -0
  124. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/Ingress/ingress_networking_k8s_io.py +0 -0
  125. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/Machine/machine.py +0 -0
  126. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/NMState/nm_state.py +0 -0
  127. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/OAuth/oauth.py +0 -0
  128. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/Pipeline/pipeline.py +0 -0
  129. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/Pod/pod.py +0 -0
  130. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/RouteAdvertisements/route_advertisements.py +0 -0
  131. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/Secret/secret.py +0 -0
  132. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/ServiceMeshMember/service_mesh_member.py +0 -0
  133. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/ServingRuntime/serving_runtime.py +0 -0
  134. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/manifests/test_parse_explain.j2 +0 -0
  135. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/test_batch_regeneration.py +0 -0
  136. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/test_class_generator.py +0 -0
  137. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/test_cli.py +0 -0
  138. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/test_generation.py +0 -0
  139. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/test_resource_discovery.py +0 -0
  140. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/test_schema_parsing.py +0 -0
  141. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/tests/test_utils.py +0 -0
  142. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/class_generator/utils.py +0 -0
  143. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/docs/Makefile +0 -0
  144. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/docs/conf.py +0 -0
  145. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/docs/index.rst +0 -0
  146. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/docs/modules.rst +0 -0
  147. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/docs/ocp_resources.rst +0 -0
  148. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/examples/general.py +0 -0
  149. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/examples/node_network_configuration_policy.py +0 -0
  150. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/examples/pods.py +0 -0
  151. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/examples/resource_list.py +0 -0
  152. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/examples/role.py +0 -0
  153. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/examples/special_cases.py +0 -0
  154. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/examples/validation_demo.py +0 -0
  155. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/examples/validation_troubleshooting.py +0 -0
  156. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/examples/virtual_machine.py +0 -0
  157. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/README.md +0 -0
  158. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/__init__.py +0 -0
  159. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/configuration.py +0 -0
  160. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/dynamic_client.py +0 -0
  161. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/exceptions.py +0 -0
  162. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/kubernetes_client.py +0 -0
  163. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/resource_field.py +0 -0
  164. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/resource_instance.py +0 -0
  165. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/resource_manager.py +0 -0
  166. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/resource_registry.py +0 -0
  167. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/resource_storage.py +0 -0
  168. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/status_schema_parser.py +0 -0
  169. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/status_templates.py +0 -0
  170. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/fake_kubernetes_client/types.py +0 -0
  171. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/mcp_server/README.md +0 -0
  172. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/mcp_server/__init__.py +0 -0
  173. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/mcp_server/example_client.py +0 -0
  174. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/mcp_server/server-info.json +0 -0
  175. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/mcp_server/server.py +0 -0
  176. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/mcp_server/tests/__init__.py +0 -0
  177. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/mcp_server/tests/test_server.py +0 -0
  178. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/__init__.py +0 -0
  179. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/aaq.py +0 -0
  180. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/api_server.py +0 -0
  181. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/api_service.py +0 -0
  182. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/application_aware_applied_cluster_resource_quota.py +0 -0
  183. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/authentication_config_openshift_io.py +0 -0
  184. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/authentication_operator_openshift_io.py +0 -0
  185. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/backup.py +0 -0
  186. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/benchmark.py +0 -0
  187. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/bgp_session_state.py +0 -0
  188. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/cdi.py +0 -0
  189. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/cdi_config.py +0 -0
  190. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/chaos_engine.py +0 -0
  191. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/chaos_result.py +0 -0
  192. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/cluster_claim.py +0 -0
  193. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/cluster_deployment.py +0 -0
  194. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/cluster_operator.py +0 -0
  195. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/cluster_pool.py +0 -0
  196. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/cluster_service_version.py +0 -0
  197. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/cluster_version.py +0 -0
  198. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/config_map.py +0 -0
  199. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/config_operator_openshift_io.py +0 -0
  200. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/config_samples_operator_openshift_io.py +0 -0
  201. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/console_cli_download.py +0 -0
  202. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/console_config_openshift_io.py +0 -0
  203. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/console_operator_openshift_io.py +0 -0
  204. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/console_plugin.py +0 -0
  205. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/console_quick_start.py +0 -0
  206. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/csi_driver.py +0 -0
  207. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/custom_resource_definition.py +0 -0
  208. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/daemonset.py +0 -0
  209. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/data_science_cluster.py +0 -0
  210. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/data_science_pipelines_application.py +0 -0
  211. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/datavolume.py +0 -0
  212. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/destination_rule.py +0 -0
  213. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/direct_volume_migration.py +0 -0
  214. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/direct_volume_migration_progress.py +0 -0
  215. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/dns_config_openshift_io.py +0 -0
  216. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/dns_operator_openshift_io.py +0 -0
  217. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/event.py +0 -0
  218. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/exceptions.py +0 -0
  219. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/forklift_controller.py +0 -0
  220. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/frr_configuration.py +0 -0
  221. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/gateway.py +0 -0
  222. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/gateway_class.py +0 -0
  223. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/gateway_config.py +0 -0
  224. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/gateway_gateway_networking_k8s_io.py +0 -0
  225. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/gateway_networking_istio_io.py +0 -0
  226. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/guardrails_orchestrator.py +0 -0
  227. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/hook.py +0 -0
  228. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/host.py +0 -0
  229. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/hostpath_provisioner.py +0 -0
  230. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/hyperconverged.py +0 -0
  231. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/image_config_openshift_io.py +0 -0
  232. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/image_content_source_policy.py +0 -0
  233. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/image_image_openshift_io.py +0 -0
  234. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/image_stream.py +0 -0
  235. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/imagestreamtag.py +0 -0
  236. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/infrastructure.py +0 -0
  237. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/ingress_config_openshift_io.py +0 -0
  238. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/ingress_controller.py +0 -0
  239. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/ingress_networking_k8s_io.py +0 -0
  240. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/installplan.py +0 -0
  241. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/jaeger.py +0 -0
  242. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/job.py +0 -0
  243. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/kube_descheduler.py +0 -0
  244. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/kubelet_config.py +0 -0
  245. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/kubevirt.py +0 -0
  246. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/l2_advertisement.py +0 -0
  247. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/lease.py +0 -0
  248. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/llm_inference_service.py +0 -0
  249. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/maa_s_auth_policy.py +0 -0
  250. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/maa_s_model.py +0 -0
  251. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/maa_s_subscription.py +0 -0
  252. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/machine.py +0 -0
  253. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/machine_config.py +0 -0
  254. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/machine_config_pool.py +0 -0
  255. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/machine_health_check.py +0 -0
  256. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/machine_set.py +0 -0
  257. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/managed_cluster.py +0 -0
  258. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/maria_db.py +0 -0
  259. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/mariadb_operator.py +0 -0
  260. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/metallb.py +0 -0
  261. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/mig_controller.py +0 -0
  262. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/mig_plan.py +0 -0
  263. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/migration.py +0 -0
  264. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/migration_policy.py +0 -0
  265. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/model_registry_components_platform_opendatahub_io.py +0 -0
  266. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/mtq.py +0 -0
  267. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/multi_cluster_hub.py +0 -0
  268. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/multi_namespace_virtual_machine_storage_migration.py +0 -0
  269. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/multi_namespace_virtual_machine_storage_migration_plan.py +0 -0
  270. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/mutating_webhook_config.py +0 -0
  271. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/namespace.py +0 -0
  272. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/network_addons_config.py +0 -0
  273. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/network_config_openshift_io.py +0 -0
  274. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/network_map.py +0 -0
  275. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/network_operator_openshift_io.py +0 -0
  276. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/network_policy.py +0 -0
  277. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/nm_state.py +0 -0
  278. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/node.py +0 -0
  279. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/node_config_openshift_io.py +0 -0
  280. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/node_maintenance.py +0 -0
  281. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/node_network_configuration_enactment.py +0 -0
  282. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/node_network_configuration_policy.py +0 -0
  283. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/node_network_configuration_policy_latest.py +0 -0
  284. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/node_network_state.py +0 -0
  285. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/notebook.py +0 -0
  286. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/oauth.py +0 -0
  287. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/ocs_initialization.py +0 -0
  288. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/open_telemetry_collector.py +0 -0
  289. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/operator.py +0 -0
  290. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/operator_condition.py +0 -0
  291. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/operator_group.py +0 -0
  292. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/operator_hub.py +0 -0
  293. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/operator_source.py +0 -0
  294. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/package_manifest.py +0 -0
  295. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/peer_authentication.py +0 -0
  296. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/persistent_volume.py +0 -0
  297. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/persistent_volume_claim.py +0 -0
  298. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/pipeline.py +0 -0
  299. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/pipeline_run.py +0 -0
  300. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/plan.py +0 -0
  301. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/pod_disruption_budget.py +0 -0
  302. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/priority_class.py +0 -0
  303. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/project_config_openshift_io.py +0 -0
  304. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/project_project_openshift_io.py +0 -0
  305. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/project_request.py +0 -0
  306. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/prometheus.py +0 -0
  307. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/prometheus_rule.py +0 -0
  308. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/provider.py +0 -0
  309. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/proxy.py +0 -0
  310. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/py.typed +0 -0
  311. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/rate_limit_policy.py +0 -0
  312. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/resource.py +0 -0
  313. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/rhmi.py +0 -0
  314. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/role_binding.py +0 -0
  315. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/route.py +0 -0
  316. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/route_advertisements.py +0 -0
  317. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/scaled_object.py +0 -0
  318. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/scheduler.py +0 -0
  319. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/secret.py +0 -0
  320. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/securesign.py +0 -0
  321. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/self_node_remediation_templates.py +0 -0
  322. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/self_subject_review.py +0 -0
  323. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/service.py +0 -0
  324. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/service_account.py +0 -0
  325. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/service_mesh_control_plane.py +0 -0
  326. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/service_mesh_member_roll.py +0 -0
  327. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/service_monitor.py +0 -0
  328. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/service_serving_knative_dev.py +0 -0
  329. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/sriov_network.py +0 -0
  330. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/sriov_network_node_policy.py +0 -0
  331. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/sriov_network_node_state.py +0 -0
  332. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/storage_cluster.py +0 -0
  333. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/storage_map.py +0 -0
  334. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/storage_profile.py +0 -0
  335. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/subscription.py +0 -0
  336. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/task.py +0 -0
  337. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/task_run.py +0 -0
  338. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/tekton_tasks.py +0 -0
  339. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/template.py +0 -0
  340. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/tempo_stack.py +0 -0
  341. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/token_rate_limit_policy.py +0 -0
  342. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/upload_token_request.py +0 -0
  343. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/utils/__init__.py +0 -0
  344. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/utils/archive_utils.py +0 -0
  345. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/utils/constants.py +0 -0
  346. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/utils/resource_constants.py +0 -0
  347. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/utils/schema_validator.py +0 -0
  348. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/validating_admission_policy.py +0 -0
  349. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/validating_admission_policy_binding.py +0 -0
  350. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/validating_webhook_config.py +0 -0
  351. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine.py +0 -0
  352. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_cluster_preference.py +0 -0
  353. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_import.py +0 -0
  354. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_instance.py +0 -0
  355. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_instance_migration.py +0 -0
  356. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_migration_resource_quota.py +0 -0
  357. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_preference.py +0 -0
  358. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_restore.py +0 -0
  359. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_snapshot.py +0 -0
  360. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_storage_migration.py +0 -0
  361. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_machine_storage_migration_plan.py +0 -0
  362. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/virtual_service.py +0 -0
  363. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/ocp_resources/vm_import_config.py +0 -0
  364. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/pypi-dist/.gitignore +0 -0
  365. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/renovate.json +0 -0
  366. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/scripts/__init__.py +0 -0
  367. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/scripts/diff-from-latest-release.sh +0 -0
  368. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/scripts/diff-from-tag.sh +0 -0
  369. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/scripts/generate_changelog.py +0 -0
  370. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/scripts/get-latest-release.sh +0 -0
  371. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/sonar-project.properties +0 -0
  372. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/__init__.py +0 -0
  373. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/conftest.py +0 -0
  374. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/fixtures/validation_schemas.py +0 -0
  375. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/manifests/vm.yaml +0 -0
  376. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/scripts/__init__.py +0 -0
  377. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/scripts/generate_pytest_test.py +0 -0
  378. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/scripts/validate_resources.py +0 -0
  379. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_api_group_order.py +0 -0
  380. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resource.py +0 -0
  381. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resource_validation.py +0 -0
  382. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_aaq.py +0 -0
  383. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_api_server.py +0 -0
  384. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_authorino.py +0 -0
  385. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_cdi.py +0 -0
  386. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_cdi_config.py +0 -0
  387. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_cluster_resource_quota.py +0 -0
  388. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_cluster_user_defined_network.py +0 -0
  389. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_config_map.py +0 -0
  390. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_console_config_openshift_io.py +0 -0
  391. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_console_operator_openshift_io.py +0 -0
  392. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_csi_driver.py +0 -0
  393. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_data_import_cron.py +0 -0
  394. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_data_science_cluster.py +0 -0
  395. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_deployment.py +0 -0
  396. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_direct_volume_migration.py +0 -0
  397. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_direct_volume_migration_progress.py +0 -0
  398. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_dns_config_openshift_io.py +0 -0
  399. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_dns_operator_openshift_io.py +0 -0
  400. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_dsc_initialization.py +0 -0
  401. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_group.py +0 -0
  402. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_guardrails_orchestrator.py +0 -0
  403. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_image_caching_internal_knative_dev.py +0 -0
  404. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_image_config_openshift_io.py +0 -0
  405. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_image_content_source_policy.py +0 -0
  406. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_image_image_openshift_io.py +0 -0
  407. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_inference_graph.py +0 -0
  408. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_kube_descheduler.py +0 -0
  409. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_kubelet_config.py +0 -0
  410. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_kubevirt.py +0 -0
  411. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_llama_stack_distribution.py +0 -0
  412. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_lm_eval_job.py +0 -0
  413. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_machine.py +0 -0
  414. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_maria_db.py +0 -0
  415. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_mariadb_operator.py +0 -0
  416. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_mig_analytic.py +0 -0
  417. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_mig_cluster.py +0 -0
  418. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_mig_migration.py +0 -0
  419. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_mig_plan.py +0 -0
  420. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_model_registry.py +0 -0
  421. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_model_registry_components_platform_opendatahub_io.py +0 -0
  422. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_model_registry_modelregistry_opendatahub_io.py +0 -0
  423. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_mtq.py +0 -0
  424. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_namespace.py +0 -0
  425. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_network_config_openshift_io.py +0 -0
  426. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_network_operator_openshift_io.py +0 -0
  427. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_nm_state.py +0 -0
  428. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_node.py +0 -0
  429. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_node_config_openshift_io.py +0 -0
  430. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_node_network_configuration_policy_latest.py +0 -0
  431. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_notebook.py +0 -0
  432. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_oauth.py +0 -0
  433. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_operator.py +0 -0
  434. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_pod.py +0 -0
  435. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_pod_metrics.py +0 -0
  436. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_project_config_openshift_io.py +0 -0
  437. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_project_project_openshift_io.py +0 -0
  438. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_project_request.py +0 -0
  439. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_prometheus.py +0 -0
  440. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_replica_set.py +0 -0
  441. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_scheduler.py +0 -0
  442. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_security_context_constraints.py +0 -0
  443. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_self_subject_review.py +0 -0
  444. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_service.py +0 -0
  445. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_service_mesh_member.py +0 -0
  446. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_service_serving_knative_dev.py +0 -0
  447. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_serving_runtime.py +0 -0
  448. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_snapshot.py +0 -0
  449. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_ssp.py +0 -0
  450. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_storage_cluster.py +0 -0
  451. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_user.py +0 -0
  452. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_user_defined_network.py +0 -0
  453. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_virtual_machine_cluster_instancetype.py +0 -0
  454. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_virtual_machine_cluster_preference.py +0 -0
  455. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_virtual_machine_export.py +0 -0
  456. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_virtual_machine_instance_migration.py +0 -0
  457. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_virtual_machine_instance_preset.py +0 -0
  458. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_virtual_machine_instance_replica_set.py +0 -0
  459. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_virtual_machine_instancetype.py +0 -0
  460. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_virtual_machine_preference.py +0 -0
  461. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_volume_snapshot.py +0 -0
  462. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_resources/test_volume_snapshot_class.py +0 -0
  463. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_schema_loading.py +0 -0
  464. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_unittests.py +0 -0
  465. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_validate_resources.py +0 -0
  466. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_validate_resources_script.py +0 -0
  467. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/test_validation_error.py +0 -0
  468. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tests/utils.py +0 -0
  469. {openshift_python_wrapper-11.0.116 → openshift_python_wrapper-11.0.118}/tox.toml +0 -0
@@ -0,0 +1 @@
1
+ gitdir: /tmp/github-webhook-openshift-python-wrapper-pmksfq2g/.git/worktrees/github-webhook-openshift-python-wrapper-pmksfq2g-worktree-a249b4d1-4ec7-4be9-8afc-75119b851f54
@@ -45,7 +45,7 @@ repos:
45
45
  ]
46
46
 
47
47
  - repo: https://github.com/astral-sh/ruff-pre-commit
48
- rev: v0.15.2
48
+ rev: v0.15.4
49
49
  hooks:
50
50
  - id: ruff
51
51
  - id: ruff-format
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openshift-python-wrapper
3
- Version: 11.0.116
3
+ Version: 11.0.118
4
4
  Summary: Wrapper around https://github.com/kubernetes-client/python
5
5
  Project-URL: homepage, https://github.com/RedHatQE/openshift-python-wrapper
6
6
  Project-URL: documentation, https://openshift-python-wrapper.readthedocs.io/en/latest/
@@ -2,6 +2,7 @@
2
2
 
3
3
  import filecmp
4
4
  import os
5
+ import re
5
6
  from pathlib import Path
6
7
  from typing import Any
7
8
 
@@ -55,6 +56,16 @@ def generate_resource_file_from_dict(
55
56
 
56
57
  output = "# Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/scripts/resource/README.md\n\n"
57
58
  formatted_kind_str = convert_camel_case_to_snake_case(name=resource_dict["kind"])
59
+
60
+ if re.search(r"_[a-z]_", formatted_kind_str):
61
+ msg = (
62
+ f"'{resource_dict['kind']}' produced invalid filename '{formatted_kind_str}.py'.\n"
63
+ f"Add '{resource_dict['kind']}' acronym to 'normalize_acronyms' dict in:\n"
64
+ f" ocp_resources/utils/utils.py -> convert_camel_case_to_snake_case()"
65
+ )
66
+ LOGGER.error(msg)
67
+ raise ValueError(msg)
68
+
58
69
  _file_suffix: str = f"{'_' + output_file_suffix if output_file_suffix else ''}"
59
70
 
60
71
  if add_tests:
@@ -94,8 +105,10 @@ def generate_resource_file_from_dict(
94
105
  output += rendered
95
106
 
96
107
  if dry_run:
108
+ console = Console()
109
+ console.print(f"\n[bold green]Would create file:[/bold green] {_output_file}")
97
110
  _code = Syntax(code=output, lexer="python", line_numbers=True)
98
- Console().print(_code)
111
+ console.print(_code)
99
112
 
100
113
  else:
101
114
  write_and_format_rendered(filepath=_output_file, output=output)
@@ -163,6 +163,10 @@ def identify_missing_resources(client: str, existing_resources_mapping: dict[Any
163
163
  """
164
164
  Identify resources that exist in the cluster but are missing from our mapping.
165
165
 
166
+ Compares using (group, kind) pairs so that resources with the same kind but
167
+ different API groups (e.g. velero.io/Backup vs postgresql.cnpg.noobaa.io/Backup)
168
+ are tracked independently.
169
+
166
170
  Args:
167
171
  client: Path to kubectl/oc client binary
168
172
  existing_resources_mapping: Current resources mapping
@@ -172,7 +176,7 @@ def identify_missing_resources(client: str, existing_resources_mapping: dict[Any
172
176
  """
173
177
  missing_resources: set[str] = set()
174
178
 
175
- # Get all available resources from cluster
179
+ # Get all available resources from cluster with their API groups
176
180
  cmd = f"{client} api-resources --no-headers"
177
181
  success, output, _ = run_command(command=shlex.split(cmd), check=False, log_errors=False)
178
182
 
@@ -180,49 +184,75 @@ def identify_missing_resources(client: str, existing_resources_mapping: dict[Any
180
184
  LOGGER.debug("Failed to get api-resources from cluster")
181
185
  return missing_resources
182
186
 
183
- # Extract kinds from cluster resources
184
- cluster_resources = set()
187
+ # Build kind -> set of groups from cluster resources
188
+ cluster_kind_groups: dict[str, set[str]] = {}
185
189
  lines = output.strip().split("\n")
186
190
 
187
191
  for line in lines:
188
192
  parts = [p for p in line.split() if p]
189
- if parts:
190
- kind = parts[-1] # KIND is the last column
191
- cluster_resources.add(kind)
193
+ if len(parts) < 3:
194
+ continue
192
195
 
193
- # Find missing resources by comparing with existing mapping
194
- existing_kinds = set()
195
- for _, resource_schemas in existing_resources_mapping.items():
196
- # Verify resource_schemas is a non-empty list
197
- if not isinstance(resource_schemas, list) or not resource_schemas:
196
+ # Find APIVERSION column by looking for version patterns
197
+ # (same logic as build_dynamic_resource_to_api_mapping)
198
+ apiversion_idx = None
199
+ for i, part in enumerate(parts):
200
+ if ("/" in part and ("v" in part or "alpha" in part or "beta" in part)) or (
201
+ part.startswith("v") and part[1:].replace(".", "").replace("alpha", "").replace("beta", "").isdigit()
202
+ ):
203
+ apiversion_idx = i
204
+ break
205
+
206
+ if apiversion_idx is None:
198
207
  continue
199
208
 
200
- # Verify first_schema is a dict
201
- first_schema = resource_schemas[0]
202
- if not isinstance(first_schema, dict):
203
- LOGGER.debug(f"Skipping malformed schema: first_schema is not a dict, got {type(first_schema)}")
209
+ # KIND is 2 columns after APIVERSION (APIVERSION, NAMESPACED, KIND)
210
+ if len(parts) <= apiversion_idx + 2:
204
211
  continue
205
212
 
206
- # Get gvk_list via .get and ensure it is a list
207
- gvk_list = first_schema.get("x-kubernetes-group-version-kind")
208
- if not isinstance(gvk_list, list) or not gvk_list:
209
- LOGGER.debug(
210
- f"Skipping malformed schema: x-kubernetes-group-version-kind is not a non-empty list, got {type(gvk_list)}"
211
- )
213
+ apiversion = parts[apiversion_idx]
214
+ kind = parts[apiversion_idx + 2]
215
+
216
+ # Extract group from apiversion: "velero.io/v1" -> "velero.io", "v1" -> ""
217
+ group = apiversion.rsplit("/", 1)[0] if "/" in apiversion else ""
218
+
219
+ cluster_kind_groups.setdefault(kind, set()).add(group)
220
+
221
+ # Build kind -> set of groups from existing mappings
222
+ existing_kind_groups: dict[str, set[str]] = {}
223
+ for _, resource_schemas in existing_resources_mapping.items():
224
+ if not isinstance(resource_schemas, list) or not resource_schemas:
212
225
  continue
213
226
 
214
- # Iterate gvk_list items and for each item confirm it's a dict before calling .get("kind")
215
- for gvk_item in gvk_list:
216
- if not isinstance(gvk_item, dict):
217
- LOGGER.debug(f"Skipping malformed gvk item: not a dict, got {type(gvk_item)}")
227
+ # Check ALL schemas in the list, not just the first one
228
+ for schema in resource_schemas:
229
+ if not isinstance(schema, dict):
218
230
  continue
219
231
 
220
- kind = gvk_item.get("kind")
221
- # Check that kind is a non-empty string before adding to existing_kinds
222
- if isinstance(kind, str) and kind.strip():
223
- existing_kinds.add(kind.strip())
232
+ gvk_list = schema.get("x-kubernetes-group-version-kind")
233
+ if not isinstance(gvk_list, list) or not gvk_list:
234
+ continue
235
+
236
+ for gvk_item in gvk_list:
237
+ if not isinstance(gvk_item, dict):
238
+ continue
239
+
240
+ kind = gvk_item.get("kind")
241
+ if not isinstance(kind, str) or not kind.strip():
242
+ continue
243
+
244
+ kind = kind.strip()
245
+ group_raw = gvk_item.get("group", "")
246
+ group = group_raw.strip() if isinstance(group_raw, str) else ""
247
+
248
+ existing_kind_groups.setdefault(kind, set()).add(group)
249
+
250
+ # Find missing resources: kind is missing if any cluster group is not in existing groups
251
+ for kind, cluster_groups in cluster_kind_groups.items():
252
+ existing_groups = existing_kind_groups.get(kind, set())
253
+ if not cluster_groups.issubset(existing_groups):
254
+ missing_resources.add(kind)
224
255
 
225
- missing_resources = cluster_resources - existing_kinds
226
256
  LOGGER.info(f"Found {len(missing_resources)} missing resources: {sorted(list(missing_resources)[:10])}")
227
257
 
228
258
  return missing_resources
@@ -661,9 +691,32 @@ def process_schema_definitions(
661
691
  f"Added new schema version for existing resource: {kind_lower} ({group or 'core'}/{version})"
662
692
  )
663
693
  else:
664
- # Don't update existing resources when cluster version is older
665
- LOGGER.debug(f"Skipping update for existing resource: {kind_lower}")
666
- continue
694
+ # Older cluster: keep existing schemas untouched, but still add
695
+ # missing group/version variants for existing kinds.
696
+ existing_schemas = resources_mapping.get(kind_lower, [])
697
+ variant_exists = False
698
+ for existing_schema in existing_schemas:
699
+ if not isinstance(existing_schema, dict):
700
+ continue
701
+ existing_gvk_list = existing_schema.get("x-kubernetes-group-version-kind") or []
702
+ for existing_gvk in existing_gvk_list:
703
+ if not isinstance(existing_gvk, dict):
704
+ continue
705
+ if existing_gvk.get("group") == group and existing_gvk.get("version") == version:
706
+ variant_exists = True
707
+ break
708
+ if variant_exists:
709
+ break
710
+
711
+ if variant_exists:
712
+ LOGGER.debug(f"Skipping update for existing resource: {kind_lower}")
713
+ continue
714
+
715
+ existing_schemas.append(schema_data)
716
+ updated_resources += 1
717
+ LOGGER.debug(
718
+ f"Added missing schema variant for existing resource: {kind_lower} ({group or 'core'}/{version})"
719
+ )
667
720
 
668
721
  # Also store in definitions for separate definitions file
669
722
  definitions[schema_name] = schema_data
@@ -60,8 +60,7 @@ def parse_user_code_from_file(file_path: str) -> tuple[str, str]:
60
60
  "from typing import Any",
61
61
  "from ocp_resources.resource import NamespacedResource",
62
62
  "from ocp_resources.resource import Resource",
63
- "from ocp_resources.resource import NamespacedResource, MissingRequiredArgumentError",
64
- "from ocp_resources.resource import Resource, MissingRequiredArgumentError",
63
+ "from ocp_resources.exceptions import MissingRequiredArgumentError",
65
64
  }
66
65
 
67
66
  for _import in imports:
@@ -306,16 +306,16 @@ class TestIdentifyMissingResources:
306
306
  @patch("class_generator.core.schema.run_command")
307
307
  def test_successful_missing_resources_identification(self, mock_run_command):
308
308
  """Test successful identification of missing resources."""
309
- api_resources_output = """pods po v1 Pod
310
- services svc v1 Service
311
- deployments deploy apps/v1 Deployment
312
- configmaps cm v1 ConfigMap"""
309
+ api_resources_output = """pods po v1 true Pod
310
+ services svc v1 true Service
311
+ deployments deploy apps/v1 true Deployment
312
+ configmaps cm v1 true ConfigMap"""
313
313
 
314
314
  mock_run_command.return_value = (True, api_resources_output, "")
315
315
 
316
316
  existing_mapping = {
317
- "pod": [{"x-kubernetes-group-version-kind": [{"kind": "Pod"}]}],
318
- "service": [{"x-kubernetes-group-version-kind": [{"kind": "Service"}]}],
317
+ "pod": [{"x-kubernetes-group-version-kind": [{"group": "", "version": "v1", "kind": "Pod"}]}],
318
+ "service": [{"x-kubernetes-group-version-kind": [{"group": "", "version": "v1", "kind": "Service"}]}],
319
319
  }
320
320
 
321
321
  result = identify_missing_resources("kubectl", existing_mapping)
@@ -333,14 +333,14 @@ configmaps cm v1 ConfigMap"""
333
333
  @patch("class_generator.core.schema.run_command")
334
334
  def test_no_missing_resources(self, mock_run_command):
335
335
  """Test when no resources are missing."""
336
- api_resources_output = """pods po v1 Pod
337
- services svc v1 Service"""
336
+ api_resources_output = """pods po v1 true Pod
337
+ services svc v1 true Service"""
338
338
 
339
339
  mock_run_command.return_value = (True, api_resources_output, "")
340
340
 
341
341
  existing_mapping = {
342
- "pod": [{"x-kubernetes-group-version-kind": [{"kind": "Pod"}]}],
343
- "service": [{"x-kubernetes-group-version-kind": [{"kind": "Service"}]}],
342
+ "pod": [{"x-kubernetes-group-version-kind": [{"group": "", "version": "v1", "kind": "Pod"}]}],
343
+ "service": [{"x-kubernetes-group-version-kind": [{"group": "", "version": "v1", "kind": "Service"}]}],
344
344
  }
345
345
 
346
346
  result = identify_missing_resources("kubectl", existing_mapping)
@@ -349,7 +349,9 @@ services svc v1 Service"""
349
349
  @patch("class_generator.core.schema.run_command")
350
350
  def test_malformed_existing_mapping_handled(self, mock_run_command):
351
351
  """Test that malformed existing mapping is handled gracefully."""
352
- api_resources_output = "pods po v1 Pod"
352
+ api_resources_output = (
353
+ "pods po v1 true Pod"
354
+ )
353
355
  mock_run_command.return_value = (True, api_resources_output, "")
354
356
 
355
357
  # Malformed mapping - missing required structure
@@ -359,6 +361,166 @@ services svc v1 Service"""
359
361
  assert "Pod" in result
360
362
 
361
363
 
364
+ class TestIdentifyMissingResourcesDuplicateKinds:
365
+ """Test identify_missing_resources with duplicate kinds across API groups."""
366
+
367
+ CLUSTER_OUTPUT_DUPLICATE_BACKUP = (
368
+ "configmaps cm v1 true ConfigMap\n"
369
+ "backups velero.io/v1 true Backup\n"
370
+ "backups postgresql.cnpg.noobaa.io/v1 true Backup\n"
371
+ "widgets example.com/v1 true Widget"
372
+ )
373
+
374
+ @pytest.mark.parametrize(
375
+ "test_id, existing_mapping, expected_missing",
376
+ [
377
+ pytest.param(
378
+ "duplicate_kind_one_group_covered",
379
+ {
380
+ "backup": [
381
+ {
382
+ "x-kubernetes-group-version-kind": [
383
+ {"group": "postgresql.cnpg.noobaa.io", "version": "v1", "kind": "Backup"}
384
+ ],
385
+ "namespaced": True,
386
+ }
387
+ ],
388
+ "configmap": [
389
+ {
390
+ "x-kubernetes-group-version-kind": [{"group": "", "version": "v1", "kind": "ConfigMap"}],
391
+ "namespaced": True,
392
+ }
393
+ ],
394
+ },
395
+ {"Backup", "Widget"},
396
+ id="duplicate_kind_one_group_covered",
397
+ ),
398
+ pytest.param(
399
+ "duplicate_kind_all_groups_covered",
400
+ {
401
+ "backup_velero": [
402
+ {
403
+ "x-kubernetes-group-version-kind": [
404
+ {"group": "velero.io", "version": "v1", "kind": "Backup"}
405
+ ],
406
+ "namespaced": True,
407
+ }
408
+ ],
409
+ "backup_cnpg": [
410
+ {
411
+ "x-kubernetes-group-version-kind": [
412
+ {"group": "postgresql.cnpg.noobaa.io", "version": "v1", "kind": "Backup"}
413
+ ],
414
+ "namespaced": True,
415
+ }
416
+ ],
417
+ "configmap": [
418
+ {
419
+ "x-kubernetes-group-version-kind": [{"group": "", "version": "v1", "kind": "ConfigMap"}],
420
+ "namespaced": True,
421
+ }
422
+ ],
423
+ "widget": [
424
+ {
425
+ "x-kubernetes-group-version-kind": [
426
+ {"group": "example.com", "version": "v1", "kind": "Widget"}
427
+ ],
428
+ "namespaced": True,
429
+ }
430
+ ],
431
+ },
432
+ set(),
433
+ id="duplicate_kind_all_groups_covered",
434
+ ),
435
+ pytest.param(
436
+ "completely_new_kind",
437
+ {
438
+ "configmap": [
439
+ {
440
+ "x-kubernetes-group-version-kind": [{"group": "", "version": "v1", "kind": "ConfigMap"}],
441
+ "namespaced": True,
442
+ }
443
+ ],
444
+ },
445
+ {"Backup", "Widget"},
446
+ id="completely_new_kind",
447
+ ),
448
+ pytest.param(
449
+ "core_api_resource_covered",
450
+ {
451
+ "backup_velero": [
452
+ {
453
+ "x-kubernetes-group-version-kind": [
454
+ {"group": "velero.io", "version": "v1", "kind": "Backup"}
455
+ ],
456
+ "namespaced": True,
457
+ }
458
+ ],
459
+ "backup_cnpg": [
460
+ {
461
+ "x-kubernetes-group-version-kind": [
462
+ {"group": "postgresql.cnpg.noobaa.io", "version": "v1", "kind": "Backup"}
463
+ ],
464
+ "namespaced": True,
465
+ }
466
+ ],
467
+ "configmap": [
468
+ {
469
+ "x-kubernetes-group-version-kind": [{"group": "", "version": "v1", "kind": "ConfigMap"}],
470
+ "namespaced": True,
471
+ }
472
+ ],
473
+ },
474
+ {"Widget"},
475
+ id="core_api_resource_covered",
476
+ ),
477
+ ],
478
+ )
479
+ @patch("class_generator.core.schema.run_command")
480
+ def test_identify_missing_resources_duplicate_kinds(
481
+ self,
482
+ mock_run_command,
483
+ test_id,
484
+ existing_mapping,
485
+ expected_missing,
486
+ ):
487
+ """Test identify_missing_resources correctly handles duplicate kinds across API groups."""
488
+ mock_run_command.return_value = (True, self.CLUSTER_OUTPUT_DUPLICATE_BACKUP, "")
489
+
490
+ result = identify_missing_resources("oc", existing_mapping)
491
+ assert result == expected_missing, f"[{test_id}] Expected {expected_missing}, got {result}"
492
+
493
+ def test_allow_updates_false_appends_missing_group_variant(self):
494
+ """Test that allow_updates=False still appends missing group variants for existing kinds."""
495
+ schemas = {
496
+ "apis/postgresql.cnpg.noobaa.io/v1": {
497
+ "components": {
498
+ "schemas": {
499
+ "io.example.Backup": {
500
+ "type": "object",
501
+ "x-kubernetes-group-version-kind": [
502
+ {"group": "postgresql.cnpg.noobaa.io", "version": "v1", "kind": "Backup"}
503
+ ],
504
+ }
505
+ }
506
+ }
507
+ }
508
+ }
509
+ existing_mapping = {
510
+ "backup": [{"x-kubernetes-group-version-kind": [{"group": "velero.io", "version": "v1", "kind": "Backup"}]}]
511
+ }
512
+
513
+ resources_mapping, _ = process_schema_definitions(
514
+ schemas=schemas,
515
+ namespacing_dict={"Backup": True},
516
+ existing_resources_mapping=existing_mapping,
517
+ allow_updates=False,
518
+ )
519
+
520
+ groups = {item["x-kubernetes-group-version-kind"][0].get("group", "") for item in resources_mapping["backup"]}
521
+ assert groups == {"velero.io", "postgresql.cnpg.noobaa.io"}
522
+
523
+
362
524
  class TestBuildDynamicResourceToApiMapping:
363
525
  """Test build_dynamic_resource_to_api_mapping function."""
364
526
 
@@ -134,7 +134,8 @@ class MyResource(Resource):
134
134
  content = '''# Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/scripts/resource/README.md
135
135
 
136
136
  from typing import Any
137
- from ocp_resources.resource import NamespacedResource, MissingRequiredArgumentError
137
+ from ocp_resources.exceptions import MissingRequiredArgumentError
138
+ from ocp_resources.resource import NamespacedResource
138
139
  from custom_validators import validate_name
139
140
  import json
140
141
 
@@ -160,7 +161,8 @@ class MyResource(NamespacedResource):
160
161
  assert "from custom_validators import validate_name" in user_imports
161
162
  assert "import json" in user_imports
162
163
  assert "from typing import Any" not in user_imports
163
- assert "from ocp_resources.resource import NamespacedResource, MissingRequiredArgumentError" not in user_imports
164
+ assert "from ocp_resources.exceptions import MissingRequiredArgumentError" not in user_imports
165
+ assert "from ocp_resources.resource import NamespacedResource" not in user_imports
164
166
 
165
167
  def test_parse_empty_file(self):
166
168
  """Test parsing an empty file."""
@@ -203,6 +205,44 @@ class MyResource(Resource):
203
205
  assert user_code.strip() == "" # Only whitespace after marker
204
206
  assert user_imports == ""
205
207
 
208
+ def test_parse_file_with_exceptions_import(self):
209
+ """Test parsing a file with import from ocp_resources.exceptions module."""
210
+ content = '''# Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/scripts/resource/README.md
211
+
212
+ from typing import Any
213
+ from ocp_resources.resource import NamespacedResource
214
+ from ocp_resources.exceptions import MissingRequiredArgumentError
215
+ import json
216
+
217
+
218
+ class MyResource(NamespacedResource):
219
+ """My resource class."""
220
+
221
+ def __init__(self, **kwargs):
222
+ super().__init__(**kwargs)
223
+
224
+ # End of generated code
225
+
226
+ def custom_method(self):
227
+ return True
228
+ '''
229
+
230
+ with tempfile.NamedTemporaryFile(mode="w", suffix=".py", delete=False) as f:
231
+ f.write(content)
232
+ f.flush()
233
+
234
+ _user_code, user_imports = parse_user_code_from_file(file_path=f.name)
235
+
236
+ Path(f.name).unlink()
237
+
238
+ # Template imports should be filtered out
239
+ assert "from ocp_resources.exceptions import MissingRequiredArgumentError" not in user_imports
240
+ assert "from typing import Any" not in user_imports
241
+ assert "from ocp_resources.resource import NamespacedResource" not in user_imports
242
+
243
+ # User imports should be preserved
244
+ assert "import json" in user_imports
245
+
206
246
  def test_parse_file_with_syntax_error(self):
207
247
  """Test parsing a file with syntax errors in imports section."""
208
248
  content = '''# Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/scripts/resource/README.md
@@ -2,7 +2,8 @@
2
2
  # TODO: update API reference when OCP doc is available
3
3
  from typing import Any
4
4
 
5
- from ocp_resources.resource import MissingRequiredArgumentError, Resource
5
+ from ocp_resources.exceptions import MissingRequiredArgumentError
6
+ from ocp_resources.resource import Resource
6
7
 
7
8
 
8
9
  class ApplicationAwareClusterResourceQuota(Resource):
@@ -2,7 +2,8 @@
2
2
  # TODO: update API reference when OCP doc is available
3
3
  from typing import Any
4
4
 
5
- from ocp_resources.resource import MissingRequiredArgumentError, NamespacedResource
5
+ from ocp_resources.exceptions import MissingRequiredArgumentError
6
+ from ocp_resources.resource import NamespacedResource
6
7
 
7
8
 
8
9
  class ApplicationAwareResourceQuota(NamespacedResource):
@@ -3,7 +3,8 @@
3
3
 
4
4
  from typing import Any
5
5
 
6
- from ocp_resources.resource import MissingRequiredArgumentError, NamespacedResource
6
+ from ocp_resources.exceptions import MissingRequiredArgumentError
7
+ from ocp_resources.resource import NamespacedResource
7
8
 
8
9
 
9
10
  class Authorino(NamespacedResource):
@@ -1,6 +1,7 @@
1
1
  from typing import Any
2
2
 
3
- from ocp_resources.resource import MissingRequiredArgumentError, NamespacedResource
3
+ from ocp_resources.exceptions import MissingRequiredArgumentError
4
+ from ocp_resources.resource import NamespacedResource
4
5
 
5
6
 
6
7
  class CatalogSource(NamespacedResource):
@@ -3,7 +3,8 @@
3
3
 
4
4
  from typing import Any
5
5
 
6
- from ocp_resources.resource import MissingRequiredArgumentError, Resource
6
+ from ocp_resources.exceptions import MissingRequiredArgumentError
7
+ from ocp_resources.resource import Resource
7
8
 
8
9
 
9
10
  class ClusterResourceQuota(Resource):
@@ -1,4 +1,5 @@
1
- from ocp_resources.resource import MissingRequiredArgumentError, Resource
1
+ from ocp_resources.exceptions import MissingRequiredArgumentError
2
+ from ocp_resources.resource import Resource
2
3
 
3
4
 
4
5
  class ClusterRole(Resource):
@@ -1,5 +1,6 @@
1
1
  from ocp_resources.cluster_role import ClusterRole
2
- from ocp_resources.resource import MissingRequiredArgumentError, Resource
2
+ from ocp_resources.exceptions import MissingRequiredArgumentError
3
+ from ocp_resources.resource import Resource
3
4
 
4
5
 
5
6
  class ClusterRoleBinding(Resource):
@@ -3,7 +3,8 @@
3
3
 
4
4
  from typing import Any
5
5
 
6
- from ocp_resources.resource import MissingRequiredArgumentError, Resource
6
+ from ocp_resources.exceptions import MissingRequiredArgumentError
7
+ from ocp_resources.resource import Resource
7
8
 
8
9
 
9
10
  class ClusterUserDefinedNetwork(Resource):
@@ -3,7 +3,8 @@
3
3
 
4
4
  from typing import Any
5
5
 
6
- from ocp_resources.resource import MissingRequiredArgumentError, Resource
6
+ from ocp_resources.exceptions import MissingRequiredArgumentError
7
+ from ocp_resources.resource import Resource
7
8
 
8
9
 
9
10
  class Config(Resource):
@@ -1,4 +1,5 @@
1
- from ocp_resources.resource import MissingRequiredArgumentError, NamespacedResource
1
+ from ocp_resources.exceptions import MissingRequiredArgumentError
2
+ from ocp_resources.resource import NamespacedResource
2
3
 
3
4
 
4
5
  class ControllerRevision(NamespacedResource):
@@ -1,4 +1,5 @@
1
- from ocp_resources.resource import MissingRequiredArgumentError, NamespacedResource
1
+ from ocp_resources.exceptions import MissingRequiredArgumentError
2
+ from ocp_resources.resource import NamespacedResource
2
3
 
3
4
 
4
5
  class CronJob(NamespacedResource):
@@ -1,4 +1,5 @@
1
- from ocp_resources.resource import MissingRequiredArgumentError, NamespacedResource
1
+ from ocp_resources.exceptions import MissingRequiredArgumentError
2
+ from ocp_resources.resource import NamespacedResource
2
3
 
3
4
 
4
5
  class CSIStorageCapacity(NamespacedResource):
@@ -3,7 +3,8 @@
3
3
 
4
4
  from typing import Any
5
5
 
6
- from ocp_resources.resource import MissingRequiredArgumentError, NamespacedResource
6
+ from ocp_resources.exceptions import MissingRequiredArgumentError
7
+ from ocp_resources.resource import NamespacedResource
7
8
 
8
9
 
9
10
  class DataImportCron(NamespacedResource):