openshift-python-wrapper 4.21.0__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 (468) hide show
  1. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.gitignore +0 -1
  2. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.pre-commit-config.yaml +4 -4
  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.0 → openshift_python_wrapper-4.21.2}/CONTRIBUTING.md +24 -5
  6. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/PKG-INFO +10 -5
  7. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/README.md +2 -0
  8. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/cli.py +1 -1
  9. openshift_python_wrapper-4.21.2/class_generator/formatters/file_writer.py +71 -0
  10. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/manifests/class_generator_template.j2 +5 -1
  11. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/test_parse_explain.j2 +10 -15
  12. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_class_generator.py +4 -6
  13. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_cli.py +3 -1
  14. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_instance.py +5 -5
  15. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/status_schema_parser.py +6 -6
  16. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/status_templates.py +21 -21
  17. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/tests/test_server.py +10 -10
  18. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/migration.py +1 -1
  19. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_namespace_virtual_machine_storage_migration_plan.py +13 -1
  20. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_import.py +1 -1
  21. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/pyproject.toml +8 -5
  22. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/scripts/generate_pytest_test.py +1 -1
  23. openshift_python_wrapper-4.21.2/uv.lock +2554 -0
  24. openshift_python_wrapper-4.21.0/.git +0 -1
  25. openshift_python_wrapper-4.21.0/class_generator/formatters/file_writer.py +0 -36
  26. openshift_python_wrapper-4.21.0/uv.lock +0 -2643
  27. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.coderabbit.yaml +0 -0
  28. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.dockerignore +0 -0
  29. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.flake8 +0 -0
  30. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.gitattributes +0 -0
  31. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  32. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  33. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.github/pull_request_template.md +0 -0
  34. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.github/weekly-digest.yml +0 -0
  35. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.github/workflows/close-stale-issues.yml +0 -0
  36. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.gitleaks.toml +0 -0
  37. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.readthedocs.yaml +0 -0
  38. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.release-it.json +0 -0
  39. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/.sonarcloud.properties +0 -0
  40. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/LICENSE +0 -0
  41. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/Makefile +0 -0
  42. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/OWNERS +0 -0
  43. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/README.md +0 -0
  44. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/__init__.py +0 -0
  45. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/constants.py +0 -0
  46. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/core/__init__.py +0 -0
  47. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/core/coverage.py +0 -0
  48. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/core/discovery.py +0 -0
  49. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/core/generator.py +0 -0
  50. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/core/schema.py +0 -0
  51. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/exceptions.py +0 -0
  52. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/formatters/__init__.py +0 -0
  53. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/formatters/template_renderer.py +0 -0
  54. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/parsers/__init__.py +0 -0
  55. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/parsers/explain_parser.py +0 -0
  56. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/parsers/type_parser.py +0 -0
  57. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/parsers/user_code_parser.py +0 -0
  58. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/py.typed +0 -0
  59. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/schema/__cluster_version__.txt +0 -0
  60. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/schema/__resources-mappings.json.gz +0 -0
  61. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/schema/_definitions.json +0 -0
  62. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/APIServer/api_server.py +0 -0
  63. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ClusterOperator/cluster_operator.py +0 -0
  64. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ConfigMap/config_map.py +0 -0
  65. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/DNS/dns_config_openshift_io.py +0 -0
  66. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/DNS/dns_operator_openshift_io.py +0 -0
  67. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Deployment/deployment.py +0 -0
  68. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ImageContentSourcePolicy/image_content_source_policy.py +0 -0
  69. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Ingress/ingress_config_openshift_io.py +0 -0
  70. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Ingress/ingress_networking_k8s_io.py +0 -0
  71. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Machine/machine.py +0 -0
  72. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/NMState/nm_state.py +0 -0
  73. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/OAuth/oauth.py +0 -0
  74. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Pipeline/pipeline.py +0 -0
  75. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Pod/pod.py +0 -0
  76. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/RouteAdvertisements/route_advertisements.py +0 -0
  77. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/Secret/secret.py +0 -0
  78. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ServiceMeshMember/service_mesh_member.py +0 -0
  79. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/manifests/ServingRuntime/serving_runtime.py +0 -0
  80. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_batch_regeneration.py +0 -0
  81. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_generation.py +0 -0
  82. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_resource_discovery.py +0 -0
  83. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_schema_new_functions.py +0 -0
  84. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_schema_parsing.py +0 -0
  85. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_user_code_parser.py +0 -0
  86. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/tests/test_utils.py +0 -0
  87. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/class_generator/utils.py +0 -0
  88. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/docs/Makefile +0 -0
  89. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/docs/conf.py +0 -0
  90. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/docs/index.rst +0 -0
  91. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/docs/modules.rst +0 -0
  92. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/docs/ocp_resources.rst +0 -0
  93. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/general.py +0 -0
  94. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/node_network_configuration_policy.py +0 -0
  95. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/pods.py +0 -0
  96. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/resource_list.py +0 -0
  97. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/role.py +0 -0
  98. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/special_cases.py +0 -0
  99. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/validation_demo.py +0 -0
  100. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/validation_troubleshooting.py +0 -0
  101. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/examples/virtual_machine.py +0 -0
  102. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/README.md +0 -0
  103. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/__init__.py +0 -0
  104. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/configuration.py +0 -0
  105. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/dynamic_client.py +0 -0
  106. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/exceptions.py +0 -0
  107. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/kubernetes_client.py +0 -0
  108. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_field.py +0 -0
  109. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_manager.py +0 -0
  110. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_registry.py +0 -0
  111. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/resource_storage.py +0 -0
  112. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/fake_kubernetes_client/types.py +0 -0
  113. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/README.md +0 -0
  114. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/__init__.py +0 -0
  115. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/example_client.py +0 -0
  116. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/server-info.json +0 -0
  117. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/server.py +0 -0
  118. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/mcp_server/tests/__init__.py +0 -0
  119. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/__init__.py +0 -0
  120. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/aaq.py +0 -0
  121. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/api_server.py +0 -0
  122. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/api_service.py +0 -0
  123. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/application_aware_applied_cluster_resource_quota.py +0 -0
  124. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/application_aware_cluster_resource_quota.py +0 -0
  125. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/application_aware_resource_quota.py +0 -0
  126. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/authentication_config_openshift_io.py +0 -0
  127. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/authentication_operator_openshift_io.py +0 -0
  128. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/authorino.py +0 -0
  129. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/backup.py +0 -0
  130. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/benchmark.py +0 -0
  131. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/bgp_session_state.py +0 -0
  132. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/catalog_source.py +0 -0
  133. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cdi.py +0 -0
  134. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cdi_config.py +0 -0
  135. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/chaos_engine.py +0 -0
  136. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/chaos_result.py +0 -0
  137. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_claim.py +0 -0
  138. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_deployment.py +0 -0
  139. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_operator.py +0 -0
  140. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_pool.py +0 -0
  141. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_resource_quota.py +0 -0
  142. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_role.py +0 -0
  143. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_role_binding.py +0 -0
  144. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_service_version.py +0 -0
  145. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_user_defined_network.py +0 -0
  146. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cluster_version.py +0 -0
  147. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/config_imageregistry_operator_openshift_io.py +0 -0
  148. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/config_map.py +0 -0
  149. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/config_operator_openshift_io.py +0 -0
  150. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/config_samples_operator_openshift_io.py +0 -0
  151. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/console_cli_download.py +0 -0
  152. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/console_config_openshift_io.py +0 -0
  153. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/console_operator_openshift_io.py +0 -0
  154. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/console_plugin.py +0 -0
  155. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/console_quick_start.py +0 -0
  156. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/controller_revision.py +0 -0
  157. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/cron_job.py +0 -0
  158. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/csi_driver.py +0 -0
  159. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/csi_storage_capacity.py +0 -0
  160. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/custom_resource_definition.py +0 -0
  161. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/daemonset.py +0 -0
  162. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/data_import_cron.py +0 -0
  163. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/data_science_cluster.py +0 -0
  164. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/data_science_pipelines_application.py +0 -0
  165. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/data_source.py +0 -0
  166. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/datavolume.py +0 -0
  167. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/deployment.py +0 -0
  168. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/destination_rule.py +0 -0
  169. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/direct_volume_migration.py +0 -0
  170. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/direct_volume_migration_progress.py +0 -0
  171. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/dns_config_openshift_io.py +0 -0
  172. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/dns_operator_openshift_io.py +0 -0
  173. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/dsc_initialization.py +0 -0
  174. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/endpoint_slice.py +0 -0
  175. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/endpoints.py +0 -0
  176. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/event.py +0 -0
  177. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/exceptions.py +0 -0
  178. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/fence_agent_remediation_templates.py +0 -0
  179. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/forklift_controller.py +0 -0
  180. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/frr_configuration.py +0 -0
  181. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway.py +0 -0
  182. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway_class.py +0 -0
  183. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway_config.py +0 -0
  184. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway_gateway_networking_k8s_io.py +0 -0
  185. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/gateway_networking_istio_io.py +0 -0
  186. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/group.py +0 -0
  187. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/guardrails_orchestrator.py +0 -0
  188. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/hook.py +0 -0
  189. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/host.py +0 -0
  190. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/hostpath_provisioner.py +0 -0
  191. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/hyperconverged.py +0 -0
  192. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/image_caching_internal_knative_dev.py +0 -0
  193. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/image_config_openshift_io.py +0 -0
  194. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/image_content_source_policy.py +0 -0
  195. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/image_digest_mirror_set.py +0 -0
  196. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/image_image_openshift_io.py +0 -0
  197. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/image_stream.py +0 -0
  198. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/imagestreamtag.py +0 -0
  199. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/inference_graph.py +0 -0
  200. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/inference_service.py +0 -0
  201. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/infrastructure.py +0 -0
  202. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/ingress_config_openshift_io.py +0 -0
  203. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/ingress_controller.py +0 -0
  204. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/ingress_networking_k8s_io.py +0 -0
  205. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/installplan.py +0 -0
  206. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/ip_address_pool.py +0 -0
  207. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/jaeger.py +0 -0
  208. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/job.py +0 -0
  209. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/kube_descheduler.py +0 -0
  210. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/kubelet_config.py +0 -0
  211. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/kubevirt.py +0 -0
  212. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/l2_advertisement.py +0 -0
  213. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/lease.py +0 -0
  214. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/limit_range.py +0 -0
  215. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/llama_stack_distribution.py +0 -0
  216. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/llm_inference_service.py +0 -0
  217. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/lm_eval_job.py +0 -0
  218. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/machine.py +0 -0
  219. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/machine_config.py +0 -0
  220. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/machine_config_pool.py +0 -0
  221. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/machine_health_check.py +0 -0
  222. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/machine_set.py +0 -0
  223. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/managed_cluster.py +0 -0
  224. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/maria_db.py +0 -0
  225. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mariadb_operator.py +0 -0
  226. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/metallb.py +0 -0
  227. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_analytic.py +0 -0
  228. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_cluster.py +0 -0
  229. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_controller.py +0 -0
  230. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_migration.py +0 -0
  231. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mig_plan.py +0 -0
  232. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/migration_policy.py +0 -0
  233. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/model_registry.py +0 -0
  234. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/model_registry_components_platform_opendatahub_io.py +0 -0
  235. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/model_registry_modelregistry_opendatahub_io.py +0 -0
  236. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mtq.py +0 -0
  237. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_cluster_hub.py +0 -0
  238. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_cluster_observability.py +0 -0
  239. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_namespace_virtual_machine_storage_migration.py +0 -0
  240. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/multi_network_policy.py +0 -0
  241. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/mutating_webhook_config.py +0 -0
  242. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/namespace.py +0 -0
  243. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/network_addons_config.py +0 -0
  244. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/network_attachment_definition.py +0 -0
  245. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/network_config_openshift_io.py +0 -0
  246. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/network_map.py +0 -0
  247. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/network_operator_openshift_io.py +0 -0
  248. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/network_policy.py +0 -0
  249. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/nm_state.py +0 -0
  250. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node.py +0 -0
  251. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_config_openshift_io.py +0 -0
  252. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_health_check.py +0 -0
  253. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_maintenance.py +0 -0
  254. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_network_configuration_enactment.py +0 -0
  255. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_network_configuration_policy.py +0 -0
  256. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_network_configuration_policy_latest.py +0 -0
  257. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/node_network_state.py +0 -0
  258. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/notebook.py +0 -0
  259. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/oauth.py +0 -0
  260. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/ocs_initialization.py +0 -0
  261. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/open_telemetry_collector.py +0 -0
  262. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/operator.py +0 -0
  263. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/operator_condition.py +0 -0
  264. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/operator_group.py +0 -0
  265. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/operator_hub.py +0 -0
  266. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/operator_source.py +0 -0
  267. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/package_manifest.py +0 -0
  268. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/peer_authentication.py +0 -0
  269. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/performance_profile.py +0 -0
  270. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/persistent_volume.py +0 -0
  271. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/persistent_volume_claim.py +0 -0
  272. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/pipeline.py +0 -0
  273. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/pipeline_run.py +0 -0
  274. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/plan.py +0 -0
  275. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/pod.py +0 -0
  276. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/pod_disruption_budget.py +0 -0
  277. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/pod_metrics.py +0 -0
  278. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/priority_class.py +0 -0
  279. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/project_config_openshift_io.py +0 -0
  280. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/project_project_openshift_io.py +0 -0
  281. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/project_request.py +0 -0
  282. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/prometheus.py +0 -0
  283. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/prometheus_rule.py +0 -0
  284. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/provider.py +0 -0
  285. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/proxy.py +0 -0
  286. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/py.typed +0 -0
  287. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/rate_limit_policy.py +0 -0
  288. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/reclaim_space_cron_job.py +0 -0
  289. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/reclaim_space_job.py +0 -0
  290. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/replica_set.py +0 -0
  291. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/resource.py +0 -0
  292. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/resource_quota.py +0 -0
  293. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/restore.py +0 -0
  294. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/rhmi.py +0 -0
  295. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/role.py +0 -0
  296. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/role_binding.py +0 -0
  297. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/route.py +0 -0
  298. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/route_advertisements.py +0 -0
  299. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/scaled_object.py +0 -0
  300. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/scheduler.py +0 -0
  301. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/sealed_secret.py +0 -0
  302. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/secret.py +0 -0
  303. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/security_context_constraints.py +0 -0
  304. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/self_node_remediation_templates.py +0 -0
  305. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/self_subject_review.py +0 -0
  306. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service.py +0 -0
  307. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service_account.py +0 -0
  308. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service_mesh_control_plane.py +0 -0
  309. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service_mesh_member.py +0 -0
  310. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service_mesh_member_roll.py +0 -0
  311. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service_monitor.py +0 -0
  312. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/service_serving_knative_dev.py +0 -0
  313. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/serving_runtime.py +0 -0
  314. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/snapshot.py +0 -0
  315. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/sriov_network.py +0 -0
  316. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/sriov_network_node_policy.py +0 -0
  317. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/sriov_network_node_state.py +0 -0
  318. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/ssp.py +0 -0
  319. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/storage_class.py +0 -0
  320. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/storage_cluster.py +0 -0
  321. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/storage_map.py +0 -0
  322. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/storage_profile.py +0 -0
  323. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/subscription.py +0 -0
  324. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/task.py +0 -0
  325. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/task_run.py +0 -0
  326. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/tekton_tasks.py +0 -0
  327. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/template.py +0 -0
  328. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/tempo_stack.py +0 -0
  329. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/token_rate_limit_policy.py +0 -0
  330. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/trustyai_service.py +0 -0
  331. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/upload_token_request.py +0 -0
  332. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/user.py +0 -0
  333. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/user_defined_network.py +0 -0
  334. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/__init__.py +0 -0
  335. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/archive_utils.py +0 -0
  336. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/constants.py +0 -0
  337. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/resource_constants.py +0 -0
  338. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/schema_validator.py +0 -0
  339. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/utils/utils.py +0 -0
  340. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/validating_admission_policy.py +0 -0
  341. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/validating_admission_policy_binding.py +0 -0
  342. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/validating_webhook_config.py +0 -0
  343. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine.py +0 -0
  344. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_clone.py +0 -0
  345. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_cluster_instancetype.py +0 -0
  346. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_cluster_preference.py +0 -0
  347. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_export.py +0 -0
  348. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instance.py +0 -0
  349. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instance_migration.py +0 -0
  350. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instance_preset.py +0 -0
  351. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instance_replica_set.py +0 -0
  352. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_instancetype.py +0 -0
  353. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_migration_resource_quota.py +0 -0
  354. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_preference.py +0 -0
  355. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_restore.py +0 -0
  356. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_snapshot.py +0 -0
  357. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_storage_migration.py +0 -0
  358. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_machine_storage_migration_plan.py +0 -0
  359. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/virtual_service.py +0 -0
  360. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/vm_import_config.py +0 -0
  361. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/volume_snapshot.py +0 -0
  362. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/ocp_resources/volume_snapshot_class.py +0 -0
  363. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/pypi-dist/.gitignore +0 -0
  364. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/renovate.json +0 -0
  365. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/scripts/__init__.py +0 -0
  366. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/scripts/diff-from-latest-release.sh +0 -0
  367. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/scripts/diff-from-tag.sh +0 -0
  368. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/scripts/generate_changelog.py +0 -0
  369. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/scripts/get-latest-release.sh +0 -0
  370. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/sonar-project.properties +0 -0
  371. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/__init__.py +0 -0
  372. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/conftest.py +0 -0
  373. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/fixtures/validation_schemas.py +0 -0
  374. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/manifests/vm.yaml +0 -0
  375. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/scripts/__init__.py +0 -0
  376. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/scripts/validate_resources.py +0 -0
  377. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_api_group_order.py +0 -0
  378. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_camelcase_to_snake.py +0 -0
  379. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resource.py +0 -0
  380. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resource_validation.py +0 -0
  381. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_aaq.py +0 -0
  382. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_api_server.py +0 -0
  383. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_authorino.py +0 -0
  384. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_cdi.py +0 -0
  385. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_cdi_config.py +0 -0
  386. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_cluster_resource_quota.py +0 -0
  387. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_cluster_user_defined_network.py +0 -0
  388. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_config_map.py +0 -0
  389. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_console_config_openshift_io.py +0 -0
  390. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_console_operator_openshift_io.py +0 -0
  391. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_csi_driver.py +0 -0
  392. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_data_import_cron.py +0 -0
  393. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_data_science_cluster.py +0 -0
  394. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_deployment.py +0 -0
  395. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_direct_volume_migration.py +0 -0
  396. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_direct_volume_migration_progress.py +0 -0
  397. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_dns_config_openshift_io.py +0 -0
  398. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_dns_operator_openshift_io.py +0 -0
  399. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_dsc_initialization.py +0 -0
  400. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_group.py +0 -0
  401. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_guardrails_orchestrator.py +0 -0
  402. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_image_caching_internal_knative_dev.py +0 -0
  403. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_image_config_openshift_io.py +0 -0
  404. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_image_content_source_policy.py +0 -0
  405. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_image_image_openshift_io.py +0 -0
  406. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_inference_graph.py +0 -0
  407. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_kube_descheduler.py +0 -0
  408. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_kubelet_config.py +0 -0
  409. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_kubevirt.py +0 -0
  410. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_llama_stack_distribution.py +0 -0
  411. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_lm_eval_job.py +0 -0
  412. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_machine.py +0 -0
  413. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_maria_db.py +0 -0
  414. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mariadb_operator.py +0 -0
  415. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mig_analytic.py +0 -0
  416. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mig_cluster.py +0 -0
  417. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mig_migration.py +0 -0
  418. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mig_plan.py +0 -0
  419. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_model_registry.py +0 -0
  420. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_model_registry_components_platform_opendatahub_io.py +0 -0
  421. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_model_registry_modelregistry_opendatahub_io.py +0 -0
  422. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_mtq.py +0 -0
  423. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_namespace.py +0 -0
  424. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_network_config_openshift_io.py +0 -0
  425. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_network_operator_openshift_io.py +0 -0
  426. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_nm_state.py +0 -0
  427. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_node.py +0 -0
  428. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_node_config_openshift_io.py +0 -0
  429. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_node_network_configuration_policy_latest.py +0 -0
  430. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_notebook.py +0 -0
  431. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_oauth.py +0 -0
  432. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_operator.py +0 -0
  433. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_pod.py +0 -0
  434. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_pod_metrics.py +0 -0
  435. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_project_config_openshift_io.py +0 -0
  436. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_project_project_openshift_io.py +0 -0
  437. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_project_request.py +0 -0
  438. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_prometheus.py +0 -0
  439. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_replica_set.py +0 -0
  440. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_scheduler.py +0 -0
  441. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_security_context_constraints.py +0 -0
  442. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_self_subject_review.py +0 -0
  443. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_service.py +0 -0
  444. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_service_mesh_member.py +0 -0
  445. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_service_serving_knative_dev.py +0 -0
  446. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_serving_runtime.py +0 -0
  447. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_snapshot.py +0 -0
  448. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_ssp.py +0 -0
  449. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_storage_cluster.py +0 -0
  450. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_user.py +0 -0
  451. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_user_defined_network.py +0 -0
  452. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_cluster_instancetype.py +0 -0
  453. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_cluster_preference.py +0 -0
  454. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_export.py +0 -0
  455. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_instance_migration.py +0 -0
  456. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_instance_preset.py +0 -0
  457. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_instance_replica_set.py +0 -0
  458. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_instancetype.py +0 -0
  459. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_virtual_machine_preference.py +0 -0
  460. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_volume_snapshot.py +0 -0
  461. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_resources/test_volume_snapshot_class.py +0 -0
  462. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_schema_loading.py +0 -0
  463. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_unittests.py +0 -0
  464. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_validate_resources.py +0 -0
  465. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_validate_resources_script.py +0 -0
  466. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/test_validation_error.py +0 -0
  467. {openshift_python_wrapper-4.21.0 → openshift_python_wrapper-4.21.2}/tests/utils.py +0 -0
  468. {openshift_python_wrapper-4.21.0 → 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
@@ -45,18 +45,18 @@ repos:
45
45
  ]
46
46
 
47
47
  - repo: https://github.com/astral-sh/ruff-pre-commit
48
- rev: v0.15.0
48
+ rev: v0.15.12
49
49
  hooks:
50
50
  - id: ruff
51
51
  - id: ruff-format
52
52
 
53
53
  - repo: https://github.com/gitleaks/gitleaks
54
- rev: v8.30.0
54
+ rev: v8.30.1
55
55
  hooks:
56
56
  - id: gitleaks
57
57
 
58
58
  - repo: https://github.com/pre-commit/mirrors-mypy
59
- rev: v1.19.1
59
+ rev: v1.20.2
60
60
  hooks:
61
61
  - id: mypy
62
62
  exclude: ^(tests/|examples/|docs/)
@@ -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.0
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,21 +13,24 @@ 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
20
24
  Requires-Dist: fastmcp>=2.10.4
21
25
  Requires-Dist: jinja2>=3.1.4
22
26
  Requires-Dist: jsonschema>=4.20.0
23
- Requires-Dist: kubernetes>=31.0.0
27
+ Requires-Dist: kubernetes!=36.0.0,>=31.0.0
24
28
  Requires-Dist: packaging>=24.1
25
29
  Requires-Dist: pyhelper-utils>=0.0.42
26
30
  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
@@ -489,7 +489,7 @@ def handle_test_generation(add_tests: bool) -> None:
489
489
  # Run the generated test file
490
490
  LOGGER.info("Running generated tests...")
491
491
  test_file = "class_generator/tests/test_class_generator.py"
492
- exit_code = os.system(f"uv run pytest {test_file}")
492
+ exit_code = os.system(f"uv run --group tests pytest {test_file}")
493
493
 
494
494
  # os.system returns the exit status shifted left by 8 bits
495
495
  if exit_code != 0:
@@ -0,0 +1,71 @@
1
+ """File writing utilities for generated code."""
2
+
3
+ from pathlib import Path
4
+
5
+ from pyhelper_utils.shell import run_command
6
+ from simple_logger.logger import get_logger
7
+
8
+ LOGGER = get_logger(name=__name__)
9
+
10
+ # Project root directory (contains pyproject.toml and .pre-commit-config.yaml)
11
+ _PROJECT_ROOT = Path(__file__).resolve().parent.parent.parent
12
+
13
+
14
+ def write_and_format_rendered(filepath: str, output: str) -> None:
15
+ """
16
+ Write rendered content to file and format with prek, falling back to ruff.
17
+
18
+ Args:
19
+ filepath: Path to write the file to
20
+ output: Content to write
21
+ """
22
+ with open(filepath, "w", encoding="utf-8") as fd:
23
+ fd.write(output)
24
+
25
+ pre_commit_config = str(_PROJECT_ROOT / ".pre-commit-config.yaml")
26
+ pyproject_toml = str(_PROJECT_ROOT / "pyproject.toml")
27
+
28
+ # Try prek first (runs all pre-commit hooks including ruff)
29
+ prek_success = False
30
+ try:
31
+ rc, stdout, stderr = run_command(
32
+ command=["uvx", "prek", "-c", pre_commit_config, "run", "--files", filepath],
33
+ verify_stderr=False,
34
+ check=False,
35
+ log_errors=False,
36
+ )
37
+ if not rc:
38
+ if stderr:
39
+ LOGGER.warning(f"Prek hooks failed for {filepath}, falling back to ruff.")
40
+ LOGGER.debug(f"prek stderr: {stderr}")
41
+ else:
42
+ prek_success = True
43
+
44
+ if stdout:
45
+ LOGGER.info(f"{filepath} fixed by prek")
46
+ LOGGER.debug(f"prek stdout: {stdout}")
47
+ except Exception as e:
48
+ LOGGER.warning(f"Failed to run prek for {filepath}, falling back to ruff: {e}")
49
+
50
+ if not prek_success:
51
+ _run_ruff_fallback(filepath=filepath, pyproject_toml=pyproject_toml)
52
+
53
+
54
+ def _run_ruff_fallback(filepath: str, pyproject_toml: str) -> None:
55
+ """Run ruff check --fix and ruff format as fallback when prek fails."""
56
+ for ruff_cmd in (
57
+ ["uvx", "ruff", "check", "--fix", "--config", pyproject_toml, filepath],
58
+ ["uvx", "ruff", "format", "--config", pyproject_toml, filepath],
59
+ ):
60
+ try:
61
+ _, stdout, _ = run_command(
62
+ command=ruff_cmd,
63
+ verify_stderr=False,
64
+ check=False,
65
+ log_errors=False,
66
+ )
67
+ if stdout:
68
+ LOGGER.info(f"{filepath} fixed by ruff")
69
+ LOGGER.debug(f"ruff stdout: {stdout}")
70
+ except Exception as e:
71
+ LOGGER.error(f"Ruff fallback failed for {filepath}: {e}")
@@ -14,8 +14,12 @@
14
14
  {% endfor %}
15
15
 
16
16
  from typing import Any
17
- from ocp_resources.resource import {{ base_class }}
17
+
18
+ {% if all_required_args %}
18
19
  from ocp_resources.exceptions import MissingRequiredArgumentError
20
+ {% endif %}
21
+ from ocp_resources.resource import {{ base_class }}
22
+
19
23
 
20
24
  class {{ kind }}({{ base_class }}):
21
25
  """
@@ -1,16 +1,15 @@
1
1
  # Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/scripts/resource/README.md#adding-tests
2
2
 
3
3
  import filecmp
4
+ import traceback
4
5
  from pathlib import Path
5
- import pytest
6
- from typing import List, Tuple, Optional
7
6
 
8
7
  from class_generator.constants import TESTS_MANIFESTS_DIR
9
8
  from class_generator.core.generator import class_generator
10
9
  from class_generator.utils import execute_parallel_tasks
11
10
 
12
11
 
13
- def _test_single_resource(kind: str, tmp_path: Path) -> Optional[Tuple[str, str]]:
12
+ def _test_single_resource(kind: str, tmp_path: Path) -> tuple[str, str] | None:
14
13
  """
15
14
  Test a single resource kind and return failure info if test fails.
16
15
 
@@ -45,9 +44,9 @@ def _test_single_resource(kind: str, tmp_path: Path) -> Optional[Tuple[str, str]
45
44
  if not filecmp.cmp(output_file, expected_file):
46
45
  try:
47
46
  # Read both files to show diff details
48
- with open(output_file, "r") as f:
47
+ with open(output_file) as f:
49
48
  generated_content = f.read()
50
- with open(expected_file, "r") as f:
49
+ with open(expected_file) as f:
51
50
  expected_content = f.read()
52
51
 
53
52
  # Find first difference for debugging
@@ -60,7 +59,7 @@ def _test_single_resource(kind: str, tmp_path: Path) -> Optional[Tuple[str, str]
60
59
  diff_info += f"\nGenerated lines: {len(generated_lines)}, Expected lines: {len(expected_lines)}"
61
60
 
62
61
  # Find first differing line
63
- for i, (gen_line, exp_line) in enumerate(zip(generated_lines, expected_lines)):
62
+ for i, (gen_line, exp_line) in enumerate(zip(generated_lines, expected_lines, strict=True)):
64
63
  if gen_line != exp_line:
65
64
  diff_info += f"\nFirst difference at line {i + 1}:"
66
65
  diff_info += f"\nGenerated: {repr(gen_line[:100])}..."
@@ -81,8 +80,6 @@ def _test_single_resource(kind: str, tmp_path: Path) -> Optional[Tuple[str, str]
81
80
  return None
82
81
 
83
82
  except Exception as e:
84
- import traceback
85
-
86
83
  error_details = f"Exception during generation: {str(e)}\n"
87
84
  error_details += f"Traceback:\n{traceback.format_exc()}"
88
85
  return (kind, error_details)
@@ -97,17 +94,17 @@ def test_parse_explain(tmp_path: Path) -> None:
97
94
  {% endfor %}
98
95
  ]
99
96
 
100
- failures: List[Tuple[str, str]] = []
97
+ failures: list[tuple[str, str]] = []
101
98
 
102
99
  # Process test results and collect failures
103
- def process_test_result(kind: str, result: Optional[Tuple[str, str]]) -> None:
100
+ def process_test_result(kind: str, result: tuple[str, str] | None) -> None:
104
101
  if result is not None:
105
102
  failures.append(result)
106
103
 
107
104
  def handle_test_error(kind: str, exc: Exception) -> None:
108
105
  failures.append((kind, f"Task execution failed: {str(exc)}"))
109
106
 
110
- def create_test_task(kind: str) -> Optional[Tuple[str, str]]:
107
+ def create_test_task(kind: str) -> tuple[str, str] | None:
111
108
  return _test_single_resource(kind, tmp_path / f"test-{kind}")
112
109
 
113
110
  # Run tests in parallel
@@ -136,12 +133,10 @@ def test_parse_explain(tmp_path: Path) -> None:
136
133
 
137
134
  # Create a concise failure message for pytest
138
135
  failed_kinds = [kind for kind, _ in failures]
139
- failure_summary = f"{len(failures)} resource(s) failed: {', '.join(failed_kinds[:5])}"
140
- if len(failed_kinds) > 5:
141
- failure_summary += f" and {len(failed_kinds) - 5} more"
136
+ failure_summary = f"{len(failures)} resource(s) failed: {','.join(failed_kinds)}"
142
137
 
143
138
  # Fail the test with summary - detailed output is already printed above
144
- assert False, failure_summary
139
+ raise AssertionError(failure_summary)
145
140
 
146
141
  # If we get here, all tests passed
147
142
  print(f"\nAll {len(resource_kinds)} resource generation tests passed successfully!")
@@ -96,15 +96,15 @@ def test_parse_explain(tmp_path: Path) -> None:
96
96
  "Deployment",
97
97
  "ImageContentSourcePolicy",
98
98
  "Machine",
99
+ "NMState",
99
100
  "Pod",
100
101
  "Secret",
101
- "NMState",
102
102
  "ServiceMeshMember",
103
- "ServingRuntime",
103
+ "Ingress",
104
104
  "OAuth",
105
105
  "Pipeline",
106
- "Ingress",
107
106
  "RouteAdvertisements",
107
+ "ServingRuntime",
108
108
  ]
109
109
 
110
110
  failures: list[tuple[str, str]] = []
@@ -146,9 +146,7 @@ def test_parse_explain(tmp_path: Path) -> None:
146
146
 
147
147
  # Create a concise failure message for pytest
148
148
  failed_kinds = [kind for kind, _ in failures]
149
- failure_summary = f"{len(failures)} resource(s) failed: {', '.join(failed_kinds[:5])}"
150
- if len(failed_kinds) > 5:
151
- failure_summary += f" and {len(failed_kinds) - 5} more"
149
+ failure_summary = f"{len(failures)} resource(s) failed: {','.join(failed_kinds)}"
152
150
 
153
151
  # Fail the test with summary - detailed output is already printed above
154
152
  raise AssertionError(failure_summary)
@@ -170,7 +170,9 @@ class TestCLIFunctionality:
170
170
 
171
171
  assert result.exit_code == 0
172
172
  mock_test_gen.assert_called_once()
173
- mock_os_system.assert_called_once_with("uv run pytest class_generator/tests/test_class_generator.py")
173
+ mock_os_system.assert_called_once_with(
174
+ "uv run --group tests pytest class_generator/tests/test_class_generator.py"
175
+ )
174
176
 
175
177
  def test_add_tests_requires_kind(self):
176
178
  """Test that --add-tests cannot be used alone."""
@@ -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
  },