openshift-python-wrapper 4.21.1__tar.gz → 4.21.2__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 (466) hide show
  1. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.gitignore +0 -1
  2. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.pre-commit-config.yaml +1 -1
  3. openshift_python_wrapper-4.21.2/AGENTS.md +90 -0
  4. openshift_python_wrapper-4.21.2/CLAUDE.md +1 -0
  5. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/CONTRIBUTING.md +24 -5
  6. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/PKG-INFO +9 -4
  7. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/README.md +2 -0
  8. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_instance.py +5 -5
  9. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/status_schema_parser.py +6 -6
  10. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/status_templates.py +21 -21
  11. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/migration.py +1 -1
  12. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_namespace_virtual_machine_storage_migration_plan.py +13 -1
  13. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_import.py +1 -1
  14. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/pyproject.toml +7 -4
  15. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/uv.lock +24 -233
  16. openshift_python_wrapper-4.21.1/.git +0 -1
  17. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.coderabbit.yaml +0 -0
  18. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.dockerignore +0 -0
  19. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.flake8 +0 -0
  20. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.gitattributes +0 -0
  21. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  22. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  23. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.github/pull_request_template.md +0 -0
  24. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.github/weekly-digest.yml +0 -0
  25. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.github/workflows/close-stale-issues.yml +0 -0
  26. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.gitleaks.toml +0 -0
  27. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.readthedocs.yaml +0 -0
  28. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.release-it.json +0 -0
  29. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/.sonarcloud.properties +0 -0
  30. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/LICENSE +0 -0
  31. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/Makefile +0 -0
  32. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/OWNERS +0 -0
  33. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/README.md +0 -0
  34. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/__init__.py +0 -0
  35. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/cli.py +0 -0
  36. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/constants.py +0 -0
  37. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/core/__init__.py +0 -0
  38. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/core/coverage.py +0 -0
  39. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/core/discovery.py +0 -0
  40. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/core/generator.py +0 -0
  41. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/core/schema.py +0 -0
  42. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/exceptions.py +0 -0
  43. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/formatters/__init__.py +0 -0
  44. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/formatters/file_writer.py +0 -0
  45. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/formatters/template_renderer.py +0 -0
  46. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/manifests/class_generator_template.j2 +0 -0
  47. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/parsers/__init__.py +0 -0
  48. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/parsers/explain_parser.py +0 -0
  49. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/parsers/type_parser.py +0 -0
  50. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/parsers/user_code_parser.py +0 -0
  51. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/py.typed +0 -0
  52. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/schema/__cluster_version__.txt +0 -0
  53. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/schema/__resources-mappings.json.gz +0 -0
  54. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/schema/_definitions.json +0 -0
  55. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/APIServer/api_server.py +0 -0
  56. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ClusterOperator/cluster_operator.py +0 -0
  57. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ConfigMap/config_map.py +0 -0
  58. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/DNS/dns_config_openshift_io.py +0 -0
  59. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/DNS/dns_operator_openshift_io.py +0 -0
  60. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Deployment/deployment.py +0 -0
  61. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ImageContentSourcePolicy/image_content_source_policy.py +0 -0
  62. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Ingress/ingress_config_openshift_io.py +0 -0
  63. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Ingress/ingress_networking_k8s_io.py +0 -0
  64. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Machine/machine.py +0 -0
  65. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/NMState/nm_state.py +0 -0
  66. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/OAuth/oauth.py +0 -0
  67. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Pipeline/pipeline.py +0 -0
  68. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Pod/pod.py +0 -0
  69. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/RouteAdvertisements/route_advertisements.py +0 -0
  70. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Secret/secret.py +0 -0
  71. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ServiceMeshMember/service_mesh_member.py +0 -0
  72. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ServingRuntime/serving_runtime.py +0 -0
  73. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/test_parse_explain.j2 +0 -0
  74. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_batch_regeneration.py +0 -0
  75. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_class_generator.py +0 -0
  76. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_cli.py +0 -0
  77. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_generation.py +0 -0
  78. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_resource_discovery.py +0 -0
  79. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_schema_new_functions.py +0 -0
  80. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_schema_parsing.py +0 -0
  81. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_user_code_parser.py +0 -0
  82. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_utils.py +0 -0
  83. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/class_generator/utils.py +0 -0
  84. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/docs/Makefile +0 -0
  85. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/docs/conf.py +0 -0
  86. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/docs/index.rst +0 -0
  87. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/docs/modules.rst +0 -0
  88. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/docs/ocp_resources.rst +0 -0
  89. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/examples/general.py +0 -0
  90. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/examples/node_network_configuration_policy.py +0 -0
  91. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/examples/pods.py +0 -0
  92. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/examples/resource_list.py +0 -0
  93. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/examples/role.py +0 -0
  94. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/examples/special_cases.py +0 -0
  95. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/examples/validation_demo.py +0 -0
  96. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/examples/validation_troubleshooting.py +0 -0
  97. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/examples/virtual_machine.py +0 -0
  98. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/README.md +0 -0
  99. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/__init__.py +0 -0
  100. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/configuration.py +0 -0
  101. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/dynamic_client.py +0 -0
  102. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/exceptions.py +0 -0
  103. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/kubernetes_client.py +0 -0
  104. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_field.py +0 -0
  105. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_manager.py +0 -0
  106. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_registry.py +0 -0
  107. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_storage.py +0 -0
  108. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/types.py +0 -0
  109. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/mcp_server/README.md +0 -0
  110. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/mcp_server/__init__.py +0 -0
  111. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/mcp_server/example_client.py +0 -0
  112. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/mcp_server/server-info.json +0 -0
  113. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/mcp_server/server.py +0 -0
  114. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/mcp_server/tests/__init__.py +0 -0
  115. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/mcp_server/tests/test_server.py +0 -0
  116. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/__init__.py +0 -0
  117. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/aaq.py +0 -0
  118. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/api_server.py +0 -0
  119. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/api_service.py +0 -0
  120. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/application_aware_applied_cluster_resource_quota.py +0 -0
  121. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/application_aware_cluster_resource_quota.py +0 -0
  122. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/application_aware_resource_quota.py +0 -0
  123. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/authentication_config_openshift_io.py +0 -0
  124. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/authentication_operator_openshift_io.py +0 -0
  125. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/authorino.py +0 -0
  126. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/backup.py +0 -0
  127. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/benchmark.py +0 -0
  128. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/bgp_session_state.py +0 -0
  129. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/catalog_source.py +0 -0
  130. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/cdi.py +0 -0
  131. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/cdi_config.py +0 -0
  132. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/chaos_engine.py +0 -0
  133. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/chaos_result.py +0 -0
  134. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_claim.py +0 -0
  135. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_deployment.py +0 -0
  136. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_operator.py +0 -0
  137. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_pool.py +0 -0
  138. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_resource_quota.py +0 -0
  139. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_role.py +0 -0
  140. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_role_binding.py +0 -0
  141. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_service_version.py +0 -0
  142. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_user_defined_network.py +0 -0
  143. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_version.py +0 -0
  144. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/config_imageregistry_operator_openshift_io.py +0 -0
  145. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/config_map.py +0 -0
  146. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/config_operator_openshift_io.py +0 -0
  147. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/config_samples_operator_openshift_io.py +0 -0
  148. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/console_cli_download.py +0 -0
  149. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/console_config_openshift_io.py +0 -0
  150. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/console_operator_openshift_io.py +0 -0
  151. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/console_plugin.py +0 -0
  152. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/console_quick_start.py +0 -0
  153. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/controller_revision.py +0 -0
  154. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/cron_job.py +0 -0
  155. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/csi_driver.py +0 -0
  156. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/csi_storage_capacity.py +0 -0
  157. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/custom_resource_definition.py +0 -0
  158. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/daemonset.py +0 -0
  159. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/data_import_cron.py +0 -0
  160. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/data_science_cluster.py +0 -0
  161. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/data_science_pipelines_application.py +0 -0
  162. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/data_source.py +0 -0
  163. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/datavolume.py +0 -0
  164. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/deployment.py +0 -0
  165. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/destination_rule.py +0 -0
  166. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/direct_volume_migration.py +0 -0
  167. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/direct_volume_migration_progress.py +0 -0
  168. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/dns_config_openshift_io.py +0 -0
  169. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/dns_operator_openshift_io.py +0 -0
  170. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/dsc_initialization.py +0 -0
  171. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/endpoint_slice.py +0 -0
  172. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/endpoints.py +0 -0
  173. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/event.py +0 -0
  174. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/exceptions.py +0 -0
  175. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/fence_agent_remediation_templates.py +0 -0
  176. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/forklift_controller.py +0 -0
  177. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/frr_configuration.py +0 -0
  178. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway.py +0 -0
  179. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway_class.py +0 -0
  180. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway_config.py +0 -0
  181. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway_gateway_networking_k8s_io.py +0 -0
  182. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway_networking_istio_io.py +0 -0
  183. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/group.py +0 -0
  184. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/guardrails_orchestrator.py +0 -0
  185. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/hook.py +0 -0
  186. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/host.py +0 -0
  187. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/hostpath_provisioner.py +0 -0
  188. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/hyperconverged.py +0 -0
  189. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/image_caching_internal_knative_dev.py +0 -0
  190. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/image_config_openshift_io.py +0 -0
  191. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/image_content_source_policy.py +0 -0
  192. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/image_digest_mirror_set.py +0 -0
  193. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/image_image_openshift_io.py +0 -0
  194. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/image_stream.py +0 -0
  195. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/imagestreamtag.py +0 -0
  196. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/inference_graph.py +0 -0
  197. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/inference_service.py +0 -0
  198. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/infrastructure.py +0 -0
  199. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/ingress_config_openshift_io.py +0 -0
  200. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/ingress_controller.py +0 -0
  201. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/ingress_networking_k8s_io.py +0 -0
  202. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/installplan.py +0 -0
  203. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/ip_address_pool.py +0 -0
  204. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/jaeger.py +0 -0
  205. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/job.py +0 -0
  206. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/kube_descheduler.py +0 -0
  207. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/kubelet_config.py +0 -0
  208. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/kubevirt.py +0 -0
  209. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/l2_advertisement.py +0 -0
  210. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/lease.py +0 -0
  211. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/limit_range.py +0 -0
  212. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/llama_stack_distribution.py +0 -0
  213. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/llm_inference_service.py +0 -0
  214. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/lm_eval_job.py +0 -0
  215. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/machine.py +0 -0
  216. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/machine_config.py +0 -0
  217. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/machine_config_pool.py +0 -0
  218. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/machine_health_check.py +0 -0
  219. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/machine_set.py +0 -0
  220. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/managed_cluster.py +0 -0
  221. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/maria_db.py +0 -0
  222. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/mariadb_operator.py +0 -0
  223. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/metallb.py +0 -0
  224. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_analytic.py +0 -0
  225. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_cluster.py +0 -0
  226. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_controller.py +0 -0
  227. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_migration.py +0 -0
  228. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_plan.py +0 -0
  229. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/migration_policy.py +0 -0
  230. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/model_registry.py +0 -0
  231. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/model_registry_components_platform_opendatahub_io.py +0 -0
  232. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/model_registry_modelregistry_opendatahub_io.py +0 -0
  233. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/mtq.py +0 -0
  234. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_cluster_hub.py +0 -0
  235. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_cluster_observability.py +0 -0
  236. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_namespace_virtual_machine_storage_migration.py +0 -0
  237. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_network_policy.py +0 -0
  238. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/mutating_webhook_config.py +0 -0
  239. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/namespace.py +0 -0
  240. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/network_addons_config.py +0 -0
  241. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/network_attachment_definition.py +0 -0
  242. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/network_config_openshift_io.py +0 -0
  243. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/network_map.py +0 -0
  244. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/network_operator_openshift_io.py +0 -0
  245. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/network_policy.py +0 -0
  246. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/nm_state.py +0 -0
  247. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/node.py +0 -0
  248. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/node_config_openshift_io.py +0 -0
  249. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/node_health_check.py +0 -0
  250. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/node_maintenance.py +0 -0
  251. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/node_network_configuration_enactment.py +0 -0
  252. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/node_network_configuration_policy.py +0 -0
  253. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/node_network_configuration_policy_latest.py +0 -0
  254. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/node_network_state.py +0 -0
  255. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/notebook.py +0 -0
  256. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/oauth.py +0 -0
  257. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/ocs_initialization.py +0 -0
  258. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/open_telemetry_collector.py +0 -0
  259. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/operator.py +0 -0
  260. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/operator_condition.py +0 -0
  261. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/operator_group.py +0 -0
  262. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/operator_hub.py +0 -0
  263. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/operator_source.py +0 -0
  264. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/package_manifest.py +0 -0
  265. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/peer_authentication.py +0 -0
  266. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/performance_profile.py +0 -0
  267. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/persistent_volume.py +0 -0
  268. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/persistent_volume_claim.py +0 -0
  269. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/pipeline.py +0 -0
  270. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/pipeline_run.py +0 -0
  271. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/plan.py +0 -0
  272. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/pod.py +0 -0
  273. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/pod_disruption_budget.py +0 -0
  274. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/pod_metrics.py +0 -0
  275. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/priority_class.py +0 -0
  276. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/project_config_openshift_io.py +0 -0
  277. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/project_project_openshift_io.py +0 -0
  278. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/project_request.py +0 -0
  279. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/prometheus.py +0 -0
  280. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/prometheus_rule.py +0 -0
  281. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/provider.py +0 -0
  282. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/proxy.py +0 -0
  283. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/py.typed +0 -0
  284. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/rate_limit_policy.py +0 -0
  285. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/reclaim_space_cron_job.py +0 -0
  286. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/reclaim_space_job.py +0 -0
  287. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/replica_set.py +0 -0
  288. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/resource.py +0 -0
  289. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/resource_quota.py +0 -0
  290. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/restore.py +0 -0
  291. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/rhmi.py +0 -0
  292. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/role.py +0 -0
  293. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/role_binding.py +0 -0
  294. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/route.py +0 -0
  295. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/route_advertisements.py +0 -0
  296. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/scaled_object.py +0 -0
  297. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/scheduler.py +0 -0
  298. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/sealed_secret.py +0 -0
  299. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/secret.py +0 -0
  300. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/security_context_constraints.py +0 -0
  301. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/self_node_remediation_templates.py +0 -0
  302. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/self_subject_review.py +0 -0
  303. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/service.py +0 -0
  304. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/service_account.py +0 -0
  305. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/service_mesh_control_plane.py +0 -0
  306. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/service_mesh_member.py +0 -0
  307. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/service_mesh_member_roll.py +0 -0
  308. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/service_monitor.py +0 -0
  309. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/service_serving_knative_dev.py +0 -0
  310. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/serving_runtime.py +0 -0
  311. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/snapshot.py +0 -0
  312. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/sriov_network.py +0 -0
  313. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/sriov_network_node_policy.py +0 -0
  314. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/sriov_network_node_state.py +0 -0
  315. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/ssp.py +0 -0
  316. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/storage_class.py +0 -0
  317. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/storage_cluster.py +0 -0
  318. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/storage_map.py +0 -0
  319. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/storage_profile.py +0 -0
  320. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/subscription.py +0 -0
  321. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/task.py +0 -0
  322. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/task_run.py +0 -0
  323. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/tekton_tasks.py +0 -0
  324. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/template.py +0 -0
  325. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/tempo_stack.py +0 -0
  326. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/token_rate_limit_policy.py +0 -0
  327. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/trustyai_service.py +0 -0
  328. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/upload_token_request.py +0 -0
  329. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/user.py +0 -0
  330. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/user_defined_network.py +0 -0
  331. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/__init__.py +0 -0
  332. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/archive_utils.py +0 -0
  333. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/constants.py +0 -0
  334. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/resource_constants.py +0 -0
  335. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/schema_validator.py +0 -0
  336. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/utils.py +0 -0
  337. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/validating_admission_policy.py +0 -0
  338. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/validating_admission_policy_binding.py +0 -0
  339. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/validating_webhook_config.py +0 -0
  340. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine.py +0 -0
  341. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_clone.py +0 -0
  342. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_cluster_instancetype.py +0 -0
  343. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_cluster_preference.py +0 -0
  344. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_export.py +0 -0
  345. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instance.py +0 -0
  346. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instance_migration.py +0 -0
  347. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instance_preset.py +0 -0
  348. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instance_replica_set.py +0 -0
  349. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instancetype.py +0 -0
  350. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_migration_resource_quota.py +0 -0
  351. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_preference.py +0 -0
  352. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_restore.py +0 -0
  353. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_snapshot.py +0 -0
  354. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_storage_migration.py +0 -0
  355. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_storage_migration_plan.py +0 -0
  356. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_service.py +0 -0
  357. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/vm_import_config.py +0 -0
  358. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/volume_snapshot.py +0 -0
  359. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/ocp_resources/volume_snapshot_class.py +0 -0
  360. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/pypi-dist/.gitignore +0 -0
  361. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/renovate.json +0 -0
  362. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/scripts/__init__.py +0 -0
  363. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/scripts/diff-from-latest-release.sh +0 -0
  364. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/scripts/diff-from-tag.sh +0 -0
  365. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/scripts/generate_changelog.py +0 -0
  366. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/scripts/get-latest-release.sh +0 -0
  367. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/sonar-project.properties +0 -0
  368. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/__init__.py +0 -0
  369. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/conftest.py +0 -0
  370. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/fixtures/validation_schemas.py +0 -0
  371. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/manifests/vm.yaml +0 -0
  372. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/scripts/__init__.py +0 -0
  373. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/scripts/generate_pytest_test.py +0 -0
  374. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/scripts/validate_resources.py +0 -0
  375. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_api_group_order.py +0 -0
  376. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_camelcase_to_snake.py +0 -0
  377. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resource.py +0 -0
  378. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resource_validation.py +0 -0
  379. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_aaq.py +0 -0
  380. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_api_server.py +0 -0
  381. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_authorino.py +0 -0
  382. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_cdi.py +0 -0
  383. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_cdi_config.py +0 -0
  384. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_cluster_resource_quota.py +0 -0
  385. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_cluster_user_defined_network.py +0 -0
  386. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_config_map.py +0 -0
  387. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_console_config_openshift_io.py +0 -0
  388. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_console_operator_openshift_io.py +0 -0
  389. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_csi_driver.py +0 -0
  390. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_data_import_cron.py +0 -0
  391. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_data_science_cluster.py +0 -0
  392. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_deployment.py +0 -0
  393. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_direct_volume_migration.py +0 -0
  394. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_direct_volume_migration_progress.py +0 -0
  395. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_dns_config_openshift_io.py +0 -0
  396. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_dns_operator_openshift_io.py +0 -0
  397. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_dsc_initialization.py +0 -0
  398. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_group.py +0 -0
  399. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_guardrails_orchestrator.py +0 -0
  400. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_image_caching_internal_knative_dev.py +0 -0
  401. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_image_config_openshift_io.py +0 -0
  402. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_image_content_source_policy.py +0 -0
  403. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_image_image_openshift_io.py +0 -0
  404. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_inference_graph.py +0 -0
  405. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_kube_descheduler.py +0 -0
  406. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_kubelet_config.py +0 -0
  407. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_kubevirt.py +0 -0
  408. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_llama_stack_distribution.py +0 -0
  409. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_lm_eval_job.py +0 -0
  410. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_machine.py +0 -0
  411. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_maria_db.py +0 -0
  412. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mariadb_operator.py +0 -0
  413. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mig_analytic.py +0 -0
  414. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mig_cluster.py +0 -0
  415. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mig_migration.py +0 -0
  416. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mig_plan.py +0 -0
  417. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_model_registry.py +0 -0
  418. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_model_registry_components_platform_opendatahub_io.py +0 -0
  419. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_model_registry_modelregistry_opendatahub_io.py +0 -0
  420. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mtq.py +0 -0
  421. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_namespace.py +0 -0
  422. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_network_config_openshift_io.py +0 -0
  423. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_network_operator_openshift_io.py +0 -0
  424. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_nm_state.py +0 -0
  425. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_node.py +0 -0
  426. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_node_config_openshift_io.py +0 -0
  427. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_node_network_configuration_policy_latest.py +0 -0
  428. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_notebook.py +0 -0
  429. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_oauth.py +0 -0
  430. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_operator.py +0 -0
  431. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_pod.py +0 -0
  432. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_pod_metrics.py +0 -0
  433. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_project_config_openshift_io.py +0 -0
  434. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_project_project_openshift_io.py +0 -0
  435. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_project_request.py +0 -0
  436. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_prometheus.py +0 -0
  437. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_replica_set.py +0 -0
  438. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_scheduler.py +0 -0
  439. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_security_context_constraints.py +0 -0
  440. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_self_subject_review.py +0 -0
  441. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_service.py +0 -0
  442. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_service_mesh_member.py +0 -0
  443. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_service_serving_knative_dev.py +0 -0
  444. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_serving_runtime.py +0 -0
  445. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_snapshot.py +0 -0
  446. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_ssp.py +0 -0
  447. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_storage_cluster.py +0 -0
  448. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_user.py +0 -0
  449. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_user_defined_network.py +0 -0
  450. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_cluster_instancetype.py +0 -0
  451. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_cluster_preference.py +0 -0
  452. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_export.py +0 -0
  453. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_instance_migration.py +0 -0
  454. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_instance_preset.py +0 -0
  455. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_instance_replica_set.py +0 -0
  456. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_instancetype.py +0 -0
  457. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_preference.py +0 -0
  458. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_volume_snapshot.py +0 -0
  459. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_volume_snapshot_class.py +0 -0
  460. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_schema_loading.py +0 -0
  461. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_unittests.py +0 -0
  462. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_validate_resources.py +0 -0
  463. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_validate_resources_script.py +0 -0
  464. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/test_validation_error.py +0 -0
  465. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tests/utils.py +0 -0
  466. {openshift_python_wrapper-4.21.1 → openshift_python_wrapper-4.21.2}/tox.toml +0 -0
@@ -131,7 +131,6 @@ package-lock.json
131
131
 
132
132
  # AI
133
133
  .cursor/
134
- CLAUDE.md
135
134
  .agent-os/
136
135
  .cursorrules
137
136
  .claude/
@@ -2,7 +2,7 @@ minimum_pre_commit_version: 3.3.0
2
2
  default_install_hook_types: [pre-commit, commit-msg]
3
3
 
4
4
  default_language_version:
5
- python: python3
5
+ python: python3.11
6
6
 
7
7
  ci:
8
8
  autofix_prs: false
@@ -0,0 +1,90 @@
1
+ # openshift-python-wrapper
2
+
3
+ Python wrapper for kubernetes-python-client providing simplified CRUD and resource-specific methods for Kubernetes/OpenShift resources (233+ wrappers).
4
+
5
+ ## Commands
6
+
7
+ - **Package manager**: `uv` — NEVER use `python` or `pip` directly
8
+ - Build/sync: `uv sync`
9
+ - Test all: `uv run --group tests pytest`
10
+ - Test specific: `uv run --group tests pytest tests/test_daemonset.py`
11
+ - Lint: `prek run`
12
+ - Pre-commit setup: `prek install`
13
+ - Generate resource: `class-generator --kind Pod --add-tests`
14
+ - Full verify: `prek run && uv run --group tests pytest`
15
+
16
+ ## Definition of Done
17
+
18
+ A task is complete when ALL pass:
19
+ 1. `prek run` exits 0 (ruff, mypy, flake8, detect-secrets, gitleaks)
20
+ 2. `uv run --group tests pytest` exits 0 — coverage ≥ 65%
21
+ 3. Type hints on all new code (enforced by mypy)
22
+ 4. Committed with message: `type(scope): description`
23
+
24
+ ## When Blocked
25
+
26
+ - Tests fail after 3 attempts → stop, report failing test with full output
27
+ - Missing dependency → `uv add <package>`, never `pip install`
28
+ - Pre-commit fails → read the error, fix the specific violation
29
+ - 🚫 NEVER: skip tests, force push to main, delete files to fix errors
30
+
31
+ ## Project
32
+
33
+ - Stack: Python 3.11-3.14 (requires-python >=3.11,<3.15), kubernetes-python-client, timeout-sampler, uv
34
+ - Structure: `ocp_resources/` (resource wrappers), `tests/` (pytest), `class_generator/` (code gen), `fake_kubernetes_client/` (mock client)
35
+ - Key deps: `kubernetes` (API client), `timeout-sampler` (polling), `openshift-python-utilities` (shared utils)
36
+ - Docs: `examples/`, inline docstrings (Google style)
37
+
38
+ ## When Adding a Resource
39
+
40
+ - New resources MUST be generated via `class-generator --kind ResourceName --add-tests` — manual creation is not allowed
41
+ - Reference implementations: `ocp_resources/config_map.py` (namespaced), `ocp_resources/node.py` (cluster-scoped)
42
+ - File naming: `snake_case.py` — class naming: exact Kubernetes `kind` (PascalCase)
43
+ - Namespaced → inherit `NamespacedResource`, cluster-scoped → inherit `Resource`
44
+ - Must implement: `__init__()`, `to_dict()`, `api_group` (if not core v1)
45
+ - Reference: `class_generator/README.md`
46
+
47
+ ## Generated Code Markers
48
+
49
+ Resource files from `class-generator` use markers to separate generated from manual code:
50
+ - **Start**: `# Generated using https://...class_generator/README.md` (line 1)
51
+ - **End**: `# End of generated code` (inside class)
52
+
53
+ Code between markers is auto-generated — do NOT modify manually. Use `class-generator --kind <Kind> --overwrite --backup` to regenerate. Custom code (helper methods, overrides) goes BELOW the end marker.
54
+
55
+ ## When Writing Code
56
+
57
+ - No client-side validation in `to_dict()` — let the K8s/OCP API server return errors. Helper functions in resource classes CAN validate.
58
+ - Context managers for auto-cleanup: `with Pod(name="test", namespace="default") as pod:`
59
+ - Wait utilities: `wait_for_status()`, `wait_for_condition()` via timeout-sampler
60
+ - Sensitive data: add keys to `keys_to_hash` property for automatic log hashing
61
+ - Fake client for tests: `get_client(fake=True)` — no cluster required
62
+
63
+ ## When Reviewing Code
64
+
65
+ - Verify generated code markers are intact — no manual edits between markers
66
+ - Check type hints on all new functions/parameters
67
+ - Verify tests exist for new helper methods (not needed for generated `__init__`/`to_dict`)
68
+ - Import path: `ocp_resources.resource_name` (snake_case with underscores)
69
+
70
+ ## Boundaries
71
+
72
+ - ✅ Always: use `uv` for Python ops, run `prek install` before first commit, add typing
73
+ - ⚠️ Ask first: adding new dependencies, modifying base `Resource` class, changing CI
74
+ - 🚫 Never: use `python`/`pip` directly, edit generated code between markers, edit files in `docs/` (regenerate with docsfy instead)
75
+
76
+ ## Environment
77
+
78
+ ```bash
79
+ OPENSHIFT_PYTHON_WRAPPER_LOG_LEVEL=DEBUG # DEBUG, INFO, WARNING, ERROR, CRITICAL
80
+ OPENSHIFT_PYTHON_WRAPPER_HASH_LOG_DATA="false" # Disable log hashing
81
+ HTTPS_PROXY="http://proxy:8080" # Proxy support
82
+ ```
83
+
84
+ ## Additional References
85
+
86
+ - Contributing guide: `CONTRIBUTING.md`
87
+ - Class generator details: `class_generator/README.md`
88
+ - MCP server: `mcp_server/README.md`
89
+ - Release process: `CONTRIBUTING.md` + `.release-it.json`
90
+ - Fake client: `fake_kubernetes_client/` (CRUD, selectors, watch, status generation)
@@ -0,0 +1 @@
1
+ @AGENTS.md
@@ -12,7 +12,7 @@ To get an overview of the project, read the [README](README.md).
12
12
  ### Create a new issue
13
13
 
14
14
  If you find a problem with the code, [search if an issue already exists](https://github.com/RedHatQE/openshift-python-wrapper/issues).
15
- If you open a pull request to fix the problem, an issue will ba automatically created.
15
+ If you open a pull request to fix the problem, an issue will be automatically created.
16
16
  If a related issue doesn't exist, you can open a new issue using a relevant [issue form](https://github.com/RedHatQE/openshift-python-wrapper/issues/new/choose).
17
17
 
18
18
  ## Pull requests
@@ -37,13 +37,15 @@ prek install
37
37
 
38
38
  ## Adding a new module (resource)
39
39
 
40
- ##### Using generator script
40
+ ##### Using generator script (REQUIRED)
41
+
42
+ New resources MUST be added via the class generator — manual creation is not allowed.
41
43
 
42
44
  - [class_generator](class_generator/README.md)
43
45
 
44
- ##### Manual
46
+ ##### Manual code (below `# End of generated code` only)
45
47
 
46
- A new resource must follow rules:
48
+ Custom helper methods can be added below the end marker. The generated class structure must follow these rules:
47
49
 
48
50
  - A new file named as the resource under `ocp_resources`; If the resource name is composed of multiple words, separate them with an underscore.
49
51
  - A class named as the resource kind.
@@ -56,4 +58,21 @@ A new resource must follow rules:
56
58
  Define all the required arguments that are **required** to instantiate the new resource. Optional parameters may be added as well.
57
59
  - Implement `to_dict` function.
58
60
 
59
- Check [ConfigMap](ocp_resources/configmap.py) and [Backup](ocp_resources/backup.py) for reference.
61
+ Check [ConfigMap](ocp_resources/config_map.py) and [Node](ocp_resources/node.py) for reference.
62
+
63
+ ### Generated code markers
64
+
65
+ Resource files created by `class-generator` use markers to separate generated from manual code:
66
+
67
+ - **Start marker** (line 1): `# Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/class_generator/README.md`
68
+ - **End marker** (inside class): `# End of generated code`
69
+
70
+ Code between these markers is **auto-generated and must NOT be modified manually**.
71
+ To update generated code, use `class-generator --kind <Kind> --overwrite --backup`.
72
+ Custom code (helper methods, overrides) goes **below** the `# End of generated code` marker.
73
+
74
+ ### No client-side validation on resource creation
75
+
76
+ When building resource payloads (`to_dict()`), do NOT validate or block at code level (e.g., mutual exclusivity of fields).
77
+ If a payload can be sent to the API, send it — let the Kubernetes/OpenShift API server return the error.
78
+ Helper functions in resource classes (e.g., `wait_for_rollout()`, `restart()`) CAN perform validation and guarding as needed.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: openshift-python-wrapper
3
- Version: 4.21.1
3
+ Version: 4.21.2
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/
@@ -13,7 +13,11 @@ License-File: LICENSE
13
13
  Keywords: Kubevirt,Openshift,Openshift Virtualization
14
14
  Classifier: Operating System :: OS Independent
15
15
  Classifier: Programming Language :: Python :: 3
16
- Requires-Python: >=3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Requires-Python: <3.15,>=3.11
17
21
  Requires-Dist: cloup>=3.0.5
18
22
  Requires-Dist: colorlog>=6.8.2
19
23
  Requires-Dist: deepdiff>=8.0.1
@@ -27,7 +31,6 @@ Requires-Dist: python-benedict>=0.33.2
27
31
  Requires-Dist: python-simple-logger>=1.0.40
28
32
  Requires-Dist: requests>=2.32.2
29
33
  Requires-Dist: rich>=13.9.2
30
- Requires-Dist: ruff>=0.6.9
31
34
  Requires-Dist: timeout-sampler>=0.0.46
32
35
  Requires-Dist: xmltodict>=0.13.0
33
36
  Description-Content-Type: text/markdown
@@ -61,6 +64,8 @@ Resource manifests and logs can be easily collected.
61
64
 
62
65
  ## Installation
63
66
 
67
+ Requires Python 3.11-3.14.
68
+
64
69
  From source:
65
70
 
66
71
  ```bash
@@ -27,6 +27,8 @@ Resource manifests and logs can be easily collected.
27
27
 
28
28
  ## Installation
29
29
 
30
+ Requires Python 3.11-3.14.
31
+
30
32
  From source:
31
33
 
32
34
  ```bash
@@ -4,7 +4,7 @@ import copy
4
4
  import time
5
5
  import uuid
6
6
  from collections.abc import Iterator
7
- from datetime import datetime, timezone
7
+ from datetime import UTC, datetime
8
8
  from typing import TYPE_CHECKING, Any, Union
9
9
 
10
10
  from fake_kubernetes_client.exceptions import ConflictError, MethodNotAllowedError, NotFoundError
@@ -66,7 +66,7 @@ class FakeResourceInstance:
66
66
 
67
67
  def _generate_timestamp(self) -> str:
68
68
  """Generate current UTC timestamp in ISO format"""
69
- return datetime.now(timezone.utc).isoformat()
69
+ return datetime.now(UTC).isoformat()
70
70
 
71
71
  def create(
72
72
  self, body: dict[str, Any] | None = None, namespace: str | None = None, **_kwargs: Any
@@ -208,7 +208,7 @@ class FakeResourceInstance:
208
208
  "namespace": resource_namespace or "default",
209
209
  "uid": str(uuid.uuid4()),
210
210
  "resourceVersion": str(int(time.time() * 1000)),
211
- "creationTimestamp": datetime.now(timezone.utc).isoformat(),
211
+ "creationTimestamp": datetime.now(UTC).isoformat(),
212
212
  "generation": 1,
213
213
  },
214
214
  "involvedObject": {
@@ -222,8 +222,8 @@ class FakeResourceInstance:
222
222
  "reason": reason,
223
223
  "message": f"{resource_kind} {resource_name} has been {action}",
224
224
  "source": {"component": "fake-client", "host": "fake-cluster.example.com"},
225
- "firstTimestamp": datetime.now(timezone.utc).isoformat(),
226
- "lastTimestamp": datetime.now(timezone.utc).isoformat(),
225
+ "firstTimestamp": datetime.now(UTC).isoformat(),
226
+ "lastTimestamp": datetime.now(UTC).isoformat(),
227
227
  "count": 1,
228
228
  "type": "Normal",
229
229
  }
@@ -3,7 +3,7 @@
3
3
  import json
4
4
  import os
5
5
  import random
6
- from datetime import datetime, timezone
6
+ from datetime import UTC, datetime
7
7
  from typing import Any
8
8
 
9
9
 
@@ -302,7 +302,7 @@ class StatusSchemaParser:
302
302
  def _generate_string_value(self, field_name: str, is_ready: bool = True) -> str:
303
303
  """Generate a string value based on field name"""
304
304
  if "time" in field_name.lower() or "timestamp" in field_name.lower():
305
- return datetime.now(timezone.utc).isoformat()
305
+ return datetime.now(UTC).isoformat()
306
306
  elif field_name == "message":
307
307
  return "Resource is ready" if is_ready else "Resource is not ready"
308
308
  elif field_name == "reason":
@@ -424,14 +424,14 @@ class StatusSchemaParser:
424
424
  {
425
425
  "type": "Ready",
426
426
  "status": "True",
427
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
427
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
428
428
  "reason": "ResourceReady",
429
429
  "message": "Resource is ready",
430
430
  },
431
431
  {
432
432
  "type": "Available",
433
433
  "status": "True",
434
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
434
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
435
435
  "reason": "ResourceAvailable",
436
436
  "message": "Resource is available",
437
437
  },
@@ -441,14 +441,14 @@ class StatusSchemaParser:
441
441
  {
442
442
  "type": "Ready",
443
443
  "status": "False",
444
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
444
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
445
445
  "reason": "ResourceNotReady",
446
446
  "message": "Resource is not ready",
447
447
  },
448
448
  {
449
449
  "type": "Available",
450
450
  "status": "False",
451
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
451
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
452
452
  "reason": "ResourceUnavailable",
453
453
  "message": "Resource is unavailable",
454
454
  },
@@ -1,6 +1,6 @@
1
1
  """Status template methods for fake Kubernetes resources"""
2
2
 
3
- from datetime import datetime, timezone
3
+ from datetime import UTC, datetime
4
4
  from typing import Any
5
5
 
6
6
  from fake_kubernetes_client.status_schema_parser import StatusSchemaParser
@@ -99,7 +99,7 @@ def get_pod_status_template(body: dict[str, Any]) -> dict[str, Any]:
99
99
  ready_message = "All containers are ready"
100
100
  container_ready = True
101
101
  container_started = True
102
- container_state = {"running": {"startedAt": datetime.now(timezone.utc).isoformat()}}
102
+ container_state = {"running": {"startedAt": datetime.now(UTC).isoformat()}}
103
103
 
104
104
  # Check pod-specific annotation first
105
105
  if "fake-client.io/pod-ready" in annotations:
@@ -133,7 +133,7 @@ def get_pod_status_template(body: dict[str, Any]) -> dict[str, Any]:
133
133
  ready_message = "All containers are ready"
134
134
  container_ready = True
135
135
  container_started = True
136
- container_state = {"running": {"startedAt": datetime.now(timezone.utc).isoformat()}}
136
+ container_state = {"running": {"startedAt": datetime.now(UTC).isoformat()}}
137
137
 
138
138
  return {
139
139
  "phase": "Running",
@@ -142,14 +142,14 @@ def get_pod_status_template(body: dict[str, Any]) -> dict[str, Any]:
142
142
  "type": "Initialized",
143
143
  "status": "True",
144
144
  "lastProbeTime": None,
145
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
145
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
146
146
  "reason": "PodCompleted",
147
147
  },
148
148
  {
149
149
  "type": "Ready",
150
150
  "status": ready_status, # Now configurable, defaults to True
151
151
  "lastProbeTime": None,
152
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
152
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
153
153
  "reason": ready_reason,
154
154
  "message": ready_message,
155
155
  },
@@ -157,7 +157,7 @@ def get_pod_status_template(body: dict[str, Any]) -> dict[str, Any]:
157
157
  "type": "ContainersReady",
158
158
  "status": ready_status, # Should match Ready status
159
159
  "lastProbeTime": None,
160
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
160
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
161
161
  "reason": ready_reason,
162
162
  "message": ready_message,
163
163
  },
@@ -165,14 +165,14 @@ def get_pod_status_template(body: dict[str, Any]) -> dict[str, Any]:
165
165
  "type": "PodScheduled",
166
166
  "status": "True",
167
167
  "lastProbeTime": None,
168
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
168
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
169
169
  "reason": "PodScheduled",
170
170
  },
171
171
  ],
172
172
  "hostIP": "10.0.0.1",
173
173
  "podIP": "10.244.0.2",
174
174
  "podIPs": [{"ip": "10.244.0.2"}],
175
- "startTime": datetime.now(timezone.utc).isoformat(),
175
+ "startTime": datetime.now(UTC).isoformat(),
176
176
  "containerStatuses": [
177
177
  {
178
178
  "name": container_name,
@@ -207,16 +207,16 @@ def get_deployment_status_template(body: dict[str, Any]) -> dict[str, Any]:
207
207
  {
208
208
  "type": "Available",
209
209
  "status": "True",
210
- "lastUpdateTime": datetime.now(timezone.utc).isoformat(),
211
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
210
+ "lastUpdateTime": datetime.now(UTC).isoformat(),
211
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
212
212
  "reason": "MinimumReplicasAvailable",
213
213
  "message": "Deployment has minimum availability.",
214
214
  },
215
215
  {
216
216
  "type": "Progressing",
217
217
  "status": "True",
218
- "lastUpdateTime": datetime.now(timezone.utc).isoformat(),
219
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
218
+ "lastUpdateTime": datetime.now(UTC).isoformat(),
219
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
220
220
  "reason": "NewReplicaSetAvailable",
221
221
  "message": "ReplicaSet has successfully progressed.",
222
222
  },
@@ -235,16 +235,16 @@ def get_deployment_status_template(body: dict[str, Any]) -> dict[str, Any]:
235
235
  {
236
236
  "type": "Available",
237
237
  "status": "False",
238
- "lastUpdateTime": datetime.now(timezone.utc).isoformat(),
239
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
238
+ "lastUpdateTime": datetime.now(UTC).isoformat(),
239
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
240
240
  "reason": "MinimumReplicasUnavailable",
241
241
  "message": "Deployment does not have minimum availability.",
242
242
  },
243
243
  {
244
244
  "type": "Progressing",
245
245
  "status": "False",
246
- "lastUpdateTime": datetime.now(timezone.utc).isoformat(),
247
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
246
+ "lastUpdateTime": datetime.now(UTC).isoformat(),
247
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
248
248
  "reason": "ProgressDeadlineExceeded",
249
249
  "message": "ReplicaSet has timed out progressing.",
250
250
  },
@@ -270,14 +270,14 @@ def get_namespace_status_template(body: dict[str, Any]) -> dict[str, Any]:
270
270
  {
271
271
  "type": "NamespaceDeletionDiscoveryFailure",
272
272
  "status": "False",
273
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
273
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
274
274
  "reason": "ResourcesDiscovered",
275
275
  "message": "All resources successfully discovered",
276
276
  },
277
277
  {
278
278
  "type": "NamespaceDeletionContentFailure",
279
279
  "status": "False",
280
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
280
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
281
281
  "reason": "ContentDeleted",
282
282
  "message": "All content successfully deleted",
283
283
  },
@@ -291,14 +291,14 @@ def get_namespace_status_template(body: dict[str, Any]) -> dict[str, Any]:
291
291
  {
292
292
  "type": "NamespaceDeletionDiscoveryFailure",
293
293
  "status": "True",
294
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
294
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
295
295
  "reason": "DiscoveryFailed",
296
296
  "message": "Discovery failed for some resources",
297
297
  },
298
298
  {
299
299
  "type": "NamespaceDeletionContentFailure",
300
300
  "status": "True",
301
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
301
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
302
302
  "reason": "ContentDeletionFailed",
303
303
  "message": "Failed to delete all content",
304
304
  },
@@ -316,7 +316,7 @@ def get_generic_status_template(body: dict[str, Any]) -> dict[str, Any]:
316
316
  {
317
317
  "type": "Ready",
318
318
  "status": ready_status,
319
- "lastTransitionTime": datetime.now(timezone.utc).isoformat(),
319
+ "lastTransitionTime": datetime.now(UTC).isoformat(),
320
320
  "reason": ready_reason,
321
321
  "message": ready_message,
322
322
  }
@@ -54,4 +54,4 @@ class Migration(NamespacedResource):
54
54
  })
55
55
 
56
56
  if self.cut_over:
57
- self.res["spec"]["cutover"] = self.cut_over.strftime(format="%Y-%m-%dT%H:%M:%SZ")
57
+ self.res["spec"]["cutover"] = self.cut_over.strftime("%Y-%m-%dT%H:%M:%SZ")
@@ -17,16 +17,25 @@ class MultiNamespaceVirtualMachineStorageMigrationPlan(NamespacedResource):
17
17
  def __init__(
18
18
  self,
19
19
  namespaces: list[Any] | None = None,
20
+ retention_policy: str | None = None,
20
21
  **kwargs: Any,
21
22
  ) -> None:
22
23
  r"""
23
24
  Args:
24
- namespaces (list[Any]): The virtual machines to migrate.
25
+ namespaces (list[Any]): The virtual machines to migrate per namespace.
26
+
27
+ retention_policy (str): RetentionPolicy indicates whether to keep or delete the source
28
+ DataVolume/PVC after each VM migration completes in each created
29
+ namespace plan. When set to "deleteSource", every created
30
+ VirtualMachineStorageMigrationPlan will have retentionPolicy set
31
+ to deleteSource. When "keepSource" or unset, child plans keep
32
+ their per-namespace spec or default to keepSource.
25
33
 
26
34
  """
27
35
  super().__init__(**kwargs)
28
36
 
29
37
  self.namespaces = namespaces
38
+ self.retention_policy = retention_policy
30
39
 
31
40
  def to_dict(self) -> None:
32
41
 
@@ -41,4 +50,7 @@ class MultiNamespaceVirtualMachineStorageMigrationPlan(NamespacedResource):
41
50
 
42
51
  _spec["namespaces"] = self.namespaces
43
52
 
53
+ if self.retention_policy is not None:
54
+ _spec["retentionPolicy"] = self.retention_policy
55
+
44
56
  # End of generated code
@@ -162,7 +162,7 @@ class VirtualMachineImport(NamespacedResource):
162
162
  if self.warm:
163
163
  spec["warm"] = self.warm
164
164
  if self.finalize_date:
165
- spec["finalizeDate"] = self.finalize_date.strftime(format="%Y-%m-%dT%H:%M:%SZ")
165
+ spec["finalizeDate"] = self.finalize_date.strftime("%Y-%m-%dT%H:%M:%SZ")
166
166
 
167
167
  provider_source = spec.setdefault("source", {}).setdefault(self.provider_type, {})
168
168
  vm = provider_source.setdefault("vm", {})
@@ -70,15 +70,19 @@ include = [
70
70
  ]
71
71
 
72
72
  [project]
73
- requires-python = ">=3.10"
73
+ requires-python = ">=3.11,<3.15"
74
74
  name = "openshift-python-wrapper"
75
- version = "4.21.1"
75
+ version = "4.21.2"
76
76
  description = "Wrapper around https://github.com/kubernetes-client/python"
77
77
  readme = "README.md"
78
78
  license = "Apache-2.0"
79
79
  keywords = ["Openshift", "Kubevirt", "Openshift Virtualization"]
80
80
  classifiers = [
81
81
  "Programming Language :: Python :: 3",
82
+ "Programming Language :: Python :: 3.11",
83
+ "Programming Language :: Python :: 3.12",
84
+ "Programming Language :: Python :: 3.13",
85
+ "Programming Language :: Python :: 3.14",
82
86
  "Operating System :: OS Independent",
83
87
  ]
84
88
  dependencies = [
@@ -94,7 +98,6 @@ dependencies = [
94
98
  "python-simple-logger>=1.0.40",
95
99
  "requests>=2.32.2",
96
100
  "rich>=13.9.2",
97
- "ruff>=0.6.9",
98
101
  "timeout-sampler>=0.0.46",
99
102
  "xmltodict>=0.13.0",
100
103
  "fastmcp>=2.10.4",
@@ -132,4 +135,4 @@ build-backend = "hatchling.build"
132
135
 
133
136
  [dependency-groups]
134
137
  tests = ["pytest>=8.3.5", "pytest-cov>=6.1.1"]
135
- dev = ["ipdb>=0.13.13", "ipython>=8.12.3"]
138
+ dev = ["ipdb>=0.13.13", "ipython>=8.12.3", "ruff>=0.6.9"]