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.
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.gitignore +0 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.pre-commit-config.yaml +3 -3
- openshift_python_wrapper-4.20.9/AGENTS.md +90 -0
- openshift_python_wrapper-4.20.9/CLAUDE.md +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/CONTRIBUTING.md +24 -5
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/PKG-INFO +10 -5
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/README.md +2 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/cli.py +3 -4
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/core/discovery.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/core/generator.py +2 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/core/schema.py +9 -11
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/parsers/type_parser.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/parsers/user_code_parser.py +1 -1
- {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/APIServer}/api_server.py +2 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/ConfigMap/config_map.py +1 -0
- {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
- {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
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/Deployment/deployment.py +1 -0
- {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
- {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
- {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
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/Machine/machine.py +1 -0
- {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/NMState}/nm_state.py +2 -0
- {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/OAuth}/oauth.py +2 -0
- {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/Pipeline}/pipeline.py +2 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/Pod/pod.py +1 -0
- {openshift_python_wrapper-4.20.7/ocp_resources → openshift_python_wrapper-4.20.9/class_generator/tests/manifests/RouteAdvertisements}/route_advertisements.py +3 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/Secret/secret.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/ServiceMeshMember/service_mesh_member.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/ServingRuntime/serving_runtime.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/test_parse_explain.j2 +2 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_class_generator.py +17 -19
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_resource_discovery.py +75 -81
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/utils.py +34 -35
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/resource_list.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/validation_demo.py +4 -3
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/dynamic_client.py +4 -4
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/exceptions.py +1 -5
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/kubernetes_client.py +13 -13
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/resource_field.py +3 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/resource_instance.py +26 -25
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/resource_manager.py +11 -13
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/resource_registry.py +9 -9
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/resource_storage.py +8 -12
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/status_schema_parser.py +9 -9
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/status_templates.py +23 -23
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/example_client.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/server.py +5 -5
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/tests/test_server.py +10 -10
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/aaq.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/authorino.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/backup.py +0 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/catalog_source.py +3 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cdi.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/chaos_engine.py +0 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/chaos_result.py +0 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_resource_quota.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_role.py +0 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_role_binding.py +0 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_user_defined_network.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/config_imageregistry_operator_openshift_io.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/config_operator_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/config_samples_operator_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/console_config_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/console_operator_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/csi_driver.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/data_import_cron.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/data_science_cluster.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/data_source.py +2 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/datavolume.py +13 -9
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/destination_rule.py +0 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/direct_volume_migration.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/direct_volume_migration_progress.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/dsc_initialization.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/frr_configuration.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/gateway.py +0 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/gateway_class.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/gateway_gateway_networking_k8s_io.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/gateway_networking_istio_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/group.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/hostpath_provisioner.py +1 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/image_config_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/image_image_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/inference_graph.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/jaeger.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/kube_descheduler.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/kubelet_config.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/kubevirt.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/llama_stack_distribution.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/llm_inference_service.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/lm_eval_job.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/machine_set.py +3 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/maria_db.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mariadb_operator.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mig_analytic.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mig_cluster.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mig_migration.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mig_plan.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/migration.py +2 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/model_registry_components_platform_opendatahub_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/model_registry_modelregistry_opendatahub_io.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/multi_namespace_virtual_machine_storage_migration.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/multi_namespace_virtual_machine_storage_migration_plan.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/namespace.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/network_config_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/network_operator_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/network_policy.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_config_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/notebook.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/open_telemetry_collector.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/operator.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/peer_authentication.py +0 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/persistent_volume.py +0 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/persistent_volume_claim.py +1 -3
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/pipeline_run.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/pod_metrics.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/project_config_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/project_project_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/prometheus.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/replica_set.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/resource.py +10 -12
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/restore.py +0 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/rhmi.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/role.py +1 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/role_binding.py +1 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/route.py +1 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/scaled_object.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/scheduler.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/security_context_constraints.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/self_subject_review.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service_account.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service_mesh_control_plane.py +0 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service_mesh_member.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service_mesh_member_roll.py +0 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/serving_runtime.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/snapshot.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/sriov_network_node_state.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/ssp.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/storage_class.py +0 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/storage_cluster.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/storage_profile.py +0 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/task.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/task_run.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/tempo_stack.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/upload_token_request.py +1 -3
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/user.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/utils/schema_validator.py +11 -8
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_cluster_instancetype.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_cluster_preference.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_export.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_import.py +3 -5
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_instance_migration.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_instance_preset.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_instance_replica_set.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_instancetype.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_preference.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_restore.py +2 -4
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_snapshot.py +2 -4
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_storage_migration.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_storage_migration_plan.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_service.py +0 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/volume_snapshot.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/volume_snapshot_class.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/pyproject.toml +35 -5
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/scripts/generate_pytest_test.py +3 -3
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/scripts/validate_resources.py +4 -3
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_api_group_order.py +2 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_aaq.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_api_server.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_authorino.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_cdi.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_cdi_config.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_cluster_resource_quota.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_cluster_user_defined_network.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_config_map.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_console_config_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_console_operator_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_csi_driver.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_data_import_cron.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_data_science_cluster.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_deployment.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_direct_volume_migration.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_direct_volume_migration_progress.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_dns_config_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_dns_operator_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_dsc_initialization.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_group.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_guardrails_orchestrator.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_image_caching_internal_knative_dev.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_image_config_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_image_content_source_policy.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_image_image_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_inference_graph.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_kube_descheduler.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_kubelet_config.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_kubevirt.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_llama_stack_distribution.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_lm_eval_job.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_machine.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_maria_db.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_mariadb_operator.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_mig_analytic.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_mig_cluster.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_mig_migration.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_mig_plan.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_model_registry.py +1 -0
- {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
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_model_registry_modelregistry_opendatahub_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_mtq.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_namespace.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_network_config_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_network_operator_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_nm_state.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_node.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_node_config_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_node_network_configuration_policy_latest.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_notebook.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_oauth.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_operator.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_pod.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_pod_metrics.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_project_config_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_project_project_openshift_io.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_project_request.py +2 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_prometheus.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_replica_set.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_scheduler.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_security_context_constraints.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_self_subject_review.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_service.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_service_mesh_member.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_service_serving_knative_dev.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_serving_runtime.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_snapshot.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_ssp.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_storage_cluster.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_user.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_user_defined_network.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_cluster_instancetype.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_cluster_preference.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_export.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_instance_migration.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_instance_preset.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_instance_replica_set.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_instancetype.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_virtual_machine_preference.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_volume_snapshot.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resources/test_volume_snapshot_class.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_unittests.py +1 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/utils.py +1 -1
- openshift_python_wrapper-4.20.9/uv.lock +2554 -0
- openshift_python_wrapper-4.20.7/.git +0 -1
- openshift_python_wrapper-4.20.7/uv.lock +0 -2312
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.coderabbit.yaml +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.dockerignore +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.flake8 +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.gitattributes +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.github/pull_request_template.md +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.github/weekly-digest.yml +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.github/workflows/close-stale-issues.yml +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.gitleaks.toml +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.readthedocs.yaml +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.release-it.json +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/.sonarcloud.properties +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/LICENSE +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/Makefile +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/OWNERS +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/VERSION +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/README.md +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/__init__.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/constants.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/core/__init__.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/core/coverage.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/formatters/__init__.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/formatters/file_writer.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/formatters/template_renderer.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/manifests/class_generator_template.j2 +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/parsers/__init__.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/parsers/explain_parser.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/py.typed +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/schema/__cluster_version__.txt +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/schema/__resources-mappings.json.gz +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/schema/_definitions.json +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/manifests/ClusterOperator/cluster_operator.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_batch_regeneration.py +2 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_cli.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_generation.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_schema_new_functions.py +5 -5
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_schema_parsing.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_user_code_parser.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/tests/test_utils.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/docs/Makefile +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/docs/conf.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/docs/index.rst +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/docs/modules.rst +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/docs/ocp_resources.rst +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/general.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/node_network_configuration_policy.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/pods.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/role.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/special_cases.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/validation_troubleshooting.py +2 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/examples/virtual_machine.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/README.md +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/__init__.py +3 -3
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/configuration.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/fake_kubernetes_client/types.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/README.md +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/__init__.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/server-info.json +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/mcp_server/tests/__init__.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/__init__.py +0 -0
- {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/APIServer → openshift_python_wrapper-4.20.9/ocp_resources}/api_server.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/api_service.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/application_aware_applied_cluster_resource_quota.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/application_aware_cluster_resource_quota.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/application_aware_resource_quota.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/benchmark.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/bgp_session_state.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cdi_config.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_claim.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_deployment.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_operator.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_pool.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_service_version.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cluster_version.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/config_map.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/console_cli_download.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/console_plugin.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/console_quick_start.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/controller_revision.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/cron_job.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/csi_storage_capacity.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/custom_resource_definition.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/daemonset.py +2 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/deployment.py +0 -0
- {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
- {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
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/endpoint_slice.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/endpoints.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/event.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/exceptions.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/fence_agent_remediation_templates.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/forklift_controller.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/guardrails_orchestrator.py +2 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/hook.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/host.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/hyperconverged.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/image_caching_internal_knative_dev.py +0 -0
- {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
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/image_digest_mirror_set.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/image_stream.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/imagestreamtag.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/inference_service.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/infrastructure.py +0 -0
- {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
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/ingress_controller.py +0 -0
- {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
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/installplan.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/ip_address_pool.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/job.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/l2_advertisement.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/lease.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/limit_range.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/machine.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/machine_config.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/machine_config_pool.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/machine_health_check.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/managed_cluster.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/metallb.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mig_controller.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/migration_policy.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/model_registry.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mtq.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/multi_cluster_hub.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/multi_cluster_observability.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/multi_network_policy.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/mutating_webhook_config.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/network_addons_config.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/network_attachment_definition.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/network_map.py +1 -1
- {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/NMState → openshift_python_wrapper-4.20.9/ocp_resources}/nm_state.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_health_check.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_maintenance.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_network_configuration_enactment.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_network_configuration_policy.py +2 -2
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_network_configuration_policy_latest.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/node_network_state.py +2 -2
- {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/OAuth → openshift_python_wrapper-4.20.9/ocp_resources}/oauth.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/ocs_initialization.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/operator_condition.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/operator_group.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/operator_hub.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/operator_source.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/package_manifest.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/performance_profile.py +0 -0
- {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/Pipeline → openshift_python_wrapper-4.20.9/ocp_resources}/pipeline.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/plan.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/pod.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/pod_disruption_budget.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/priority_class.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/project_request.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/prometheus_rule.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/provider.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/proxy.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/py.typed +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/reclaim_space_cron_job.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/reclaim_space_job.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/resource_quota.py +0 -0
- {openshift_python_wrapper-4.20.7/class_generator/tests/manifests/RouteAdvertisements → openshift_python_wrapper-4.20.9/ocp_resources}/route_advertisements.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/sealed_secret.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/secret.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/self_node_remediation_templates.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service_monitor.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/service_serving_knative_dev.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/sriov_network.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/sriov_network_node_policy.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/storage_map.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/subscription.py +1 -1
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/tekton_tasks.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/template.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/trustyai_service.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/user_defined_network.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/utils/__init__.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/utils/archive_utils.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/utils/constants.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/utils/resource_constants.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/utils/utils.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/validating_webhook_config.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_clone.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_instance.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/virtual_machine_migration_resource_quota.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/ocp_resources/vm_import_config.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/pypi-dist/.gitignore +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/renovate.json +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/scripts/__init__.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/scripts/diff-from-latest-release.sh +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/scripts/diff-from-tag.sh +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/scripts/generate_changelog.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/scripts/get-latest-release.sh +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/sonar-project.properties +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/__init__.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/conftest.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/fixtures/validation_schemas.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/manifests/vm.yaml +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/scripts/__init__.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_camelcase_to_snake.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resource.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_resource_validation.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_schema_loading.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_validate_resources.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_validate_resources_script.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tests/test_validation_error.py +0 -0
- {openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/tox.toml +0 -0
|
@@ -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
|
|
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:
|
|
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
|
|
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
|
-
|
|
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/
|
|
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.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: openshift-python-wrapper
|
|
3
|
-
Version: 4.20.
|
|
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
|
-
|
|
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
|
|
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
|
|
@@ -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
|
|
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 (
|
|
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 (
|
|
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
|
|
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
|
{openshift_python_wrapper-4.20.7 → openshift_python_wrapper-4.20.9}/class_generator/core/schema.py
RENAMED
|
@@ -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
|
|
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 (
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
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 (
|
|
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
|
|
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__}: {
|
|
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:
|
|
@@ -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:
|
|
@@ -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:
|
|
@@ -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:
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
from typing import Any
|
|
5
|
-
|
|
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:
|
|
@@ -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)
|