openshift-python-wrapper 4.20.7__tar.gz → 4.20.9__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 (459) hide show
  1. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.gitignore +0 -1
  2. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.pre-commit-config.yaml +3 -3
  3. openshift_python_wrapper-4.20.9/AGENTS.md +90 -0
  4. openshift_python_wrapper-4.20.9/CLAUDE.md +1 -0
  5. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/CONTRIBUTING.md +24 -5
  6. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/PKG-INFO +10 -5
  7. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/README.md +2 -0
  8. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/cli.py +3 -4
  9. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/core/discovery.py +1 -1
  10. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/core/generator.py +2 -2
  11. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/core/schema.py +9 -11
  12. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/parsers/type_parser.py +1 -1
  13. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/parsers/user_code_parser.py +1 -1
  14. {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/APIServer}/api_server.py +2 -0
  15. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/ConfigMap/config_map.py +1 -0
  16. {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/DNS}/dns_config_openshift_io.py +2 -0
  17. {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/DNS}/dns_operator_openshift_io.py +2 -0
  18. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/Deployment/deployment.py +1 -0
  19. {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/ImageContentSourcePolicy}/image_content_source_policy.py +2 -0
  20. {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/Ingress}/ingress_config_openshift_io.py +2 -0
  21. {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/Ingress}/ingress_networking_k8s_io.py +2 -0
  22. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/Machine/machine.py +1 -0
  23. {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/NMState}/nm_state.py +2 -0
  24. {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/OAuth}/oauth.py +2 -0
  25. {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/Pipeline}/pipeline.py +2 -0
  26. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/Pod/pod.py +1 -0
  27. {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/RouteAdvertisements}/route_advertisements.py +3 -1
  28. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/Secret/secret.py +1 -0
  29. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/ServiceMeshMember/service_mesh_member.py +1 -0
  30. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/ServingRuntime/serving_runtime.py +1 -0
  31. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/test_parse_explain.j2 +2 -2
  32. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_class_generator.py +17 -19
  33. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_resource_discovery.py +75 -81
  34. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/utils.py +34 -35
  35. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/resource_list.py +1 -1
  36. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/validation_demo.py +4 -3
  37. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/dynamic_client.py +4 -4
  38. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/exceptions.py +1 -5
  39. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/kubernetes_client.py +13 -13
  40. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/resource_field.py +3 -2
  41. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/resource_instance.py +26 -25
  42. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/resource_manager.py +11 -13
  43. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/resource_registry.py +9 -9
  44. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/resource_storage.py +8 -12
  45. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/status_schema_parser.py +9 -9
  46. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/status_templates.py +23 -23
  47. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/example_client.py +1 -0
  48. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/server.py +5 -5
  49. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/tests/test_server.py +10 -10
  50. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/aaq.py +1 -0
  51. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/authorino.py +2 -1
  52. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/backup.py +0 -1
  53. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/catalog_source.py +3 -2
  54. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cdi.py +1 -0
  55. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/chaos_engine.py +0 -2
  56. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/chaos_result.py +0 -2
  57. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_resource_quota.py +2 -1
  58. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_role.py +0 -1
  59. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_role_binding.py +0 -2
  60. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_user_defined_network.py +2 -1
  61. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/config_imageregistry_operator_openshift_io.py +2 -1
  62. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/config_operator_openshift_io.py +1 -0
  63. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/config_samples_operator_openshift_io.py +1 -0
  64. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/console_config_openshift_io.py +1 -0
  65. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/console_operator_openshift_io.py +1 -0
  66. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/csi_driver.py +1 -0
  67. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/data_import_cron.py +2 -1
  68. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/data_science_cluster.py +1 -0
  69. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/data_source.py +2 -0
  70. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/datavolume.py +13 -9
  71. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/destination_rule.py +0 -2
  72. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/direct_volume_migration.py +1 -0
  73. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/direct_volume_migration_progress.py +1 -0
  74. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/dsc_initialization.py +2 -1
  75. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/frr_configuration.py +1 -0
  76. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/gateway.py +0 -2
  77. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/gateway_class.py +2 -1
  78. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/gateway_gateway_networking_k8s_io.py +2 -1
  79. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/gateway_networking_istio_io.py +1 -0
  80. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/group.py +2 -1
  81. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/hostpath_provisioner.py +1 -2
  82. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/image_config_openshift_io.py +1 -0
  83. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/image_image_openshift_io.py +1 -0
  84. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/inference_graph.py +2 -1
  85. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/jaeger.py +1 -0
  86. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/kube_descheduler.py +1 -0
  87. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/kubelet_config.py +1 -0
  88. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/kubevirt.py +1 -0
  89. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/llama_stack_distribution.py +2 -1
  90. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/llm_inference_service.py +1 -0
  91. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/lm_eval_job.py +2 -1
  92. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/machine_set.py +3 -2
  93. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/maria_db.py +1 -0
  94. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mariadb_operator.py +1 -0
  95. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mig_analytic.py +2 -1
  96. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mig_cluster.py +2 -1
  97. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mig_migration.py +2 -1
  98. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mig_plan.py +1 -0
  99. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/migration.py +2 -2
  100. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/model_registry_components_platform_opendatahub_io.py +1 -0
  101. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/model_registry_modelregistry_opendatahub_io.py +2 -1
  102. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/multi_namespace_virtual_machine_storage_migration.py +2 -1
  103. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/multi_namespace_virtual_machine_storage_migration_plan.py +2 -1
  104. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/namespace.py +1 -0
  105. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/network_config_openshift_io.py +1 -0
  106. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/network_operator_openshift_io.py +1 -0
  107. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/network_policy.py +2 -1
  108. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_config_openshift_io.py +1 -0
  109. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/notebook.py +1 -0
  110. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/open_telemetry_collector.py +2 -1
  111. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/operator.py +1 -0
  112. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/peer_authentication.py +0 -2
  113. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/persistent_volume.py +0 -2
  114. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/persistent_volume_claim.py +1 -3
  115. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/pipeline_run.py +1 -0
  116. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/pod_metrics.py +2 -1
  117. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/project_config_openshift_io.py +1 -0
  118. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/project_project_openshift_io.py +1 -0
  119. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/prometheus.py +1 -0
  120. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/replica_set.py +2 -1
  121. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/resource.py +10 -12
  122. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/restore.py +0 -2
  123. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/rhmi.py +2 -1
  124. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/role.py +1 -2
  125. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/role_binding.py +1 -2
  126. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/route.py +1 -2
  127. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/scaled_object.py +2 -1
  128. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/scheduler.py +1 -0
  129. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/security_context_constraints.py +2 -1
  130. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/self_subject_review.py +1 -0
  131. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service.py +1 -0
  132. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service_account.py +1 -0
  133. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service_mesh_control_plane.py +0 -2
  134. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service_mesh_member.py +2 -1
  135. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service_mesh_member_roll.py +0 -2
  136. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/serving_runtime.py +2 -1
  137. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/snapshot.py +2 -1
  138. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/sriov_network_node_state.py +2 -1
  139. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/ssp.py +2 -1
  140. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/storage_class.py +0 -1
  141. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/storage_cluster.py +1 -0
  142. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/storage_profile.py +0 -2
  143. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/task.py +1 -0
  144. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/task_run.py +1 -0
  145. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/tempo_stack.py +2 -1
  146. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/upload_token_request.py +1 -3
  147. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/user.py +2 -1
  148. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/utils/schema_validator.py +11 -8
  149. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_cluster_instancetype.py +2 -1
  150. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_cluster_preference.py +1 -0
  151. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_export.py +2 -1
  152. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_import.py +3 -5
  153. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_instance_migration.py +1 -0
  154. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_instance_preset.py +2 -1
  155. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_instance_replica_set.py +2 -1
  156. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_instancetype.py +2 -1
  157. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_preference.py +1 -0
  158. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_restore.py +2 -4
  159. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_snapshot.py +2 -4
  160. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_storage_migration.py +2 -1
  161. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_storage_migration_plan.py +2 -1
  162. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_service.py +0 -2
  163. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/volume_snapshot.py +2 -1
  164. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/volume_snapshot_class.py +2 -1
  165. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/pyproject.toml +35 -5
  166. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/scripts/generate_pytest_test.py +3 -3
  167. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/scripts/validate_resources.py +4 -3
  168. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_api_group_order.py +2 -2
  169. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_aaq.py +1 -0
  170. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_api_server.py +1 -0
  171. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_authorino.py +1 -0
  172. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_cdi.py +1 -0
  173. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_cdi_config.py +1 -0
  174. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_cluster_resource_quota.py +1 -0
  175. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_cluster_user_defined_network.py +1 -0
  176. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_config_map.py +1 -0
  177. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_console_config_openshift_io.py +1 -0
  178. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_console_operator_openshift_io.py +1 -0
  179. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_csi_driver.py +1 -0
  180. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_data_import_cron.py +1 -0
  181. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_data_science_cluster.py +1 -0
  182. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_deployment.py +1 -0
  183. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_direct_volume_migration.py +1 -0
  184. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_direct_volume_migration_progress.py +1 -0
  185. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_dns_config_openshift_io.py +1 -0
  186. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_dns_operator_openshift_io.py +1 -0
  187. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_dsc_initialization.py +1 -0
  188. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_group.py +1 -0
  189. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_guardrails_orchestrator.py +1 -0
  190. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_image_caching_internal_knative_dev.py +1 -0
  191. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_image_config_openshift_io.py +1 -0
  192. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_image_content_source_policy.py +1 -0
  193. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_image_image_openshift_io.py +1 -0
  194. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_inference_graph.py +1 -0
  195. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_kube_descheduler.py +1 -0
  196. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_kubelet_config.py +1 -0
  197. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_kubevirt.py +1 -0
  198. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_llama_stack_distribution.py +1 -0
  199. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_lm_eval_job.py +1 -0
  200. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_machine.py +1 -0
  201. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_maria_db.py +1 -0
  202. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_mariadb_operator.py +1 -0
  203. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_mig_analytic.py +1 -0
  204. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_mig_cluster.py +1 -0
  205. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_mig_migration.py +1 -0
  206. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_mig_plan.py +1 -0
  207. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_model_registry.py +1 -0
  208. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_model_registry_components_platform_opendatahub_io.py +1 -0
  209. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_model_registry_modelregistry_opendatahub_io.py +1 -0
  210. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_mtq.py +1 -0
  211. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_namespace.py +1 -0
  212. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_network_config_openshift_io.py +1 -0
  213. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_network_operator_openshift_io.py +1 -0
  214. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_nm_state.py +1 -0
  215. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_node.py +1 -0
  216. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_node_config_openshift_io.py +1 -0
  217. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_node_network_configuration_policy_latest.py +1 -0
  218. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_notebook.py +1 -0
  219. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_oauth.py +1 -0
  220. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_operator.py +1 -0
  221. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_pod.py +1 -0
  222. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_pod_metrics.py +1 -0
  223. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_project_config_openshift_io.py +1 -0
  224. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_project_project_openshift_io.py +1 -0
  225. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_project_request.py +2 -1
  226. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_prometheus.py +1 -0
  227. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_replica_set.py +1 -0
  228. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_scheduler.py +1 -0
  229. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_security_context_constraints.py +1 -0
  230. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_self_subject_review.py +1 -0
  231. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_service.py +1 -0
  232. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_service_mesh_member.py +1 -0
  233. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_service_serving_knative_dev.py +1 -0
  234. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_serving_runtime.py +1 -0
  235. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_snapshot.py +1 -0
  236. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_ssp.py +1 -0
  237. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_storage_cluster.py +1 -0
  238. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_user.py +1 -0
  239. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_user_defined_network.py +1 -0
  240. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_cluster_instancetype.py +1 -0
  241. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_cluster_preference.py +1 -0
  242. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_export.py +1 -0
  243. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_instance_migration.py +1 -0
  244. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_instance_preset.py +1 -0
  245. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_instance_replica_set.py +1 -0
  246. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_instancetype.py +1 -0
  247. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_preference.py +1 -0
  248. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_volume_snapshot.py +1 -0
  249. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_volume_snapshot_class.py +1 -0
  250. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_unittests.py +1 -0
  251. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/utils.py +1 -1
  252. openshift_python_wrapper-4.20.9/uv.lock +2554 -0
  253. openshift_python_wrapper-4.20.7/.git +0 -1
  254. openshift_python_wrapper-4.20.7/uv.lock +0 -2312
  255. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.coderabbit.yaml +0 -0
  256. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.dockerignore +0 -0
  257. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.flake8 +0 -0
  258. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.gitattributes +0 -0
  259. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  260. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  261. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.github/pull_request_template.md +0 -0
  262. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.github/weekly-digest.yml +0 -0
  263. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.github/workflows/close-stale-issues.yml +0 -0
  264. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.gitleaks.toml +0 -0
  265. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.readthedocs.yaml +0 -0
  266. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.release-it.json +0 -0
  267. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.sonarcloud.properties +0 -0
  268. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/LICENSE +0 -0
  269. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/Makefile +0 -0
  270. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/OWNERS +0 -0
  271. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/VERSION +0 -0
  272. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/README.md +0 -0
  273. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/__init__.py +0 -0
  274. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/constants.py +0 -0
  275. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/core/__init__.py +0 -0
  276. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/core/coverage.py +0 -0
  277. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/formatters/__init__.py +0 -0
  278. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/formatters/file_writer.py +0 -0
  279. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/formatters/template_renderer.py +1 -1
  280. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/manifests/class_generator_template.j2 +0 -0
  281. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/parsers/__init__.py +0 -0
  282. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/parsers/explain_parser.py +0 -0
  283. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/py.typed +0 -0
  284. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/schema/__cluster_version__.txt +0 -0
  285. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/schema/__resources-mappings.json.gz +0 -0
  286. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/schema/_definitions.json +0 -0
  287. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/ClusterOperator/cluster_operator.py +0 -0
  288. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_batch_regeneration.py +2 -2
  289. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_cli.py +0 -0
  290. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_generation.py +0 -0
  291. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_schema_new_functions.py +5 -5
  292. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_schema_parsing.py +0 -0
  293. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_user_code_parser.py +0 -0
  294. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_utils.py +0 -0
  295. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/docs/Makefile +0 -0
  296. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/docs/conf.py +0 -0
  297. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/docs/index.rst +0 -0
  298. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/docs/modules.rst +0 -0
  299. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/docs/ocp_resources.rst +0 -0
  300. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/general.py +0 -0
  301. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/node_network_configuration_policy.py +0 -0
  302. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/pods.py +0 -0
  303. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/role.py +0 -0
  304. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/special_cases.py +0 -0
  305. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/validation_troubleshooting.py +2 -2
  306. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/virtual_machine.py +0 -0
  307. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/README.md +0 -0
  308. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/__init__.py +3 -3
  309. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/configuration.py +0 -0
  310. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/types.py +0 -0
  311. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/README.md +0 -0
  312. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/__init__.py +0 -0
  313. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/server-info.json +0 -0
  314. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/tests/__init__.py +0 -0
  315. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/__init__.py +0 -0
  316. {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/APIServer → openshift_python_wrapper-4.20.9/ocp_resources}/api_server.py +0 -0
  317. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/api_service.py +0 -0
  318. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/application_aware_applied_cluster_resource_quota.py +0 -0
  319. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/application_aware_cluster_resource_quota.py +0 -0
  320. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/application_aware_resource_quota.py +0 -0
  321. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/benchmark.py +0 -0
  322. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/bgp_session_state.py +0 -0
  323. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cdi_config.py +0 -0
  324. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_claim.py +0 -0
  325. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_deployment.py +0 -0
  326. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_operator.py +0 -0
  327. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_pool.py +0 -0
  328. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_service_version.py +0 -0
  329. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_version.py +0 -0
  330. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/config_map.py +0 -0
  331. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/console_cli_download.py +0 -0
  332. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/console_plugin.py +0 -0
  333. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/console_quick_start.py +0 -0
  334. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/controller_revision.py +0 -0
  335. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cron_job.py +0 -0
  336. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/csi_storage_capacity.py +0 -0
  337. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/custom_resource_definition.py +0 -0
  338. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/daemonset.py +2 -2
  339. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/deployment.py +0 -0
  340. {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/DNS → openshift_python_wrapper-4.20.9/ocp_resources}/dns_config_openshift_io.py +0 -0
  341. {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/DNS → openshift_python_wrapper-4.20.9/ocp_resources}/dns_operator_openshift_io.py +0 -0
  342. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/endpoint_slice.py +1 -1
  343. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/endpoints.py +1 -1
  344. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/event.py +0 -0
  345. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/exceptions.py +0 -0
  346. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/fence_agent_remediation_templates.py +0 -0
  347. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/forklift_controller.py +0 -0
  348. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/guardrails_orchestrator.py +2 -2
  349. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/hook.py +1 -1
  350. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/host.py +1 -1
  351. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/hyperconverged.py +1 -1
  352. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/image_caching_internal_knative_dev.py +0 -0
  353. {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/ImageContentSourcePolicy → openshift_python_wrapper-4.20.9/ocp_resources}/image_content_source_policy.py +0 -0
  354. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/image_digest_mirror_set.py +0 -0
  355. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/image_stream.py +1 -1
  356. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/imagestreamtag.py +0 -0
  357. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/inference_service.py +0 -0
  358. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/infrastructure.py +0 -0
  359. {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/Ingress → openshift_python_wrapper-4.20.9/ocp_resources}/ingress_config_openshift_io.py +0 -0
  360. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/ingress_controller.py +0 -0
  361. {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/Ingress → openshift_python_wrapper-4.20.9/ocp_resources}/ingress_networking_k8s_io.py +0 -0
  362. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/installplan.py +0 -0
  363. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/ip_address_pool.py +0 -0
  364. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/job.py +1 -1
  365. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/l2_advertisement.py +0 -0
  366. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/lease.py +1 -1
  367. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/limit_range.py +0 -0
  368. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/machine.py +0 -0
  369. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/machine_config.py +0 -0
  370. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/machine_config_pool.py +0 -0
  371. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/machine_health_check.py +1 -1
  372. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/managed_cluster.py +0 -0
  373. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/metallb.py +0 -0
  374. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mig_controller.py +0 -0
  375. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/migration_policy.py +0 -0
  376. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/model_registry.py +0 -0
  377. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mtq.py +0 -0
  378. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/multi_cluster_hub.py +0 -0
  379. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/multi_cluster_observability.py +0 -0
  380. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/multi_network_policy.py +0 -0
  381. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mutating_webhook_config.py +0 -0
  382. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/network_addons_config.py +0 -0
  383. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/network_attachment_definition.py +0 -0
  384. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/network_map.py +1 -1
  385. {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/NMState → openshift_python_wrapper-4.20.9/ocp_resources}/nm_state.py +0 -0
  386. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node.py +0 -0
  387. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_health_check.py +0 -0
  388. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_maintenance.py +0 -0
  389. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_network_configuration_enactment.py +0 -0
  390. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_network_configuration_policy.py +2 -2
  391. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_network_configuration_policy_latest.py +0 -0
  392. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_network_state.py +2 -2
  393. {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/OAuth → openshift_python_wrapper-4.20.9/ocp_resources}/oauth.py +0 -0
  394. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/ocs_initialization.py +1 -1
  395. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/operator_condition.py +0 -0
  396. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/operator_group.py +1 -1
  397. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/operator_hub.py +0 -0
  398. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/operator_source.py +1 -1
  399. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/package_manifest.py +0 -0
  400. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/performance_profile.py +0 -0
  401. {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/Pipeline → openshift_python_wrapper-4.20.9/ocp_resources}/pipeline.py +0 -0
  402. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/plan.py +0 -0
  403. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/pod.py +0 -0
  404. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/pod_disruption_budget.py +1 -1
  405. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/priority_class.py +1 -1
  406. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/project_request.py +0 -0
  407. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/prometheus_rule.py +0 -0
  408. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/provider.py +0 -0
  409. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/proxy.py +0 -0
  410. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/py.typed +0 -0
  411. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/reclaim_space_cron_job.py +0 -0
  412. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/reclaim_space_job.py +0 -0
  413. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/resource_quota.py +0 -0
  414. {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/RouteAdvertisements → openshift_python_wrapper-4.20.9/ocp_resources}/route_advertisements.py +0 -0
  415. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/sealed_secret.py +0 -0
  416. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/secret.py +1 -1
  417. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/self_node_remediation_templates.py +0 -0
  418. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service_monitor.py +0 -0
  419. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service_serving_knative_dev.py +0 -0
  420. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/sriov_network.py +1 -1
  421. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/sriov_network_node_policy.py +1 -1
  422. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/storage_map.py +1 -1
  423. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/subscription.py +1 -1
  424. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/tekton_tasks.py +0 -0
  425. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/template.py +0 -0
  426. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/trustyai_service.py +0 -0
  427. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/user_defined_network.py +0 -0
  428. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/utils/__init__.py +0 -0
  429. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/utils/archive_utils.py +0 -0
  430. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/utils/constants.py +0 -0
  431. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/utils/resource_constants.py +0 -0
  432. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/utils/utils.py +0 -0
  433. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/validating_webhook_config.py +0 -0
  434. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine.py +0 -0
  435. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_clone.py +0 -0
  436. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_instance.py +0 -0
  437. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_migration_resource_quota.py +0 -0
  438. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/vm_import_config.py +0 -0
  439. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/pypi-dist/.gitignore +0 -0
  440. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/renovate.json +0 -0
  441. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/scripts/__init__.py +0 -0
  442. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/scripts/diff-from-latest-release.sh +0 -0
  443. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/scripts/diff-from-tag.sh +0 -0
  444. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/scripts/generate_changelog.py +0 -0
  445. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/scripts/get-latest-release.sh +0 -0
  446. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/sonar-project.properties +0 -0
  447. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/__init__.py +0 -0
  448. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/conftest.py +0 -0
  449. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/fixtures/validation_schemas.py +0 -0
  450. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/manifests/vm.yaml +0 -0
  451. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/scripts/__init__.py +0 -0
  452. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_camelcase_to_snake.py +0 -0
  453. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resource.py +0 -0
  454. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resource_validation.py +0 -0
  455. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_schema_loading.py +0 -0
  456. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_validate_resources.py +0 -0
  457. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_validate_resources_script.py +0 -0
  458. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_validation_error.py +0 -0
  459. {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/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,7 +45,7 @@ repos:
45
45
  ]
46
46
 
47
47
  - repo: https://github.com/astral-sh/ruff-pre-commit
48
- rev: v0.14.2
48
+ rev: v0.15.14
49
49
  hooks:
50
50
  - id: ruff
51
51
  - id: ruff-format
@@ -56,7 +56,7 @@ repos:
56
56
  - id: gitleaks
57
57
 
58
58
  - repo: https://github.com/pre-commit/mirrors-mypy
59
- rev: v1.20.2
59
+ rev: v2.1.0
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.20.7
3
+ Version: 4.20.9
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
@@ -1,14 +1,13 @@
1
1
  """Command-line interface for the class generator."""
2
2
 
3
3
  import fnmatch
4
+ import logging
4
5
  import shutil
5
6
  import sys
6
7
  from datetime import datetime
7
8
  from pathlib import Path
8
9
  from typing import Any
9
10
 
10
- import logging
11
-
12
11
  import cloup
13
12
  from cloup.constraints import If, IsSet, accept_none, require_one
14
13
  from simple_logger.logger import get_logger
@@ -17,7 +16,7 @@ from class_generator.constants import TESTS_MANIFESTS_DIR
17
16
  from class_generator.core.coverage import analyze_coverage, generate_report
18
17
  from class_generator.core.discovery import discover_generated_resources
19
18
  from class_generator.core.generator import class_generator
20
- from class_generator.core.schema import update_kind_schema, ClusterVersionError
19
+ from class_generator.core.schema import ClusterVersionError, update_kind_schema
21
20
  from class_generator.tests.test_generation import generate_class_generator_tests
22
21
  from class_generator.utils import execute_parallel_tasks
23
22
  from ocp_resources.utils.utils import convert_camel_case_to_snake_case
@@ -57,7 +56,7 @@ def handle_schema_update(update_schema: bool, generate_missing: bool) -> bool:
57
56
  LOGGER.info("Updating resource schema...")
58
57
  try:
59
58
  update_kind_schema()
60
- except (RuntimeError, IOError, ClusterVersionError) as e:
59
+ except (OSError, RuntimeError, ClusterVersionError) as e:
61
60
  LOGGER.exception(f"Failed to update schema: {e}")
62
61
  sys.exit(1)
63
62
 
@@ -1,8 +1,8 @@
1
1
  """Discovery functions for finding cluster resources and generated files."""
2
2
 
3
+ from concurrent.futures import Future, ThreadPoolExecutor, as_completed
3
4
  from pathlib import Path
4
5
  from typing import Any
5
- from concurrent.futures import ThreadPoolExecutor, as_completed, Future
6
6
 
7
7
  from kubernetes.dynamic import DynamicClient
8
8
  from simple_logger.logger import get_logger
@@ -155,7 +155,7 @@ def class_generator(
155
155
  LOGGER.info("Updating schema")
156
156
  try:
157
157
  update_kind_schema()
158
- except (RuntimeError, IOError) as e:
158
+ except (OSError, RuntimeError) as e:
159
159
  error_msg = f"Failed to update schema: {e}"
160
160
  LOGGER.error(error_msg)
161
161
  raise RuntimeError(error_msg) from e
@@ -188,7 +188,7 @@ def class_generator(
188
188
  unique_groups = set()
189
189
  for resource in resources:
190
190
  # Use the original group name that we stored
191
- if "original_group" in resource and resource["original_group"]:
191
+ if resource.get("original_group"):
192
192
  unique_groups.add(resource["original_group"])
193
193
 
194
194
  use_output_file_suffix: bool = len(unique_groups) > 1
@@ -12,7 +12,7 @@ from pyhelper_utils.shell import run_command
12
12
  from simple_logger.logger import get_logger
13
13
 
14
14
  from class_generator.constants import DEFINITIONS_FILE, RESOURCES_MAPPING_FILE, SCHEMA_DIR
15
- from class_generator.utils import execute_parallel_with_mapping, execute_parallel_tasks
15
+ from class_generator.utils import execute_parallel_tasks, execute_parallel_with_mapping
16
16
  from ocp_resources.utils.archive_utils import save_json_archive
17
17
  from ocp_resources.utils.schema_validator import SchemaValidator
18
18
 
@@ -22,8 +22,6 @@ LOGGER = get_logger(name=__name__)
22
22
  class ClusterVersionError(Exception):
23
23
  """Raised when there are issues with cluster version operations."""
24
24
 
25
- pass
26
-
27
25
 
28
26
  def get_client_binary() -> str:
29
27
  """Determine whether to use 'oc' or 'kubectl' binary."""
@@ -138,7 +136,7 @@ def check_and_update_cluster_version(client: str) -> bool:
138
136
  try:
139
137
  with open(cluster_version_file, "r") as fd:
140
138
  last_cluster_version_generated = fd.read().strip()
141
- except (FileNotFoundError, IOError):
139
+ except (OSError, FileNotFoundError):
142
140
  # Treat missing file as first run - use baseline version that allows updates
143
141
  last_cluster_version_generated = "v0.0.0"
144
142
  LOGGER.info("Cluster version file not found - treating as first run with baseline version v0.0.0")
@@ -1360,10 +1358,10 @@ def write_schema_files(
1360
1358
  # Ensure schema directory exists
1361
1359
  try:
1362
1360
  Path(SCHEMA_DIR).mkdir(parents=True, exist_ok=True)
1363
- except (OSError, IOError) as e:
1361
+ except OSError as e:
1364
1362
  error_msg = f"Failed to create schema directory {SCHEMA_DIR}: {e}"
1365
1363
  LOGGER.error(error_msg)
1366
- raise IOError(error_msg) from e
1364
+ raise OSError(error_msg) from e
1367
1365
 
1368
1366
  # Fetch missing core definitions if schemas are available
1369
1367
  if schemas:
@@ -1400,18 +1398,18 @@ def write_schema_files(
1400
1398
  with open(definitions_file, "w") as fd:
1401
1399
  json.dump(definitions_data, fd, indent=2, sort_keys=True)
1402
1400
  LOGGER.info(f"Written {len(definitions)} definitions to {definitions_file}")
1403
- except (OSError, IOError, TypeError) as e:
1401
+ except (OSError, TypeError) as e:
1404
1402
  error_msg = f"Failed to write definitions file {definitions_file}: {e}"
1405
1403
  LOGGER.error(error_msg)
1406
- raise IOError(error_msg) from e
1404
+ raise OSError(error_msg) from e
1407
1405
 
1408
1406
  # Write and archive resources mapping
1409
1407
  try:
1410
1408
  save_json_archive(resources_mapping, RESOURCES_MAPPING_FILE)
1411
- except (OSError, IOError, TypeError) as e:
1409
+ except (OSError, TypeError) as e:
1412
1410
  error_msg = f"Failed to save and archive resources mapping file {RESOURCES_MAPPING_FILE}: {e}"
1413
1411
  LOGGER.error(error_msg)
1414
- raise IOError(error_msg) from e
1412
+ raise OSError(error_msg) from e
1415
1413
 
1416
1414
 
1417
1415
  @dataclasses.dataclass
@@ -1527,7 +1525,7 @@ def _handle_no_schemas_case() -> None:
1527
1525
  existing_definitions_data = json.load(fd)
1528
1526
  definitions = existing_definitions_data.get("definitions", {})
1529
1527
  LOGGER.info(f"Found {len(definitions)} existing definitions that will be preserved")
1530
- except (FileNotFoundError, IOError, json.JSONDecodeError):
1528
+ except (OSError, FileNotFoundError, json.JSONDecodeError):
1531
1529
  LOGGER.debug("Could not load existing definitions file. No existing definitions to preserve.")
1532
1530
 
1533
1531
 
@@ -6,7 +6,7 @@ from typing import Any
6
6
 
7
7
  from simple_logger.logger import get_logger
8
8
 
9
- from class_generator.constants import MISSING_DESCRIPTION_STR, SPEC_STR, DEFINITIONS_FILE
9
+ from class_generator.constants import DEFINITIONS_FILE, MISSING_DESCRIPTION_STR, SPEC_STR
10
10
  from class_generator.utils import sanitize_python_name
11
11
  from ocp_resources.utils.utils import convert_camel_case_to_snake_case
12
12
 
@@ -39,7 +39,7 @@ def parse_user_code_from_file(file_path: str) -> tuple[str, str]:
39
39
  f"Failed to decode file {file_path} with UTF-8 encoding. The file may contain invalid characters.",
40
40
  )
41
41
  except Exception as e:
42
- raise Exception(f"Unexpected error reading file {file_path}: {type(e).__name__}: {str(e)}")
42
+ raise Exception(f"Unexpected error reading file {file_path}: {type(e).__name__}: {e!s}")
43
43
 
44
44
  end_of_generated_code_line = " # End of generated code"
45
45
  user_code: str = ""
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  from typing import Any
5
+
5
6
  from ocp_resources.resource import Resource
6
7
 
7
8
 
@@ -71,6 +72,7 @@ class APIServer(Resource):
71
72
  self.tls_security_profile = tls_security_profile
72
73
 
73
74
  def to_dict(self) -> None:
75
+
74
76
  super().to_dict()
75
77
 
76
78
  if not self.kind_dict and not self.yaml_file:
@@ -48,6 +48,7 @@ class ConfigMap(NamespacedResource):
48
48
  self.immutable = immutable
49
49
 
50
50
  def to_dict(self) -> None:
51
+
51
52
  super().to_dict()
52
53
 
53
54
  if not self.kind_dict and not self.yaml_file:
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  from typing import Any
5
+
5
6
  from ocp_resources.resource import Resource
6
7
 
7
8
 
@@ -54,6 +55,7 @@ class DNS(Resource):
54
55
  self.public_zone = public_zone
55
56
 
56
57
  def to_dict(self) -> None:
58
+
57
59
  super().to_dict()
58
60
 
59
61
  if not self.kind_dict and not self.yaml_file:
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  from typing import Any
5
+
5
6
  from ocp_resources.resource import Resource
6
7
 
7
8
 
@@ -93,6 +94,7 @@ class DNS(Resource):
93
94
  self.upstream_resolvers = upstream_resolvers
94
95
 
95
96
  def to_dict(self) -> None:
97
+
96
98
  super().to_dict()
97
99
 
98
100
  if not self.kind_dict and not self.yaml_file:
@@ -280,6 +280,7 @@ class Deployment(NamespacedResource):
280
280
  self.template = template
281
281
 
282
282
  def to_dict(self) -> None:
283
+
283
284
  super().to_dict()
284
285
 
285
286
  if not self.kind_dict and not self.yaml_file:
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  from typing import Any
5
+
5
6
  from ocp_resources.resource import Resource
6
7
 
7
8
 
@@ -48,6 +49,7 @@ class ImageContentSourcePolicy(Resource):
48
49
  self.repository_digest_mirrors = repository_digest_mirrors
49
50
 
50
51
  def to_dict(self) -> None:
52
+
51
53
  super().to_dict()
52
54
 
53
55
  if not self.kind_dict and not self.yaml_file:
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  from typing import Any
5
+
5
6
  from ocp_resources.resource import Resource
6
7
 
7
8
 
@@ -92,6 +93,7 @@ class Ingress(Resource):
92
93
  self.required_hsts_policies = required_hsts_policies
93
94
 
94
95
  def to_dict(self) -> None:
96
+
95
97
  super().to_dict()
96
98
 
97
99
  if not self.kind_dict and not self.yaml_file:
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  from typing import Any
5
+
5
6
  from ocp_resources.resource import Resource
6
7
 
7
8
 
@@ -41,6 +42,7 @@ class Ingress(Resource):
41
42
  self.tls = tls
42
43
 
43
44
  def to_dict(self) -> None:
45
+
44
46
  super().to_dict()
45
47
 
46
48
  if not self.kind_dict and not self.yaml_file:
@@ -69,6 +69,7 @@ class Machine(NamespacedResource):
69
69
  self.taints = taints
70
70
 
71
71
  def to_dict(self) -> None:
72
+
72
73
  super().to_dict()
73
74
 
74
75
  if not self.kind_dict and not self.yaml_file:
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  from typing import Any
5
+
5
6
  from ocp_resources.resource import Resource
6
7
 
7
8
 
@@ -76,6 +77,7 @@ class NMState(Resource):
76
77
  self.tolerations = tolerations
77
78
 
78
79
  def to_dict(self) -> None:
80
+
79
81
  super().to_dict()
80
82
 
81
83
  if not self.kind_dict and not self.yaml_file:
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  from typing import Any
5
+
5
6
  from ocp_resources.resource import Resource
6
7
 
7
8
 
@@ -41,6 +42,7 @@ class OAuth(Resource):
41
42
  self.token_config = token_config
42
43
 
43
44
  def to_dict(self) -> None:
45
+
44
46
  super().to_dict()
45
47
 
46
48
  if not self.kind_dict and not self.yaml_file:
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  from typing import Any
5
+
5
6
  from ocp_resources.resource import NamespacedResource
6
7
 
7
8
 
@@ -61,6 +62,7 @@ class Pipeline(NamespacedResource):
61
62
  self.workspaces = workspaces
62
63
 
63
64
  def to_dict(self) -> None:
65
+
64
66
  super().to_dict()
65
67
 
66
68
  if not self.kind_dict and not self.yaml_file:
@@ -493,6 +493,7 @@ class Pod(NamespacedResource):
493
493
  self.volumes = volumes
494
494
 
495
495
  def to_dict(self) -> None:
496
+
496
497
  super().to_dict()
497
498
 
498
499
  if not self.kind_dict and not self.yaml_file:
@@ -2,8 +2,9 @@
2
2
 
3
3
 
4
4
  from typing import Any
5
- from ocp_resources.resource import Resource
5
+
6
6
  from ocp_resources.exceptions import MissingRequiredArgumentError
7
+ from ocp_resources.resource import Resource
7
8
 
8
9
 
9
10
  class RouteAdvertisements(Resource):
@@ -49,6 +50,7 @@ class RouteAdvertisements(Resource):
49
50
  self.target_vrf = target_vrf
50
51
 
51
52
  def to_dict(self) -> None:
53
+
52
54
  super().to_dict()
53
55
 
54
56
  if not self.kind_dict and not self.yaml_file:
@@ -53,6 +53,7 @@ class Secret(NamespacedResource):
53
53
  self.type = type
54
54
 
55
55
  def to_dict(self) -> None:
56
+
56
57
  super().to_dict()
57
58
 
58
59
  if not self.kind_dict and not self.yaml_file:
@@ -29,6 +29,7 @@ class ServiceMeshMember(NamespacedResource):
29
29
  self.control_plane_ref = control_plane_ref
30
30
 
31
31
  def to_dict(self) -> None:
32
+
32
33
  super().to_dict()
33
34
 
34
35
  if not self.kind_dict and not self.yaml_file:
@@ -97,6 +97,7 @@ class ServingRuntime(NamespacedResource):
97
97
  self.volumes = volumes
98
98
 
99
99
  def to_dict(self) -> None:
100
+
100
101
  super().to_dict()
101
102
 
102
103
  if not self.kind_dict and not self.yaml_file:
@@ -71,7 +71,7 @@ def _test_single_resource(kind: str, tmp_path: Path) -> tuple[str, str] | None:
71
71
 
72
72
  return (kind, diff_info)
73
73
 
74
- except Exception as read_error:
74
+ except Exception as read_error: # noqa: BLE001
75
75
  return (
76
76
  kind,
77
77
  f"Generated file {Path(output_file).name} does not match expected file. Error reading files for diff: {read_error}",
@@ -79,7 +79,7 @@ def _test_single_resource(kind: str, tmp_path: Path) -> tuple[str, str] | None:
79
79
 
80
80
  return None
81
81
 
82
- except Exception as e:
82
+ except Exception as e: # noqa: BLE001
83
83
  error_details = f"Exception during generation: {str(e)}\n"
84
84
  error_details += f"Traceback:\n{traceback.format_exc()}"
85
85
  return (kind, error_details)