From cf790ab2ceb8e0eaf3110160d044164e0484c468 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 10:22:18 +0000 Subject: [PATCH 01/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 0b6c3449..db7cc6f3 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-e7708c017357421a39e6de2f7141415c93951bbc835742909b0d9d6f0825a318.yml -openapi_spec_hash: 2abb653b57137b808c182cb1e778a429 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-7f146b474624c755578bfb9e6231f414bd80bd54b998caa5558de23f4f60a4f4.yml +openapi_spec_hash: 01863d2b177e77e79eaf68594c6870aa config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 7c4c5ae57d4f4787171a336e5899302bfee5aa74 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 12:24:45 +0000 Subject: [PATCH 02/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index db7cc6f3..cf9ba8b8 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-7f146b474624c755578bfb9e6231f414bd80bd54b998caa5558de23f4f60a4f4.yml -openapi_spec_hash: 01863d2b177e77e79eaf68594c6870aa +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-1d7ac44947d4f6e11efa0bdef32d66aaee848279604cf7e89a07dc76467976b2.yml +openapi_spec_hash: 0d959e6e7d9f05cf2a56cb32bbc1825e config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 5c8e96013ea5650751b94dff429175ff12338267 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 14:23:59 +0000 Subject: [PATCH 03/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index cf9ba8b8..43e60c73 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-1d7ac44947d4f6e11efa0bdef32d66aaee848279604cf7e89a07dc76467976b2.yml -openapi_spec_hash: 0d959e6e7d9f05cf2a56cb32bbc1825e +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-f80812984c18530cf29c4770bac0d3f387ae1834c7529109c148428a609400be.yml +openapi_spec_hash: 58a4b9f6eb75e55fac293bba07c77427 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From a854caaafbd878050bc714577898a714b22d7773 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 16:19:49 +0000 Subject: [PATCH 04/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 43e60c73..ec176f27 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-f80812984c18530cf29c4770bac0d3f387ae1834c7529109c148428a609400be.yml -openapi_spec_hash: 58a4b9f6eb75e55fac293bba07c77427 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-cca6276cae57a7f8b50022bc25df91fb00ac4d8daedbcf9904c7b9c00a31a946.yml +openapi_spec_hash: 6eb148a6758a92c6f70e6fd258ac34ca config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 846057c28b739f6498298db917f3f2ad74a3404e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 18:21:33 +0000 Subject: [PATCH 05/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index ec176f27..404a38b3 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-cca6276cae57a7f8b50022bc25df91fb00ac4d8daedbcf9904c7b9c00a31a946.yml -openapi_spec_hash: 6eb148a6758a92c6f70e6fd258ac34ca +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-5f55eda838f49e7b57d65b513bcd9ca02348274375b00bc25a6d6ccb9914d0f6.yml +openapi_spec_hash: c270748225920d66c108af93c2161c1c config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 4cfc51d39d61aaccd01384035fb0093a0c54ff74 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 20:17:00 +0000 Subject: [PATCH 06/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 404a38b3..759e82b6 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-5f55eda838f49e7b57d65b513bcd9ca02348274375b00bc25a6d6ccb9914d0f6.yml -openapi_spec_hash: c270748225920d66c108af93c2161c1c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-e6df199a14c61d9730d241a2986f5bf6abcecf2a02a4f8d5302b0898245401a4.yml +openapi_spec_hash: f2f31241356b9f5fbaf9d4ee7e36f88c config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 01ceac14d2bd854e231ba06ae35e68c11414890d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 22:15:39 +0000 Subject: [PATCH 07/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 759e82b6..5c516801 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-e6df199a14c61d9730d241a2986f5bf6abcecf2a02a4f8d5302b0898245401a4.yml -openapi_spec_hash: f2f31241356b9f5fbaf9d4ee7e36f88c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-18bfa62f23cfcc9c02008cf512df7cf8c1013f40d4633d8342abfa2f85115a09.yml +openapi_spec_hash: d9a0d46ab70b441e4282fcbfc6ad4f9b config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From a6564598ed585235eff861662e469cd0857342d5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 00:45:06 +0000 Subject: [PATCH 08/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 5c516801..9cfd7f30 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-18bfa62f23cfcc9c02008cf512df7cf8c1013f40d4633d8342abfa2f85115a09.yml -openapi_spec_hash: d9a0d46ab70b441e4282fcbfc6ad4f9b +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-e9772ab0e23729abdf18dae49fc41b88450344f60e44550863fd98bb8d98f4d4.yml +openapi_spec_hash: e55d2ddd8c8ed51983c84bf5d1dd99a5 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 414312ec84b17b774da7e2c9e776da69b4c78d87 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 03:10:55 +0000 Subject: [PATCH 09/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 9cfd7f30..acb98436 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-e9772ab0e23729abdf18dae49fc41b88450344f60e44550863fd98bb8d98f4d4.yml -openapi_spec_hash: e55d2ddd8c8ed51983c84bf5d1dd99a5 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-08e2c45ab20062950f4f4cfe0b1dbfb390a37b0674d14386bdbcb9518a8ed108.yml +openapi_spec_hash: 61eacdd6102b0fff9f65636117ce5d46 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 3a306ba0ef93b3c8e914b2f5a6948fc25659b31a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 04:43:08 +0000 Subject: [PATCH 10/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index acb98436..cb5746d7 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-08e2c45ab20062950f4f4cfe0b1dbfb390a37b0674d14386bdbcb9518a8ed108.yml -openapi_spec_hash: 61eacdd6102b0fff9f65636117ce5d46 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-4a073ca48c2efac2f5932daebae671398b6de086f95dee55bafd03d0c61a5412.yml +openapi_spec_hash: 79022a21888a2ea190c84a26aeb5e045 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 66bf2a9daf5f1ed75b52c9933e747062b3b6a1f1 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 06:32:04 +0000 Subject: [PATCH 11/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index cb5746d7..278a641b 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-4a073ca48c2efac2f5932daebae671398b6de086f95dee55bafd03d0c61a5412.yml -openapi_spec_hash: 79022a21888a2ea190c84a26aeb5e045 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-5057b98c3a2a649acde55bfeec9054745327d112fb7bfbbd2f4aae9d25027bcd.yml +openapi_spec_hash: f20d6fcd20c4f4e319a1e790e0858b9d config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From c14e1aa918cf5d421e30add4367cfa72ce4a212e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 08:20:45 +0000 Subject: [PATCH 12/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 278a641b..66113a1c 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-5057b98c3a2a649acde55bfeec9054745327d112fb7bfbbd2f4aae9d25027bcd.yml -openapi_spec_hash: f20d6fcd20c4f4e319a1e790e0858b9d +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-3aef0f7d278e0a2b80ec422780324b6ae0e1029e1e3ec6dee46cafd07f630ec9.yml +openapi_spec_hash: f6af5adc5884485a6f5bc09fb66b105c config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 405dea76623ae539c1c48a22bd5203921f2de9a7 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 10:17:21 +0000 Subject: [PATCH 13/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 66113a1c..3aa0ee88 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-3aef0f7d278e0a2b80ec422780324b6ae0e1029e1e3ec6dee46cafd07f630ec9.yml -openapi_spec_hash: f6af5adc5884485a6f5bc09fb66b105c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-ed7454da26f3105cacdb2ab7840310bf0b44cfdaefa92864c5432ba3ea4e2db7.yml +openapi_spec_hash: 5e2adac17d1b5a2298c9cd3fe6aa2157 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From cdcd2b508b6b45b3786ebaf3f3073c19fec67df4 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 12:20:23 +0000 Subject: [PATCH 14/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 3aa0ee88..1c017552 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-ed7454da26f3105cacdb2ab7840310bf0b44cfdaefa92864c5432ba3ea4e2db7.yml -openapi_spec_hash: 5e2adac17d1b5a2298c9cd3fe6aa2157 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-b0ebff88cdf84d6930142b6602f6687d7543a26ffbaf4b2a3704e64fce595f89.yml +openapi_spec_hash: 4936b2c9dc9176982c5a9c4f68eda06f config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 37bba38d6835b08c94a4db6acd363b64b737b7d2 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 14:18:26 +0000 Subject: [PATCH 15/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1c017552..648235b3 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-b0ebff88cdf84d6930142b6602f6687d7543a26ffbaf4b2a3704e64fce595f89.yml -openapi_spec_hash: 4936b2c9dc9176982c5a9c4f68eda06f +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d12089f1271bbb6b43086be2f95f1a61f34ff7d1a711b8325c3846e6c879c2de.yml +openapi_spec_hash: eb783043d66279d3c09316b9667d0f69 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From d3b7d8dfe6cf0085dac15f189297f3a63ad9bdee Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 16:16:04 +0000 Subject: [PATCH 16/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 648235b3..5ded6a35 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d12089f1271bbb6b43086be2f95f1a61f34ff7d1a711b8325c3846e6c879c2de.yml -openapi_spec_hash: eb783043d66279d3c09316b9667d0f69 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-05956bc9376302b49e2dcff00c385e136f761b0f754696691af2a60a3d5b1d97.yml +openapi_spec_hash: f3076b9112521340076069817d4d5faa config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 25098b33862dd3a09c188fbc258594b4ac0db3e8 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 18:18:11 +0000 Subject: [PATCH 17/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 5ded6a35..ef93f3af 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-05956bc9376302b49e2dcff00c385e136f761b0f754696691af2a60a3d5b1d97.yml -openapi_spec_hash: f3076b9112521340076069817d4d5faa +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-a842484f6d1826b999409033805c2587cb99ba459f130eb18a0c33674ab77061.yml +openapi_spec_hash: c7b4e60e7f2c8cd7a95b66ddb26b1428 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 7fba7fa68193c8234cfec10bdbdeaa3cd5a76a66 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 20:14:10 +0000 Subject: [PATCH 18/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index ef93f3af..838b2d4a 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-a842484f6d1826b999409033805c2587cb99ba459f130eb18a0c33674ab77061.yml -openapi_spec_hash: c7b4e60e7f2c8cd7a95b66ddb26b1428 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-fdc372025b4d0d0d0214aac1ed2a2c1960520dc0f280fea788bdd3183dca7ef3.yml +openapi_spec_hash: 690fd12b69e20999e4e3f7a7d752cdc7 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From df9f464758cfebd02853bc7135fea3e37bf4a8c1 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 4 Apr 2026 22:14:00 +0000 Subject: [PATCH 19/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 838b2d4a..23735d3d 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-fdc372025b4d0d0d0214aac1ed2a2c1960520dc0f280fea788bdd3183dca7ef3.yml -openapi_spec_hash: 690fd12b69e20999e4e3f7a7d752cdc7 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-54454124e10de76c44004c417171c385767b32bdf6929882a8f889e48ad44359.yml +openapi_spec_hash: 4eca4ab7ac636464929f76936b671cf7 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 7b582c908f20c4a818273edf7beb98035aee457f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 00:50:52 +0000 Subject: [PATCH 20/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 23735d3d..5f5d2e7c 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-54454124e10de76c44004c417171c385767b32bdf6929882a8f889e48ad44359.yml -openapi_spec_hash: 4eca4ab7ac636464929f76936b671cf7 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-e9079d5ecd7df6586f33c76317edfdd83ef4a82db10062eb2f0e863fc8236ff1.yml +openapi_spec_hash: 3d23a674802049ca47cf0c5ee8934d16 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 5e950a5ce28f1520228ec735794bea000274838a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 03:14:21 +0000 Subject: [PATCH 21/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 5f5d2e7c..9ce8698a 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-e9079d5ecd7df6586f33c76317edfdd83ef4a82db10062eb2f0e863fc8236ff1.yml -openapi_spec_hash: 3d23a674802049ca47cf0c5ee8934d16 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-05695d399f87fdc75e413f6b956695f522f4d03021dbb3a4e822a0db7e116436.yml +openapi_spec_hash: 6637b3da3af71a10604e70429e254187 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 2e24a21be8412ef537a8e55ca7ed6c1a54f8832b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 04:58:34 +0000 Subject: [PATCH 22/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 9ce8698a..e68b9a0d 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-05695d399f87fdc75e413f6b956695f522f4d03021dbb3a4e822a0db7e116436.yml -openapi_spec_hash: 6637b3da3af71a10604e70429e254187 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-80b11b6b4459d17df99a20cf24883cc92d2d31b6cefcf702005b4b8983caefb8.yml +openapi_spec_hash: 81d2998c419bde178dbd00888e015280 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From afe0de9368c13910527977bf30c4c28c8ea3496c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 06:36:29 +0000 Subject: [PATCH 23/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index e68b9a0d..bcb0c35e 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-80b11b6b4459d17df99a20cf24883cc92d2d31b6cefcf702005b4b8983caefb8.yml -openapi_spec_hash: 81d2998c419bde178dbd00888e015280 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-0b7c33abe2ea147dbd1722caa51861f8578cb34466caa887c9229612f0d981a8.yml +openapi_spec_hash: 7e71e60202d3f9aa292bd13d80111a7c config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From a618095dc015267810cc5a1f9e4f8eabf551aa78 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 08:20:52 +0000 Subject: [PATCH 24/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index bcb0c35e..4e2667c8 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-0b7c33abe2ea147dbd1722caa51861f8578cb34466caa887c9229612f0d981a8.yml -openapi_spec_hash: 7e71e60202d3f9aa292bd13d80111a7c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-963ff2f3e6f462310c3a5ce4b2b1037f3d83217fce378282d1d6236ec0cd2475.yml +openapi_spec_hash: b7a69bc656f123eb208df23c1146167f config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 7172a9cab810771931375123611ddd1403fec025 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 10:17:27 +0000 Subject: [PATCH 25/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 4e2667c8..9f82aae4 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-963ff2f3e6f462310c3a5ce4b2b1037f3d83217fce378282d1d6236ec0cd2475.yml -openapi_spec_hash: b7a69bc656f123eb208df23c1146167f +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-524344ec10484a948c42d0995a35932d8a111f2eafb36ec5aa22f94d0bb72db2.yml +openapi_spec_hash: 05c9ef2e179f41f0549089048e524aa5 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From e4bfcc4d57560d01fbc189c9315d157023dfe39c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 12:21:00 +0000 Subject: [PATCH 26/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 9f82aae4..dee9c403 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-524344ec10484a948c42d0995a35932d8a111f2eafb36ec5aa22f94d0bb72db2.yml -openapi_spec_hash: 05c9ef2e179f41f0549089048e524aa5 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-95db25b4f05f5488ac04fbbddda5b70093ec05d689a3f83ba0e177e4480f55ae.yml +openapi_spec_hash: 08def40451736a12e7fd7f8d155ae1a3 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 9b26ab9c71f299ee842f65b7e563c43a1d63c8c7 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 14:19:14 +0000 Subject: [PATCH 27/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index dee9c403..dd84e2bf 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-95db25b4f05f5488ac04fbbddda5b70093ec05d689a3f83ba0e177e4480f55ae.yml -openapi_spec_hash: 08def40451736a12e7fd7f8d155ae1a3 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-b1971aec4f8393bb2c3ce477f1aa899ad76cfca7449bc4e6ffaa49a40e3288fa.yml +openapi_spec_hash: 899d4ef7868df95441035cf458c53eaf config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 8e541937c776e758c2cfb6e61a9e75a3f11dc452 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 16:16:13 +0000 Subject: [PATCH 28/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index dd84e2bf..6081fe83 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-b1971aec4f8393bb2c3ce477f1aa899ad76cfca7449bc4e6ffaa49a40e3288fa.yml -openapi_spec_hash: 899d4ef7868df95441035cf458c53eaf +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-56ed715e0bfdb412ddd314991606900252d8947a6df5da84d436bb3c09e5fcd2.yml +openapi_spec_hash: 074d68f8bb7eda77504b2e979074eeeb config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From c05f2b10168a8e89047730db7ca58aca9667085b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 18:18:52 +0000 Subject: [PATCH 29/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 6081fe83..cd5af537 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-56ed715e0bfdb412ddd314991606900252d8947a6df5da84d436bb3c09e5fcd2.yml -openapi_spec_hash: 074d68f8bb7eda77504b2e979074eeeb +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-e5033fc7ca83e8da26d6fe6183134e6224dfa9e60a34bb387b1680a6a04a08d0.yml +openapi_spec_hash: 66d827b4115635055e9be28a5a42e61a config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 166071b675339eed281975219d2980147b6ddfab Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 20:14:40 +0000 Subject: [PATCH 30/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index cd5af537..b0284678 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-e5033fc7ca83e8da26d6fe6183134e6224dfa9e60a34bb387b1680a6a04a08d0.yml -openapi_spec_hash: 66d827b4115635055e9be28a5a42e61a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-48433e305bd50c224a76480dbd25271ad075b76117a76f80bd68edde604bc24e.yml +openapi_spec_hash: a36b06c6b882df4bbb1e9c97342c586a config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From c3abdf2ecb7b7f6e7cc4fa631c8fccaa74948ec3 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 5 Apr 2026 22:14:36 +0000 Subject: [PATCH 31/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index b0284678..205b7a14 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-48433e305bd50c224a76480dbd25271ad075b76117a76f80bd68edde604bc24e.yml -openapi_spec_hash: a36b06c6b882df4bbb1e9c97342c586a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-9884c2de193a2248e4f5da786e11255542b01f2dff4d669ab106ea2e1a5332a2.yml +openapi_spec_hash: 781b7b6c2f31b08fe80c7927f399a22c config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From fdd58916c80ee2b2f83bf7323196491f76a0663a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 00:50:18 +0000 Subject: [PATCH 32/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 205b7a14..b1aadbcd 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-9884c2de193a2248e4f5da786e11255542b01f2dff4d669ab106ea2e1a5332a2.yml -openapi_spec_hash: 781b7b6c2f31b08fe80c7927f399a22c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-c053a88862c1ba0e73d0617227c15435ebc11b766cbfd194dd9cfedf7acfc96b.yml +openapi_spec_hash: 2da91f004e9e60cbd60443dad31fde35 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 6c9c75ab27eca8a92b4a567e85a4cff624b220ef Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 03:15:39 +0000 Subject: [PATCH 33/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index b1aadbcd..81b43771 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-c053a88862c1ba0e73d0617227c15435ebc11b766cbfd194dd9cfedf7acfc96b.yml -openapi_spec_hash: 2da91f004e9e60cbd60443dad31fde35 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-6d7e46b32f3615b89ccf45b68d04b7fdaa1e55e0697c4367c71440a245c7dd75.yml +openapi_spec_hash: 1517cfa98a3dd9601420c604ee23c949 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 82ae6d5b37aa9efcc1964b49a34d79de42bb2607 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 05:05:31 +0000 Subject: [PATCH 34/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 81b43771..dcaf6008 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-6d7e46b32f3615b89ccf45b68d04b7fdaa1e55e0697c4367c71440a245c7dd75.yml -openapi_spec_hash: 1517cfa98a3dd9601420c604ee23c949 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-6c3945698ef1c05b82162fc4c1e133f0e631b09deb54c2e52a8c5d3583146e18.yml +openapi_spec_hash: 5a7eff646f8c8377ffe57fb2b07a3f27 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From d535a31334f942cf826d4256e3db40cfb8dc7dd0 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 06:49:57 +0000 Subject: [PATCH 35/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index dcaf6008..525db866 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-6c3945698ef1c05b82162fc4c1e133f0e631b09deb54c2e52a8c5d3583146e18.yml -openapi_spec_hash: 5a7eff646f8c8377ffe57fb2b07a3f27 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-af3aa847b788e651c964c8186b58b5632b52e6619e6154d4d8d89f0dee373027.yml +openapi_spec_hash: dab6f12a6756d49472e79d397cc5f05d config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 0fdabd29781bbffa6b62a32860b869fc4e2bff29 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 08:42:27 +0000 Subject: [PATCH 36/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 525db866..1e727d87 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-af3aa847b788e651c964c8186b58b5632b52e6619e6154d4d8d89f0dee373027.yml -openapi_spec_hash: dab6f12a6756d49472e79d397cc5f05d +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-a430e552001955c1797538848e90c7a5560e5b1a47ac78dc69c0454d4f2fd338.yml +openapi_spec_hash: 3f7c31c57720f4f8885b0cc73f690250 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From ebb3210f3e42e344abe3415ab1ab7aae475a2e83 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 10:33:11 +0000 Subject: [PATCH 37/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1e727d87..eda8adf7 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-a430e552001955c1797538848e90c7a5560e5b1a47ac78dc69c0454d4f2fd338.yml -openapi_spec_hash: 3f7c31c57720f4f8885b0cc73f690250 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-5a9b14f19a263bd16d4052d3b6748db99a4b7e344821d990f10e34ece9aabd4a.yml +openapi_spec_hash: 482db6d7fc80fe5af0e866e35122b4a2 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 124c7043ff615b4548efbd7b92446f749cfadfc3 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 15:20:51 +0000 Subject: [PATCH 38/96] feat(api): aggregated API specs update --- .stats.yml | 6 +- src/gcore/resources/dns/api.md | 1 - src/gcore/resources/dns/network_mappings.py | 96 ------------------- src/gcore/types/dns/zones/dns_output_rrset.py | 14 +-- .../types/dns/zones/rrset_create_params.py | 14 +-- .../types/dns/zones/rrset_replace_params.py | 14 +-- .../dns/test_network_mappings.py | 82 ---------------- 7 files changed, 18 insertions(+), 209 deletions(-) diff --git a/.stats.yml b/.stats.yml index eda8adf7..63489e6b 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-5a9b14f19a263bd16d4052d3b6748db99a4b7e344821d990f10e34ece9aabd4a.yml -openapi_spec_hash: 482db6d7fc80fe5af0e866e35122b4a2 +configured_endpoints: 657 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-a107ecd97693fac42644652cc172ba826f45932f24eea884a4b17446cf6e0b00.yml +openapi_spec_hash: 7090ae2ceff4174353a8aa2f860f5946 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 diff --git a/src/gcore/resources/dns/api.md b/src/gcore/resources/dns/api.md index ff89a8bc..63494906 100644 --- a/src/gcore/resources/dns/api.md +++ b/src/gcore/resources/dns/api.md @@ -154,6 +154,5 @@ Methods: - client.dns.network_mappings.list(\*\*params) -> NetworkMappingListResponse - client.dns.network_mappings.delete(id) -> object - client.dns.network_mappings.get(id) -> DNSNetworkMapping -- client.dns.network_mappings.get_by_name(name) -> DNSNetworkMapping - client.dns.network*mappings.import*() -> NetworkMappingImportResponse - client.dns.network_mappings.replace(id, \*\*params) -> object diff --git a/src/gcore/resources/dns/network_mappings.py b/src/gcore/resources/dns/network_mappings.py index 567435c6..ffd44c7a 100644 --- a/src/gcore/resources/dns/network_mappings.py +++ b/src/gcore/resources/dns/network_mappings.py @@ -263,48 +263,6 @@ def get( cast_to=DNSNetworkMapping, ) - def get_by_name( - self, - name: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DNSNetworkMapping: - """ - Get network mapping by name. - - Particular network mapping item info - - Example of request: - - ``` - curl --location --request GET 'https://api.gcore.com/dns/v2/network-mappings/test-mapping' \\ - --header 'Authorization: Bearer ...' - ``` - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not name: - raise ValueError(f"Expected a non-empty value for `name` but received {name!r}") - return self._get( - path_template("/dns/v2/network-mappings/{name}", name=name), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=DNSNetworkMapping, - ) - def import_( self, *, @@ -697,48 +655,6 @@ async def get( cast_to=DNSNetworkMapping, ) - async def get_by_name( - self, - name: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> DNSNetworkMapping: - """ - Get network mapping by name. - - Particular network mapping item info - - Example of request: - - ``` - curl --location --request GET 'https://api.gcore.com/dns/v2/network-mappings/test-mapping' \\ - --header 'Authorization: Bearer ...' - ``` - - Args: - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not name: - raise ValueError(f"Expected a non-empty value for `name` but received {name!r}") - return await self._get( - path_template("/dns/v2/network-mappings/{name}", name=name), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=DNSNetworkMapping, - ) - async def import_( self, *, @@ -912,9 +828,6 @@ def __init__(self, network_mappings: NetworkMappingsResource) -> None: self.get = to_raw_response_wrapper( network_mappings.get, ) - self.get_by_name = to_raw_response_wrapper( - network_mappings.get_by_name, - ) self.import_ = to_raw_response_wrapper( network_mappings.import_, ) @@ -939,9 +852,6 @@ def __init__(self, network_mappings: AsyncNetworkMappingsResource) -> None: self.get = async_to_raw_response_wrapper( network_mappings.get, ) - self.get_by_name = async_to_raw_response_wrapper( - network_mappings.get_by_name, - ) self.import_ = async_to_raw_response_wrapper( network_mappings.import_, ) @@ -966,9 +876,6 @@ def __init__(self, network_mappings: NetworkMappingsResource) -> None: self.get = to_streamed_response_wrapper( network_mappings.get, ) - self.get_by_name = to_streamed_response_wrapper( - network_mappings.get_by_name, - ) self.import_ = to_streamed_response_wrapper( network_mappings.import_, ) @@ -993,9 +900,6 @@ def __init__(self, network_mappings: AsyncNetworkMappingsResource) -> None: self.get = async_to_streamed_response_wrapper( network_mappings.get, ) - self.get_by_name = async_to_streamed_response_wrapper( - network_mappings.get_by_name, - ) self.import_ = async_to_streamed_response_wrapper( network_mappings.import_, ) diff --git a/src/gcore/types/dns/zones/dns_output_rrset.py b/src/gcore/types/dns/zones/dns_output_rrset.py index 67b794d6..169ecc4c 100644 --- a/src/gcore/types/dns/zones/dns_output_rrset.py +++ b/src/gcore/types/dns/zones/dns_output_rrset.py @@ -14,15 +14,11 @@ class ResourceRecord(BaseModel): """ Content of resource record The exact length of the array depends on the type of rrset, each individual record parameter must be a separate element of the array. - For example - - - SRV-record: `[100, 1, 5061, "example.com"]` - - CNAME-record: `[ "the.target.domain" ]` - - A-record: `[ "1.2.3.4", "5.6.7.8" ]` - - AAAA-record: `[ "2001:db8::1", "2001:db8::2" ]` - - MX-record: `[ "mail1.example.com", "mail2.example.com" ]` - - SVCB/HTTPS-record: - `[ 1, ".", ["alpn", "h3", "h2"], [ "port", 1443 ], [ "ipv4hint", "10.0.0.1" ], [ "ech", "AEn+DQBFKwAgACABWIHUGj4u+PIggYXcR5JF0gYk3dCRioBW8uJq9H4mKAAIAAEAAQABAANAEnB1YmxpYy50bHMtZWNoLmRldgAA" ] ]` + For example SRV-record: `[100, 1, 5061, "example.com"]` CNAME-record: + `[ "the.target.domain" ]` A-record: `[ "1.2.3.4", "5.6.7.8" ]` AAAA-record: + `[ "2001:db8::1", "2001:db8::2" ]` MX-record: + `[ "mail1.example.com", "mail2.example.com" ]` SVCB/HTTPS-record: + `[ 1, ".", ["alpn", "h3", "h2"], [ "port", 1443 ], [ "ipv4hint", "10.0.0.1" ], [ "ech", "AEn+DQBFKwAgACABWIHUGj4u+PIggYXcR5JF0gYk3dCRioBW8uJq9H4mKAAIAAEAAQABAANAEnB1YmxpYy50bHMtZWNoLmRldgAA" ] ]` """ id: Optional[int] = None diff --git a/src/gcore/types/dns/zones/rrset_create_params.py b/src/gcore/types/dns/zones/rrset_create_params.py index e4b2f876..a5bfdef1 100644 --- a/src/gcore/types/dns/zones/rrset_create_params.py +++ b/src/gcore/types/dns/zones/rrset_create_params.py @@ -34,15 +34,11 @@ class ResourceRecord(TypedDict, total=False): """ Content of resource record The exact length of the array depends on the type of rrset, each individual record parameter must be a separate element of the array. - For example - - - SRV-record: `[100, 1, 5061, "example.com"]` - - CNAME-record: `[ "the.target.domain" ]` - - A-record: `[ "1.2.3.4", "5.6.7.8" ]` - - AAAA-record: `[ "2001:db8::1", "2001:db8::2" ]` - - MX-record: `[ "mail1.example.com", "mail2.example.com" ]` - - SVCB/HTTPS-record: - `[ 1, ".", ["alpn", "h3", "h2"], [ "port", 1443 ], [ "ipv4hint", "10.0.0.1" ], [ "ech", "AEn+DQBFKwAgACABWIHUGj4u+PIggYXcR5JF0gYk3dCRioBW8uJq9H4mKAAIAAEAAQABAANAEnB1YmxpYy50bHMtZWNoLmRldgAA" ] ]` + For example SRV-record: `[100, 1, 5061, "example.com"]` CNAME-record: + `[ "the.target.domain" ]` A-record: `[ "1.2.3.4", "5.6.7.8" ]` AAAA-record: + `[ "2001:db8::1", "2001:db8::2" ]` MX-record: + `[ "mail1.example.com", "mail2.example.com" ]` SVCB/HTTPS-record: + `[ 1, ".", ["alpn", "h3", "h2"], [ "port", 1443 ], [ "ipv4hint", "10.0.0.1" ], [ "ech", "AEn+DQBFKwAgACABWIHUGj4u+PIggYXcR5JF0gYk3dCRioBW8uJq9H4mKAAIAAEAAQABAANAEnB1YmxpYy50bHMtZWNoLmRldgAA" ] ]` """ enabled: bool diff --git a/src/gcore/types/dns/zones/rrset_replace_params.py b/src/gcore/types/dns/zones/rrset_replace_params.py index 46f6274c..b2d155ec 100644 --- a/src/gcore/types/dns/zones/rrset_replace_params.py +++ b/src/gcore/types/dns/zones/rrset_replace_params.py @@ -34,15 +34,11 @@ class ResourceRecord(TypedDict, total=False): """ Content of resource record The exact length of the array depends on the type of rrset, each individual record parameter must be a separate element of the array. - For example - - - SRV-record: `[100, 1, 5061, "example.com"]` - - CNAME-record: `[ "the.target.domain" ]` - - A-record: `[ "1.2.3.4", "5.6.7.8" ]` - - AAAA-record: `[ "2001:db8::1", "2001:db8::2" ]` - - MX-record: `[ "mail1.example.com", "mail2.example.com" ]` - - SVCB/HTTPS-record: - `[ 1, ".", ["alpn", "h3", "h2"], [ "port", 1443 ], [ "ipv4hint", "10.0.0.1" ], [ "ech", "AEn+DQBFKwAgACABWIHUGj4u+PIggYXcR5JF0gYk3dCRioBW8uJq9H4mKAAIAAEAAQABAANAEnB1YmxpYy50bHMtZWNoLmRldgAA" ] ]` + For example SRV-record: `[100, 1, 5061, "example.com"]` CNAME-record: + `[ "the.target.domain" ]` A-record: `[ "1.2.3.4", "5.6.7.8" ]` AAAA-record: + `[ "2001:db8::1", "2001:db8::2" ]` MX-record: + `[ "mail1.example.com", "mail2.example.com" ]` SVCB/HTTPS-record: + `[ 1, ".", ["alpn", "h3", "h2"], [ "port", 1443 ], [ "ipv4hint", "10.0.0.1" ], [ "ech", "AEn+DQBFKwAgACABWIHUGj4u+PIggYXcR5JF0gYk3dCRioBW8uJq9H4mKAAIAAEAAQABAANAEnB1YmxpYy50bHMtZWNoLmRldgAA" ] ]` """ enabled: bool diff --git a/tests/api_resources/dns/test_network_mappings.py b/tests/api_resources/dns/test_network_mappings.py index 2211c8fe..90c3706f 100644 --- a/tests/api_resources/dns/test_network_mappings.py +++ b/tests/api_resources/dns/test_network_mappings.py @@ -158,47 +158,6 @@ def test_streaming_response_get(self, client: Gcore) -> None: assert cast(Any, response.is_closed) is True - @pytest.mark.skip(reason="DNS-2948: OpenAPI spec has ambiguous overlapping path templates {id} vs {name}") - @parametrize - def test_method_get_by_name(self, client: Gcore) -> None: - network_mapping = client.dns.network_mappings.get_by_name( - "name", - ) - assert_matches_type(DNSNetworkMapping, network_mapping, path=["response"]) - - @pytest.mark.skip(reason="DNS-2948: OpenAPI spec has ambiguous overlapping path templates {id} vs {name}") - @parametrize - def test_raw_response_get_by_name(self, client: Gcore) -> None: - response = client.dns.network_mappings.with_raw_response.get_by_name( - "name", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - network_mapping = response.parse() - assert_matches_type(DNSNetworkMapping, network_mapping, path=["response"]) - - @pytest.mark.skip(reason="DNS-2948: OpenAPI spec has ambiguous overlapping path templates {id} vs {name}") - @parametrize - def test_streaming_response_get_by_name(self, client: Gcore) -> None: - with client.dns.network_mappings.with_streaming_response.get_by_name( - "name", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - network_mapping = response.parse() - assert_matches_type(DNSNetworkMapping, network_mapping, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @parametrize - def test_path_params_get_by_name(self, client: Gcore) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `name` but received ''"): - client.dns.network_mappings.with_raw_response.get_by_name( - "", - ) - @parametrize def test_method_import(self, client: Gcore) -> None: network_mapping = client.dns.network_mappings.import_() @@ -412,47 +371,6 @@ async def test_streaming_response_get(self, async_client: AsyncGcore) -> None: assert cast(Any, response.is_closed) is True - @pytest.mark.skip(reason="DNS-2948: OpenAPI spec has ambiguous overlapping path templates {id} vs {name}") - @parametrize - async def test_method_get_by_name(self, async_client: AsyncGcore) -> None: - network_mapping = await async_client.dns.network_mappings.get_by_name( - "name", - ) - assert_matches_type(DNSNetworkMapping, network_mapping, path=["response"]) - - @pytest.mark.skip(reason="DNS-2948: OpenAPI spec has ambiguous overlapping path templates {id} vs {name}") - @parametrize - async def test_raw_response_get_by_name(self, async_client: AsyncGcore) -> None: - response = await async_client.dns.network_mappings.with_raw_response.get_by_name( - "name", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - network_mapping = await response.parse() - assert_matches_type(DNSNetworkMapping, network_mapping, path=["response"]) - - @pytest.mark.skip(reason="DNS-2948: OpenAPI spec has ambiguous overlapping path templates {id} vs {name}") - @parametrize - async def test_streaming_response_get_by_name(self, async_client: AsyncGcore) -> None: - async with async_client.dns.network_mappings.with_streaming_response.get_by_name( - "name", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - network_mapping = await response.parse() - assert_matches_type(DNSNetworkMapping, network_mapping, path=["response"]) - - assert cast(Any, response.is_closed) is True - - @parametrize - async def test_path_params_get_by_name(self, async_client: AsyncGcore) -> None: - with pytest.raises(ValueError, match=r"Expected a non-empty value for `name` but received ''"): - await async_client.dns.network_mappings.with_raw_response.get_by_name( - "", - ) - @parametrize async def test_method_import(self, async_client: AsyncGcore) -> None: network_mapping = await async_client.dns.network_mappings.import_() From f26369916ffd96331d9dd541caab4fffc25c3575 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 14:28:38 +0000 Subject: [PATCH 39/96] feat(api): aggregated API specs update --- .stats.yml | 4 +- src/gcore/resources/cloud/api.md | 8 +- src/gcore/resources/cloud/baremetal/images.py | 30 ++-- src/gcore/resources/cloud/instances/images.py | 28 +++- src/gcore/types/cloud/baremetal/__init__.py | 1 + .../cloud/baremetal/image_list_params.py | 8 +- .../cloud/baremetal/image_list_response.py | 129 ++++++++++++++++++ .../cloud/baremetal/server_create_params.py | 5 +- src/gcore/types/cloud/billing_reservation.py | 2 +- .../types/cloud/cost_report_aggregated.py | 2 +- .../cloud/cost_report_aggregated_monthly.py | 2 +- src/gcore/types/cloud/cost_report_detailed.py | 2 +- src/gcore/types/cloud/ddos_profile_field.py | 10 +- .../clusters/interface_attach_params.py | 28 ++-- src/gcore/types/cloud/image.py | 90 ++++++------ .../image_create_from_volume_params.py | 2 + .../cloud/instances/image_list_params.py | 8 +- .../instances/interface_attach_params.py | 28 ++-- .../types/cloud/k8s/cluster_create_params.py | 5 +- .../types/cloud/k8s/cluster_update_params.py | 5 +- src/gcore/types/cloud/k8s/k8s_cluster.py | 5 +- src/gcore/types/cloud/region.py | 3 + src/gcore/types/cloud/usage_report.py | 4 +- .../cloud/baremetal/test_images.py | 54 ++++---- .../cloud/baremetal/test_servers.py | 2 - .../gpu_baremetal/clusters/test_interfaces.py | 24 ++-- .../cloud/instances/test_images.py | 68 ++++----- .../cloud/instances/test_interfaces.py | 24 ++-- .../api_resources/cloud/k8s/test_clusters.py | 4 - 29 files changed, 351 insertions(+), 234 deletions(-) create mode 100644 src/gcore/types/cloud/baremetal/image_list_response.py diff --git a/.stats.yml b/.stats.yml index 63489e6b..4404c997 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 657 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-a107ecd97693fac42644652cc172ba826f45932f24eea884a4b17446cf6e0b00.yml -openapi_spec_hash: 7090ae2ceff4174353a8aa2f860f5946 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-c30b070f2f0ce73f80dfb6c950d3e46672acaedef0a7f011e75065477779bdf6.yml +openapi_spec_hash: 56a6b5ca8f97983419b03f5e33b36594 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 diff --git a/src/gcore/resources/cloud/api.md b/src/gcore/resources/cloud/api.md index fb309d36..40c43971 100644 --- a/src/gcore/resources/cloud/api.md +++ b/src/gcore/resources/cloud/api.md @@ -646,9 +646,15 @@ Methods: ### Images +Types: + +```python +from gcore.types.cloud.baremetal import ImageListResponse +``` + Methods: -- client.cloud.baremetal.images.list(\*, project_id, region_id, \*\*params) -> ImageList +- client.cloud.baremetal.images.list(\*, project_id, region_id, \*\*params) -> ImageListResponse ### Flavors diff --git a/src/gcore/resources/cloud/baremetal/images.py b/src/gcore/resources/cloud/baremetal/images.py index cbd700b5..f0bac9bc 100644 --- a/src/gcore/resources/cloud/baremetal/images.py +++ b/src/gcore/resources/cloud/baremetal/images.py @@ -18,7 +18,7 @@ ) from ...._base_client import make_request_options from ....types.cloud.baremetal import image_list_params -from ....types.cloud.image_list import ImageList +from ....types.cloud.baremetal.image_list_response import ImageListResponse __all__ = ["ImagesResource", "AsyncImagesResource"] @@ -59,7 +59,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ImageList: + ) -> ImageListResponse: """Retrieve a list of available images for bare metal servers. The list can be @@ -67,13 +67,17 @@ def list( not be owned by the project. Args: - include_prices: Show price + project_id: Project ID + + region_id: Region ID + + include_prices: Show price. private: Any value to show private images - tag_key: Filter by tag keys. + tag_key: Optional. Filter by tag keys. ?`tag_key`=key1&`tag_key`=key2 - tag_key_value: Filter by tag key-value pairs. Must be a valid JSON string. + tag_key_value: Optional. Filter by tag key-value pairs. visibility: Image visibility. Globally visible images are public @@ -107,7 +111,7 @@ def list( image_list_params.ImageListParams, ), ), - cast_to=ImageList, + cast_to=ImageListResponse, ) @@ -147,7 +151,7 @@ async def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ImageList: + ) -> ImageListResponse: """Retrieve a list of available images for bare metal servers. The list can be @@ -155,13 +159,17 @@ async def list( not be owned by the project. Args: - include_prices: Show price + project_id: Project ID + + region_id: Region ID + + include_prices: Show price. private: Any value to show private images - tag_key: Filter by tag keys. + tag_key: Optional. Filter by tag keys. ?`tag_key`=key1&`tag_key`=key2 - tag_key_value: Filter by tag key-value pairs. Must be a valid JSON string. + tag_key_value: Optional. Filter by tag key-value pairs. visibility: Image visibility. Globally visible images are public @@ -195,7 +203,7 @@ async def list( image_list_params.ImageListParams, ), ), - cast_to=ImageList, + cast_to=ImageListResponse, ) diff --git a/src/gcore/resources/cloud/instances/images.py b/src/gcore/resources/cloud/instances/images.py index 6599d48b..8fe2f588 100644 --- a/src/gcore/resources/cloud/instances/images.py +++ b/src/gcore/resources/cloud/instances/images.py @@ -163,13 +163,17 @@ def list( by the project or are public/shared with the client. Args: - include_prices: Show price + project_id: Project ID + + region_id: Region ID + + include_prices: Show price. private: Any value to show private images - tag_key: Filter by tag keys. + tag_key: Optional. Filter by tag keys. ?`tag_key`=key1&`tag_key`=key2 - tag_key_value: Filter by tag key-value pairs. Must be a valid JSON string. + tag_key_value: Optional. Filter by tag key-value pairs. visibility: Image visibility. Globally visible images are public @@ -316,6 +320,10 @@ def create_from_volume( an image from it. Args: + project_id: Project ID + + region_id: Region ID + name: Image name volume_id: Required if source is volume. Volume id @@ -785,13 +793,17 @@ async def list( by the project or are public/shared with the client. Args: - include_prices: Show price + project_id: Project ID + + region_id: Region ID + + include_prices: Show price. private: Any value to show private images - tag_key: Filter by tag keys. + tag_key: Optional. Filter by tag keys. ?`tag_key`=key1&`tag_key`=key2 - tag_key_value: Filter by tag key-value pairs. Must be a valid JSON string. + tag_key_value: Optional. Filter by tag key-value pairs. visibility: Image visibility. Globally visible images are public @@ -938,6 +950,10 @@ async def create_from_volume( an image from it. Args: + project_id: Project ID + + region_id: Region ID + name: Image name volume_id: Required if source is volume. Volume id diff --git a/src/gcore/types/cloud/baremetal/__init__.py b/src/gcore/types/cloud/baremetal/__init__.py index c96b5497..7bef20d4 100644 --- a/src/gcore/types/cloud/baremetal/__init__.py +++ b/src/gcore/types/cloud/baremetal/__init__.py @@ -6,6 +6,7 @@ from .image_list_params import ImageListParams as ImageListParams from .flavor_list_params import FlavorListParams as FlavorListParams from .server_list_params import ServerListParams as ServerListParams +from .image_list_response import ImageListResponse as ImageListResponse from .server_create_params import ServerCreateParams as ServerCreateParams from .server_delete_params import ServerDeleteParams as ServerDeleteParams from .server_update_params import ServerUpdateParams as ServerUpdateParams diff --git a/src/gcore/types/cloud/baremetal/image_list_params.py b/src/gcore/types/cloud/baremetal/image_list_params.py index 1e1d2903..db3e8854 100644 --- a/src/gcore/types/cloud/baremetal/image_list_params.py +++ b/src/gcore/types/cloud/baremetal/image_list_params.py @@ -11,20 +11,22 @@ class ImageListParams(TypedDict, total=False): project_id: int + """Project ID""" region_id: int + """Region ID""" include_prices: bool - """Show price""" + """Show price.""" private: str """Any value to show private images""" tag_key: SequenceNotStr[str] - """Filter by tag keys.""" + """Optional. Filter by tag keys. ?`tag_key`=key1&`tag_key`=key2""" tag_key_value: str - """Filter by tag key-value pairs. Must be a valid JSON string.""" + """Optional. Filter by tag key-value pairs.""" visibility: Literal["private", "public", "shared"] """Image visibility. Globally visible images are public""" diff --git a/src/gcore/types/cloud/baremetal/image_list_response.py b/src/gcore/types/cloud/baremetal/image_list_response.py new file mode 100644 index 00000000..81c15f77 --- /dev/null +++ b/src/gcore/types/cloud/baremetal/image_list_response.py @@ -0,0 +1,129 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import List, Optional +from datetime import datetime +from typing_extensions import Literal + +from ..tag import Tag +from ...._models import BaseModel + +__all__ = ["ImageListResponse", "Result"] + + +class Result(BaseModel): + id: str + """Image ID""" + + architecture: Literal["aarch64", "x86_64"] + """An image architecture type: aarch64, `x86_64`.""" + + created_at: datetime + """Datetime when the image was created""" + + creator_task_id: Optional[str] = None + """Task that created this entity""" + + currency_code: Optional[str] = None + """Currency code. Shown if the `include_prices` query parameter if set to true""" + + description: Optional[str] = None + """Image description""" + + disk_format: str + """Disk format""" + + display_order: Optional[int] = None + + gpu_driver: Optional[str] = None + """Name of the GPU driver vendor""" + + gpu_driver_type: Optional[str] = None + """Type of the GPU driver""" + + gpu_driver_version: Optional[str] = None + """Version of the installed GPU driver""" + + hw_firmware_type: Optional[Literal["bios", "uefi"]] = None + """Specifies the type of firmware with which to boot the guest.""" + + hw_machine_type: Optional[Literal["pc", "q35"]] = None + """A virtual chipset type.""" + + is_baremetal: Optional[bool] = None + """For bare metal servers this value is always set to true""" + + min_disk: int + """Minimal boot volume required""" + + min_ram: int + """Minimal VM RAM required""" + + name: str + """Image display name""" + + os_distro: str + """OS Distribution, i.e. Debian, CentOS, Ubuntu, CoreOS etc.""" + + os_type: Literal["linux", "windows"] + """The operating system installed on the image.""" + + os_version: str + """OS version, i.e. 19.04 (for Ubuntu) or 9.4 for Debian""" + + price_per_hour: Optional[float] = None + """Price per hour. Shown if the `include_prices` query parameter if set to true""" + + price_per_month: Optional[float] = None + """Price per month. Shown if the `include_prices` query parameter if set to true""" + + price_status: Optional[Literal["error", "hide", "show"]] = None + """Price status for the UI""" + + project_id: int + """Project ID""" + + region: str + """Region name""" + + region_id: int + """Region ID""" + + size: Optional[int] = None + """Image size in bytes""" + + ssh_key: Optional[Literal["allow", "deny", "required"]] = None + """Whether the image supports SSH key or not""" + + status: str + """Image status, i.e. active""" + + tags: List[Tag] + """List of key-value tags associated with the resource. + + A tag is a key-value pair that can be associated with a resource, enabling + efficient filtering and grouping for better organization and management. Some + tags are read-only and cannot be modified by the user. Tags are also integrated + with cost reports, allowing cost data to be filtered based on tag keys or + values. + """ + + task_id: Optional[str] = None + """The UUID of the active task that currently holds a lock on the resource. + + This lock prevents concurrent modifications to ensure consistency. If `null`, + the resource is not locked. + """ + + updated_at: datetime + """Datetime when the image was updated""" + + visibility: str + """Image visibility. Globally visible images are public""" + + +class ImageListResponse(BaseModel): + count: int + """Number of objects""" + + results: List[Result] + """Objects""" diff --git a/src/gcore/types/cloud/baremetal/server_create_params.py b/src/gcore/types/cloud/baremetal/server_create_params.py index ad257adf..d406fbec 100644 --- a/src/gcore/types/cloud/baremetal/server_create_params.py +++ b/src/gcore/types/cloud/baremetal/server_create_params.py @@ -353,14 +353,11 @@ class InterfaceCreateBareMetalReservedFixedIPInterfaceSerializer(TypedDict, tota class DDOSProfileField(TypedDict, total=False): - base_field: Optional[int] + base_field: Required[int] """Unique identifier of the DDoS protection field being configured""" field_value: object - value: Optional[str] - """Basic type value. Only one of 'value' or 'field_value' must be specified.""" - class DDOSProfile(TypedDict, total=False): """Enable advanced DDoS protection for the server""" diff --git a/src/gcore/types/cloud/billing_reservation.py b/src/gcore/types/cloud/billing_reservation.py index 9800c029..6b56ff23 100644 --- a/src/gcore/types/cloud/billing_reservation.py +++ b/src/gcore/types/cloud/billing_reservation.py @@ -48,7 +48,7 @@ class Commit(BaseModel): price_total: str """Total price for the reservation period for the full reserved amount""" - subscription_id: int + subscription_id: Optional[int] = None """Billing subscription ID for commit""" diff --git a/src/gcore/types/cloud/cost_report_aggregated.py b/src/gcore/types/cloud/cost_report_aggregated.py index 4697169e..a1fd1fb7 100644 --- a/src/gcore/types/cloud/cost_report_aggregated.py +++ b/src/gcore/types/cloud/cost_report_aggregated.py @@ -253,7 +253,7 @@ class ResultTotalEgressTrafficWithCostSerializer(BaseModel): err: Optional[str] = None """Error message""" - instance_type: Literal["baremetal", "vm"] + instance_type: Literal["baremetal", "router", "vm"] """Type of the instance""" region: int diff --git a/src/gcore/types/cloud/cost_report_aggregated_monthly.py b/src/gcore/types/cloud/cost_report_aggregated_monthly.py index d62de86d..4eb91aa4 100644 --- a/src/gcore/types/cloud/cost_report_aggregated_monthly.py +++ b/src/gcore/types/cloud/cost_report_aggregated_monthly.py @@ -253,7 +253,7 @@ class ResultTotalEgressTrafficWithCostSerializer(BaseModel): err: Optional[str] = None """Error message""" - instance_type: Literal["baremetal", "vm"] + instance_type: Literal["baremetal", "router", "vm"] """Type of the instance""" region: int diff --git a/src/gcore/types/cloud/cost_report_detailed.py b/src/gcore/types/cloud/cost_report_detailed.py index 348099af..abec9401 100644 --- a/src/gcore/types/cloud/cost_report_detailed.py +++ b/src/gcore/types/cloud/cost_report_detailed.py @@ -368,7 +368,7 @@ class ResultResourceEgressTrafficWithCostSerializer(BaseModel): instance_name: Optional[str] = None """Name of the instance""" - instance_type: Literal["baremetal", "vm"] + instance_type: Literal["baremetal", "router", "vm"] """Type of the instance""" last_seen: datetime diff --git a/src/gcore/types/cloud/ddos_profile_field.py b/src/gcore/types/cloud/ddos_profile_field.py index 0bcfbca1..2e325199 100644 --- a/src/gcore/types/cloud/ddos_profile_field.py +++ b/src/gcore/types/cloud/ddos_profile_field.py @@ -11,7 +11,7 @@ class DDOSProfileField(BaseModel): id: int """Unique identifier for the DDoS protection field""" - base_field: Optional[int] = None + base_field: int """ID of DDoS profile field""" default: Optional[str] = None @@ -20,14 +20,11 @@ class DDOSProfileField(BaseModel): description: Optional[str] = None """Detailed description explaining the field's purpose and usage guidelines""" - field_name: Optional[str] = None - """Name of DDoS profile field""" - field_type: Optional[str] = None """Data type classification of the field (e.g., string, integer, array)""" field_value: object - """Complex value. Only one of 'value' or 'field_value' must be specified.""" + """Complex value for the DDoS profile field""" name: str """Human-readable name of the protection field""" @@ -39,6 +36,3 @@ class DDOSProfileField(BaseModel): validation_schema: object """JSON schema defining validation rules and constraints for the field value""" - - value: Optional[str] = None - """Basic type value. Only one of 'value' or 'field_value' must be specified.""" diff --git a/src/gcore/types/cloud/gpu_baremetal/clusters/interface_attach_params.py b/src/gcore/types/cloud/gpu_baremetal/clusters/interface_attach_params.py index f3a3c26e..9dd695aa 100644 --- a/src/gcore/types/cloud/gpu_baremetal/clusters/interface_attach_params.py +++ b/src/gcore/types/cloud/gpu_baremetal/clusters/interface_attach_params.py @@ -51,14 +51,11 @@ class NewInterfaceExternalExtendSchemaWithDDOS(TypedDict, total=False): class NewInterfaceExternalExtendSchemaWithDdosddosProfileField(TypedDict, total=False): - base_field: Optional[int] + base_field: Required[int] """ID of DDoS profile field""" - field_name: Optional[str] - """Name of DDoS profile field""" - field_value: object - """Complex value. Only one of 'value' or 'field_value' must be specified.""" + """Complex value for the DDoS profile field""" value: Optional[str] """Basic type value. Only one of 'value' or 'field_value' must be specified.""" @@ -109,14 +106,11 @@ class NewInterfaceSpecificSubnetSchema(TypedDict, total=False): class NewInterfaceSpecificSubnetSchemaDDOSProfileField(TypedDict, total=False): - base_field: Optional[int] + base_field: Required[int] """ID of DDoS profile field""" - field_name: Optional[str] - """Name of DDoS profile field""" - field_value: object - """Complex value. Only one of 'value' or 'field_value' must be specified.""" + """Complex value for the DDoS profile field""" value: Optional[str] """Basic type value. Only one of 'value' or 'field_value' must be specified.""" @@ -170,14 +164,11 @@ class NewInterfaceAnySubnetSchema(TypedDict, total=False): class NewInterfaceAnySubnetSchemaDDOSProfileField(TypedDict, total=False): - base_field: Optional[int] + base_field: Required[int] """ID of DDoS profile field""" - field_name: Optional[str] - """Name of DDoS profile field""" - field_value: object - """Complex value. Only one of 'value' or 'field_value' must be specified.""" + """Complex value for the DDoS profile field""" value: Optional[str] """Basic type value. Only one of 'value' or 'field_value' must be specified.""" @@ -228,14 +219,11 @@ class NewInterfaceReservedFixedIPSchema(TypedDict, total=False): class NewInterfaceReservedFixedIPSchemaDDOSProfileField(TypedDict, total=False): - base_field: Optional[int] + base_field: Required[int] """ID of DDoS profile field""" - field_name: Optional[str] - """Name of DDoS profile field""" - field_value: object - """Complex value. Only one of 'value' or 'field_value' must be specified.""" + """Complex value for the DDoS profile field""" value: Optional[str] """Basic type value. Only one of 'value' or 'field_value' must be specified.""" diff --git a/src/gcore/types/cloud/image.py b/src/gcore/types/cloud/image.py index 901b0436..b7775975 100644 --- a/src/gcore/types/cloud/image.py +++ b/src/gcore/types/cloud/image.py @@ -14,12 +14,44 @@ class Image(BaseModel): id: str """Image ID""" + architecture: Literal["aarch64", "x86_64"] + """An image architecture type: aarch64, `x86_64`.""" + created_at: datetime """Datetime when the image was created""" + creator_task_id: Optional[str] = None + """Task that created this entity""" + + currency_code: Optional[str] = None + """Currency code. Shown if the `include_prices` query parameter if set to true""" + + description: Optional[str] = None + """Image description""" + disk_format: str """Disk format""" + display_order: Optional[int] = None + + gpu_driver: Optional[str] = None + """Name of the GPU driver vendor""" + + gpu_driver_type: Optional[str] = None + """Type of the GPU driver""" + + gpu_driver_version: Optional[str] = None + """Version of the installed GPU driver""" + + hw_firmware_type: Optional[Literal["bios", "uefi"]] = None + """Specifies the type of firmware with which to boot the guest.""" + + hw_machine_type: Optional[Literal["pc", "q35"]] = None + """A virtual chipset type.""" + + is_baremetal: bool + """Set to true if the image will be used by bare metal servers.""" + min_disk: int """Minimal boot volume required""" @@ -38,6 +70,15 @@ class Image(BaseModel): os_version: str """OS version, i.e. 19.04 (for Ubuntu) or 9.4 for Debian""" + price_per_hour: Optional[float] = None + """Price per hour. Shown if the `include_prices` query parameter if set to true""" + + price_per_month: Optional[float] = None + """Price per month. Shown if the `include_prices` query parameter if set to true""" + + price_status: Optional[Literal["error", "hide", "show"]] = None + """Price status for the UI""" + project_id: int """Project ID""" @@ -47,9 +88,12 @@ class Image(BaseModel): region_id: int """Region ID""" - size: int + size: Optional[int] = None """Image size in bytes""" + ssh_key: Optional[Literal["allow", "deny", "required"]] = None + """Whether the image supports SSH key or not""" + status: str """Image status, i.e. active""" @@ -63,47 +107,15 @@ class Image(BaseModel): values. """ - updated_at: datetime - """Datetime when the image was updated""" - - visibility: str - """Image visibility. Globally visible images are public""" - - architecture: Optional[Literal["aarch64", "x86_64"]] = None - """An image architecture type: aarch64, `x86_64`""" - - creator_task_id: Optional[str] = None - """Task that created this entity""" - - description: Optional[str] = None - """Image description""" - - display_order: Optional[int] = None - - gpu_driver: Optional[str] = None - """Name of the GPU driver vendor""" - - gpu_driver_type: Optional[str] = None - """Type of the GPU driver""" - - gpu_driver_version: Optional[str] = None - """Version of the installed GPU driver""" - - hw_firmware_type: Optional[Literal["bios", "uefi"]] = None - """Specifies the type of firmware with which to boot the guest.""" - - hw_machine_type: Optional[Literal["pc", "q35"]] = None - """A virtual chipset type.""" - - is_baremetal: Optional[bool] = None - """Set to true if the image will be used by bare metal servers. Defaults to false.""" - - ssh_key: Optional[Literal["allow", "deny", "required"]] = None - """Whether the image supports SSH key or not""" - task_id: Optional[str] = None """The UUID of the active task that currently holds a lock on the resource. This lock prevents concurrent modifications to ensure consistency. If `null`, the resource is not locked. """ + + updated_at: datetime + """Datetime when the image was updated""" + + visibility: str + """Image visibility. Globally visible images are public""" diff --git a/src/gcore/types/cloud/instances/image_create_from_volume_params.py b/src/gcore/types/cloud/instances/image_create_from_volume_params.py index d98e34ae..beb3f64f 100644 --- a/src/gcore/types/cloud/instances/image_create_from_volume_params.py +++ b/src/gcore/types/cloud/instances/image_create_from_volume_params.py @@ -10,8 +10,10 @@ class ImageCreateFromVolumeParams(TypedDict, total=False): project_id: int + """Project ID""" region_id: int + """Region ID""" name: Required[str] """Image name""" diff --git a/src/gcore/types/cloud/instances/image_list_params.py b/src/gcore/types/cloud/instances/image_list_params.py index 1e1d2903..db3e8854 100644 --- a/src/gcore/types/cloud/instances/image_list_params.py +++ b/src/gcore/types/cloud/instances/image_list_params.py @@ -11,20 +11,22 @@ class ImageListParams(TypedDict, total=False): project_id: int + """Project ID""" region_id: int + """Region ID""" include_prices: bool - """Show price""" + """Show price.""" private: str """Any value to show private images""" tag_key: SequenceNotStr[str] - """Filter by tag keys.""" + """Optional. Filter by tag keys. ?`tag_key`=key1&`tag_key`=key2""" tag_key_value: str - """Filter by tag key-value pairs. Must be a valid JSON string.""" + """Optional. Filter by tag key-value pairs.""" visibility: Literal["private", "public", "shared"] """Image visibility. Globally visible images are public""" diff --git a/src/gcore/types/cloud/instances/interface_attach_params.py b/src/gcore/types/cloud/instances/interface_attach_params.py index f3a3c26e..9dd695aa 100644 --- a/src/gcore/types/cloud/instances/interface_attach_params.py +++ b/src/gcore/types/cloud/instances/interface_attach_params.py @@ -51,14 +51,11 @@ class NewInterfaceExternalExtendSchemaWithDDOS(TypedDict, total=False): class NewInterfaceExternalExtendSchemaWithDdosddosProfileField(TypedDict, total=False): - base_field: Optional[int] + base_field: Required[int] """ID of DDoS profile field""" - field_name: Optional[str] - """Name of DDoS profile field""" - field_value: object - """Complex value. Only one of 'value' or 'field_value' must be specified.""" + """Complex value for the DDoS profile field""" value: Optional[str] """Basic type value. Only one of 'value' or 'field_value' must be specified.""" @@ -109,14 +106,11 @@ class NewInterfaceSpecificSubnetSchema(TypedDict, total=False): class NewInterfaceSpecificSubnetSchemaDDOSProfileField(TypedDict, total=False): - base_field: Optional[int] + base_field: Required[int] """ID of DDoS profile field""" - field_name: Optional[str] - """Name of DDoS profile field""" - field_value: object - """Complex value. Only one of 'value' or 'field_value' must be specified.""" + """Complex value for the DDoS profile field""" value: Optional[str] """Basic type value. Only one of 'value' or 'field_value' must be specified.""" @@ -170,14 +164,11 @@ class NewInterfaceAnySubnetSchema(TypedDict, total=False): class NewInterfaceAnySubnetSchemaDDOSProfileField(TypedDict, total=False): - base_field: Optional[int] + base_field: Required[int] """ID of DDoS profile field""" - field_name: Optional[str] - """Name of DDoS profile field""" - field_value: object - """Complex value. Only one of 'value' or 'field_value' must be specified.""" + """Complex value for the DDoS profile field""" value: Optional[str] """Basic type value. Only one of 'value' or 'field_value' must be specified.""" @@ -228,14 +219,11 @@ class NewInterfaceReservedFixedIPSchema(TypedDict, total=False): class NewInterfaceReservedFixedIPSchemaDDOSProfileField(TypedDict, total=False): - base_field: Optional[int] + base_field: Required[int] """ID of DDoS profile field""" - field_name: Optional[str] - """Name of DDoS profile field""" - field_value: object - """Complex value. Only one of 'value' or 'field_value' must be specified.""" + """Complex value for the DDoS profile field""" value: Optional[str] """Basic type value. Only one of 'value' or 'field_value' must be specified.""" diff --git a/src/gcore/types/cloud/k8s/cluster_create_params.py b/src/gcore/types/cloud/k8s/cluster_create_params.py index 6888e441..380c73fc 100644 --- a/src/gcore/types/cloud/k8s/cluster_create_params.py +++ b/src/gcore/types/cloud/k8s/cluster_create_params.py @@ -327,10 +327,7 @@ class DDOSProfileField(TypedDict, total=False): base_field: Required[int] field_value: object - """Complex value. Only one of 'value' or 'field_value' must be specified""" - - value: Optional[str] - """Basic value. Only one of 'value' or 'field_value' must be specified""" + """Complex value for the DDoS profile field""" class DDOSProfile(TypedDict, total=False): diff --git a/src/gcore/types/cloud/k8s/cluster_update_params.py b/src/gcore/types/cloud/k8s/cluster_update_params.py index 911a71e8..52aaea13 100644 --- a/src/gcore/types/cloud/k8s/cluster_update_params.py +++ b/src/gcore/types/cloud/k8s/cluster_update_params.py @@ -237,10 +237,7 @@ class DDOSProfileField(TypedDict, total=False): base_field: Required[int] field_value: object - """Complex value. Only one of 'value' or 'field_value' must be specified""" - - value: Optional[str] - """Basic value. Only one of 'value' or 'field_value' must be specified""" + """Complex value for the DDoS profile field""" class DDOSProfile(TypedDict, total=False): diff --git a/src/gcore/types/cloud/k8s/k8s_cluster.py b/src/gcore/types/cloud/k8s/k8s_cluster.py index 283626ba..3780a73f 100644 --- a/src/gcore/types/cloud/k8s/k8s_cluster.py +++ b/src/gcore/types/cloud/k8s/k8s_cluster.py @@ -162,10 +162,7 @@ class DDOSProfileField(BaseModel): base_field: int field_value: Optional[object] = None - """Complex value. Only one of 'value' or 'field_value' must be specified""" - - value: Optional[str] = None - """Basic value. Only one of 'value' or 'field_value' must be specified""" + """Complex value for the DDoS profile field""" class DDOSProfile(BaseModel): diff --git a/src/gcore/types/cloud/region.py b/src/gcore/types/cloud/region.py index b7b24fbe..5b95eb78 100644 --- a/src/gcore/types/cloud/region.py +++ b/src/gcore/types/cloud/region.py @@ -87,6 +87,9 @@ class Region(BaseModel): metrics_database_id: Optional[int] = None """Foreign key to Metrics database entity""" + slug: str + """Short, human-readable region identifier (e.g. luxembourg-2, santa-clara-1).""" + state: Literal["ACTIVE", "DELETED", "DELETING", "DELETION_FAILED", "INACTIVE", "MAINTENANCE", "NEW"] """Region state""" diff --git a/src/gcore/types/cloud/usage_report.py b/src/gcore/types/cloud/usage_report.py index 659a5421..a99546dd 100644 --- a/src/gcore/types/cloud/usage_report.py +++ b/src/gcore/types/cloud/usage_report.py @@ -346,7 +346,7 @@ class ResourceResourceEgressTrafficSerializer(BaseModel): instance_name: Optional[str] = None """Name of the instance""" - instance_type: Literal["baremetal", "vm"] + instance_type: Literal["baremetal", "router", "vm"] """Type of the instance""" last_seen: datetime @@ -1290,7 +1290,7 @@ class TotalTotalEgressTrafficReportItemSerializer(BaseModel): billing_value_unit: Literal["bytes"] """Unit of billing value""" - instance_type: Literal["baremetal", "vm"] + instance_type: Literal["baremetal", "router", "vm"] """Type of the instance""" region: int diff --git a/tests/api_resources/cloud/baremetal/test_images.py b/tests/api_resources/cloud/baremetal/test_images.py index 235f970b..8e7a6db8 100644 --- a/tests/api_resources/cloud/baremetal/test_images.py +++ b/tests/api_resources/cloud/baremetal/test_images.py @@ -9,7 +9,7 @@ from gcore import Gcore, AsyncGcore from tests.utils import assert_matches_type -from gcore.types.cloud import ImageList +from gcore.types.cloud.baremetal import ImageListResponse base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -20,47 +20,47 @@ class TestImages: @parametrize def test_method_list(self, client: Gcore) -> None: image = client.cloud.baremetal.images.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, ) - assert_matches_type(ImageList, image, path=["response"]) + assert_matches_type(ImageListResponse, image, path=["response"]) @parametrize def test_method_list_with_all_params(self, client: Gcore) -> None: image = client.cloud.baremetal.images.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, include_prices=True, private="private", - tag_key=["string"], + tag_key=["key1", "key2"], tag_key_value="tag_key_value", visibility="private", ) - assert_matches_type(ImageList, image, path=["response"]) + assert_matches_type(ImageListResponse, image, path=["response"]) @parametrize def test_raw_response_list(self, client: Gcore) -> None: response = client.cloud.baremetal.images.with_raw_response.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" image = response.parse() - assert_matches_type(ImageList, image, path=["response"]) + assert_matches_type(ImageListResponse, image, path=["response"]) @parametrize def test_streaming_response_list(self, client: Gcore) -> None: with client.cloud.baremetal.images.with_streaming_response.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" image = response.parse() - assert_matches_type(ImageList, image, path=["response"]) + assert_matches_type(ImageListResponse, image, path=["response"]) assert cast(Any, response.is_closed) is True @@ -73,46 +73,46 @@ class TestAsyncImages: @parametrize async def test_method_list(self, async_client: AsyncGcore) -> None: image = await async_client.cloud.baremetal.images.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, ) - assert_matches_type(ImageList, image, path=["response"]) + assert_matches_type(ImageListResponse, image, path=["response"]) @parametrize async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None: image = await async_client.cloud.baremetal.images.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, include_prices=True, private="private", - tag_key=["string"], + tag_key=["key1", "key2"], tag_key_value="tag_key_value", visibility="private", ) - assert_matches_type(ImageList, image, path=["response"]) + assert_matches_type(ImageListResponse, image, path=["response"]) @parametrize async def test_raw_response_list(self, async_client: AsyncGcore) -> None: response = await async_client.cloud.baremetal.images.with_raw_response.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" image = await response.parse() - assert_matches_type(ImageList, image, path=["response"]) + assert_matches_type(ImageListResponse, image, path=["response"]) @parametrize async def test_streaming_response_list(self, async_client: AsyncGcore) -> None: async with async_client.cloud.baremetal.images.with_streaming_response.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" image = await response.parse() - assert_matches_type(ImageList, image, path=["response"]) + assert_matches_type(ImageListResponse, image, path=["response"]) assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/cloud/baremetal/test_servers.py b/tests/api_resources/cloud/baremetal/test_servers.py index a165f795..4897a5a6 100644 --- a/tests/api_resources/cloud/baremetal/test_servers.py +++ b/tests/api_resources/cloud/baremetal/test_servers.py @@ -54,7 +54,6 @@ def test_method_create_with_all_params(self, client: Gcore) -> None: { "base_field": 10, "field_value": [45046, 45047], - "value": None, } ], }, @@ -418,7 +417,6 @@ async def test_method_create_with_all_params(self, async_client: AsyncGcore) -> { "base_field": 10, "field_value": [45046, 45047], - "value": None, } ], }, diff --git a/tests/api_resources/cloud/gpu_baremetal/clusters/test_interfaces.py b/tests/api_resources/cloud/gpu_baremetal/clusters/test_interfaces.py index de330f4d..650f2175 100644 --- a/tests/api_resources/cloud/gpu_baremetal/clusters/test_interfaces.py +++ b/tests/api_resources/cloud/gpu_baremetal/clusters/test_interfaces.py @@ -83,9 +83,8 @@ def test_method_attach_with_all_params_overload_1(self, client: Gcore) -> None: "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -160,9 +159,8 @@ def test_method_attach_with_all_params_overload_2(self, client: Gcore) -> None: "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -239,9 +237,8 @@ def test_method_attach_with_all_params_overload_3(self, client: Gcore) -> None: "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -319,9 +316,8 @@ def test_method_attach_with_all_params_overload_4(self, client: Gcore) -> None: "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -502,9 +498,8 @@ async def test_method_attach_with_all_params_overload_1(self, async_client: Asyn "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -579,9 +574,8 @@ async def test_method_attach_with_all_params_overload_2(self, async_client: Asyn "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -658,9 +652,8 @@ async def test_method_attach_with_all_params_overload_3(self, async_client: Asyn "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -738,9 +731,8 @@ async def test_method_attach_with_all_params_overload_4(self, async_client: Asyn "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", diff --git a/tests/api_resources/cloud/instances/test_images.py b/tests/api_resources/cloud/instances/test_images.py index 45679a8f..1bbc238c 100644 --- a/tests/api_resources/cloud/instances/test_images.py +++ b/tests/api_resources/cloud/instances/test_images.py @@ -82,19 +82,19 @@ def test_path_params_update(self, client: Gcore) -> None: @parametrize def test_method_list(self, client: Gcore) -> None: image = client.cloud.instances.images.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, ) assert_matches_type(ImageList, image, path=["response"]) @parametrize def test_method_list_with_all_params(self, client: Gcore) -> None: image = client.cloud.instances.images.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, include_prices=True, private="private", - tag_key=["string"], + tag_key=["key1", "key2"], tag_key_value="tag_key_value", visibility="private", ) @@ -103,8 +103,8 @@ def test_method_list_with_all_params(self, client: Gcore) -> None: @parametrize def test_raw_response_list(self, client: Gcore) -> None: response = client.cloud.instances.images.with_raw_response.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, ) assert response.is_closed is True @@ -115,8 +115,8 @@ def test_raw_response_list(self, client: Gcore) -> None: @parametrize def test_streaming_response_list(self, client: Gcore) -> None: with client.cloud.instances.images.with_streaming_response.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -175,8 +175,8 @@ def test_path_params_delete(self, client: Gcore) -> None: @parametrize def test_method_create_from_volume(self, client: Gcore) -> None: image = client.cloud.instances.images.create_from_volume( - project_id=0, - region_id=0, + project_id=1, + region_id=7, name="my-image", volume_id="d478ae29-dedc-4869-82f0-96104425f565", ) @@ -185,8 +185,8 @@ def test_method_create_from_volume(self, client: Gcore) -> None: @parametrize def test_method_create_from_volume_with_all_params(self, client: Gcore) -> None: image = client.cloud.instances.images.create_from_volume( - project_id=0, - region_id=0, + project_id=1, + region_id=7, name="my-image", volume_id="d478ae29-dedc-4869-82f0-96104425f565", architecture="x86_64", @@ -203,8 +203,8 @@ def test_method_create_from_volume_with_all_params(self, client: Gcore) -> None: @parametrize def test_raw_response_create_from_volume(self, client: Gcore) -> None: response = client.cloud.instances.images.with_raw_response.create_from_volume( - project_id=0, - region_id=0, + project_id=1, + region_id=7, name="my-image", volume_id="d478ae29-dedc-4869-82f0-96104425f565", ) @@ -217,8 +217,8 @@ def test_raw_response_create_from_volume(self, client: Gcore) -> None: @parametrize def test_streaming_response_create_from_volume(self, client: Gcore) -> None: with client.cloud.instances.images.with_streaming_response.create_from_volume( - project_id=0, - region_id=0, + project_id=1, + region_id=7, name="my-image", volume_id="d478ae29-dedc-4869-82f0-96104425f565", ) as response: @@ -417,19 +417,19 @@ async def test_path_params_update(self, async_client: AsyncGcore) -> None: @parametrize async def test_method_list(self, async_client: AsyncGcore) -> None: image = await async_client.cloud.instances.images.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, ) assert_matches_type(ImageList, image, path=["response"]) @parametrize async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None: image = await async_client.cloud.instances.images.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, include_prices=True, private="private", - tag_key=["string"], + tag_key=["key1", "key2"], tag_key_value="tag_key_value", visibility="private", ) @@ -438,8 +438,8 @@ async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> No @parametrize async def test_raw_response_list(self, async_client: AsyncGcore) -> None: response = await async_client.cloud.instances.images.with_raw_response.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, ) assert response.is_closed is True @@ -450,8 +450,8 @@ async def test_raw_response_list(self, async_client: AsyncGcore) -> None: @parametrize async def test_streaming_response_list(self, async_client: AsyncGcore) -> None: async with async_client.cloud.instances.images.with_streaming_response.list( - project_id=0, - region_id=0, + project_id=1, + region_id=7, ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -510,8 +510,8 @@ async def test_path_params_delete(self, async_client: AsyncGcore) -> None: @parametrize async def test_method_create_from_volume(self, async_client: AsyncGcore) -> None: image = await async_client.cloud.instances.images.create_from_volume( - project_id=0, - region_id=0, + project_id=1, + region_id=7, name="my-image", volume_id="d478ae29-dedc-4869-82f0-96104425f565", ) @@ -520,8 +520,8 @@ async def test_method_create_from_volume(self, async_client: AsyncGcore) -> None @parametrize async def test_method_create_from_volume_with_all_params(self, async_client: AsyncGcore) -> None: image = await async_client.cloud.instances.images.create_from_volume( - project_id=0, - region_id=0, + project_id=1, + region_id=7, name="my-image", volume_id="d478ae29-dedc-4869-82f0-96104425f565", architecture="x86_64", @@ -538,8 +538,8 @@ async def test_method_create_from_volume_with_all_params(self, async_client: Asy @parametrize async def test_raw_response_create_from_volume(self, async_client: AsyncGcore) -> None: response = await async_client.cloud.instances.images.with_raw_response.create_from_volume( - project_id=0, - region_id=0, + project_id=1, + region_id=7, name="my-image", volume_id="d478ae29-dedc-4869-82f0-96104425f565", ) @@ -552,8 +552,8 @@ async def test_raw_response_create_from_volume(self, async_client: AsyncGcore) - @parametrize async def test_streaming_response_create_from_volume(self, async_client: AsyncGcore) -> None: async with async_client.cloud.instances.images.with_streaming_response.create_from_volume( - project_id=0, - region_id=0, + project_id=1, + region_id=7, name="my-image", volume_id="d478ae29-dedc-4869-82f0-96104425f565", ) as response: diff --git a/tests/api_resources/cloud/instances/test_interfaces.py b/tests/api_resources/cloud/instances/test_interfaces.py index 348e946d..6d2c8252 100644 --- a/tests/api_resources/cloud/instances/test_interfaces.py +++ b/tests/api_resources/cloud/instances/test_interfaces.py @@ -83,9 +83,8 @@ def test_method_attach_with_all_params_overload_1(self, client: Gcore) -> None: "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -160,9 +159,8 @@ def test_method_attach_with_all_params_overload_2(self, client: Gcore) -> None: "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -239,9 +237,8 @@ def test_method_attach_with_all_params_overload_3(self, client: Gcore) -> None: "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -319,9 +316,8 @@ def test_method_attach_with_all_params_overload_4(self, client: Gcore) -> None: "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -502,9 +498,8 @@ async def test_method_attach_with_all_params_overload_1(self, async_client: Asyn "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -579,9 +574,8 @@ async def test_method_attach_with_all_params_overload_2(self, async_client: Asyn "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -658,9 +652,8 @@ async def test_method_attach_with_all_params_overload_3(self, async_client: Asyn "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", @@ -738,9 +731,8 @@ async def test_method_attach_with_all_params_overload_4(self, async_client: Asyn "fields": [ { "base_field": 10, - "field_name": "field_name", "field_value": [45046, 45047], - "value": None, + "value": "value", } ], "profile_template_name": "profile_template_name", diff --git a/tests/api_resources/cloud/k8s/test_clusters.py b/tests/api_resources/cloud/k8s/test_clusters.py index eb78a0b2..353b26ab 100644 --- a/tests/api_resources/cloud/k8s/test_clusters.py +++ b/tests/api_resources/cloud/k8s/test_clusters.py @@ -107,7 +107,6 @@ def test_method_create_with_all_params(self, client: Gcore) -> None: { "base_field": 10, "field_value": [45046, 45047], - "value": None, } ], "profile_template": 29, @@ -231,7 +230,6 @@ def test_method_update_with_all_params(self, client: Gcore) -> None: { "base_field": 10, "field_value": [45046, 45047], - "value": None, } ], "profile_template": 29, @@ -652,7 +650,6 @@ async def test_method_create_with_all_params(self, async_client: AsyncGcore) -> { "base_field": 10, "field_value": [45046, 45047], - "value": None, } ], "profile_template": 29, @@ -776,7 +773,6 @@ async def test_method_update_with_all_params(self, async_client: AsyncGcore) -> { "base_field": 10, "field_value": [45046, 45047], - "value": None, } ], "profile_template": 29, From c72a09b69dd6d79a099792d049f3d71e0d4a2ea1 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 18:29:14 +0000 Subject: [PATCH 40/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 4404c997..d4912ac5 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 657 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-c30b070f2f0ce73f80dfb6c950d3e46672acaedef0a7f011e75065477779bdf6.yml -openapi_spec_hash: 56a6b5ca8f97983419b03f5e33b36594 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-3294f73f2d5ecf15b67b961eb335b5ace56b5cce50566124c88b59d7e119cbd8.yml +openapi_spec_hash: 24c0ace46fa3dbb952e297731fe5aaaf config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From bad807323e01ad6fc586f94cfccbe69047177f57 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 20:21:25 +0000 Subject: [PATCH 41/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index d4912ac5..7bc895a6 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 657 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-3294f73f2d5ecf15b67b961eb335b5ace56b5cce50566124c88b59d7e119cbd8.yml -openapi_spec_hash: 24c0ace46fa3dbb952e297731fe5aaaf +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-f8772314b459d6ca6ed2b1646234bfff2818d2be57e5945f835a2ce23c0a48f3.yml +openapi_spec_hash: 6834198cb649966002fbafc1af499b84 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 7380dbb528d94cf4fdd60c90c38e18bf129420d8 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 22:17:33 +0000 Subject: [PATCH 42/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 7bc895a6..40908d64 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 657 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-f8772314b459d6ca6ed2b1646234bfff2818d2be57e5945f835a2ce23c0a48f3.yml -openapi_spec_hash: 6834198cb649966002fbafc1af499b84 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-b4bdb31b86695bb3a8c5e48dee269b2c12293bf994d917591f2389f225969ca1.yml +openapi_spec_hash: 2450870018f92eeedbc38632924c5593 config_hash: ab6b5443d52ca04e4e0e12def131f8e6 From 869ae5506aa40f3b8cf02ef7b1b014a3156e69ec Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 22:35:36 +0000 Subject: [PATCH 43/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 40908d64..c4ce53aa 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 657 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-b4bdb31b86695bb3a8c5e48dee269b2c12293bf994d917591f2389f225969ca1.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-c8aa5be13426796532829521e7b5379c19bcc3903ac755952b9d5f6c651a15c5.yml openapi_spec_hash: 2450870018f92eeedbc38632924c5593 -config_hash: ab6b5443d52ca04e4e0e12def131f8e6 +config_hash: 9b8a6bbded182cbf22a30b85b4d0b660 From 1a8f947fc408e6c1ab3844dedb49413701cdaaa6 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 00:49:03 +0000 Subject: [PATCH 44/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index c4ce53aa..4218385e 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 657 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-c8aa5be13426796532829521e7b5379c19bcc3903ac755952b9d5f6c651a15c5.yml -openapi_spec_hash: 2450870018f92eeedbc38632924c5593 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-7a540eb2e2573d48122eb8afabf8de9a634654df262665875c6c3dcc4bd4f77a.yml +openapi_spec_hash: 047fa998b91f01ce7ea28a3b617fb3a0 config_hash: 9b8a6bbded182cbf22a30b85b4d0b660 From 1a583e574b6faa4a547162cf8c2f81011fffed36 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 03:14:14 +0000 Subject: [PATCH 45/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 4218385e..d9565651 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 657 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-7a540eb2e2573d48122eb8afabf8de9a634654df262665875c6c3dcc4bd4f77a.yml -openapi_spec_hash: 047fa998b91f01ce7ea28a3b617fb3a0 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d412e6d1340eaf388db2adbf47cc98a693a363afaf4627c01e45e3c86d2a2696.yml +openapi_spec_hash: 45d100b085fe8e5b5509ea8817029826 config_hash: 9b8a6bbded182cbf22a30b85b4d0b660 From 046ee0b9f07d367bae8bbf2b6489f8e6cee6ff13 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 04:56:21 +0000 Subject: [PATCH 46/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index d9565651..0a3a7851 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 657 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d412e6d1340eaf388db2adbf47cc98a693a363afaf4627c01e45e3c86d2a2696.yml -openapi_spec_hash: 45d100b085fe8e5b5509ea8817029826 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-632ded6b595d2e43a6e3433cdd0ccfc503445dcd67400bd6143f5ebaa85e48fe.yml +openapi_spec_hash: b2020815e063ac29d18603c83932e23e config_hash: 9b8a6bbded182cbf22a30b85b4d0b660 From 451bb3ec5b5f445f8640210e39dd03837f90d586 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:42:03 +0000 Subject: [PATCH 47/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 0a3a7851..90082de8 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 657 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-632ded6b595d2e43a6e3433cdd0ccfc503445dcd67400bd6143f5ebaa85e48fe.yml -openapi_spec_hash: b2020815e063ac29d18603c83932e23e +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-2dd13aeaa6263a3748c45dd40a453fbf7ba3a3d0c4e5a2257013ea1e329effb6.yml +openapi_spec_hash: b3d425a07f3d895f4d041bc720dc98aa config_hash: 9b8a6bbded182cbf22a30b85b4d0b660 From e9d34eafcd7a219520576f99d992d6007ad4bacd Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 08:37:27 +0000 Subject: [PATCH 48/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 90082de8..ecf31ed2 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 657 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-2dd13aeaa6263a3748c45dd40a453fbf7ba3a3d0c4e5a2257013ea1e329effb6.yml -openapi_spec_hash: b3d425a07f3d895f4d041bc720dc98aa +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-21f325c1bf426edcfc7520a6fbf8f97a09f90dc895221907b9854c1100a74ed9.yml +openapi_spec_hash: aa1cafb895dce50c1bbc1f2259491586 config_hash: 9b8a6bbded182cbf22a30b85b4d0b660 From 4c84804a37789ca62c8d5577c6d20e7391cfc98b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 10:30:10 +0000 Subject: [PATCH 49/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index ecf31ed2..d9a5b485 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 657 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-21f325c1bf426edcfc7520a6fbf8f97a09f90dc895221907b9854c1100a74ed9.yml -openapi_spec_hash: aa1cafb895dce50c1bbc1f2259491586 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-6d8b759ddc2c3d76847bbded15db341d096bced48afd6d551b7f9816af9f3d8c.yml +openapi_spec_hash: ba545c1a8320045110988ec89f61ffb4 config_hash: 9b8a6bbded182cbf22a30b85b4d0b660 From 58ddc5204eac8cb557e46cc1f888868c8b695546 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 12:31:27 +0000 Subject: [PATCH 50/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index d9a5b485..25ac35f0 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 657 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-6d8b759ddc2c3d76847bbded15db341d096bced48afd6d551b7f9816af9f3d8c.yml -openapi_spec_hash: ba545c1a8320045110988ec89f61ffb4 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-2c51dec6cb0178c3e94e32aaf2ccb1627fdc815fa181a2c053861e1ccf1392bb.yml +openapi_spec_hash: a763e3bba4d1827b1ebf28b59ceebfe4 config_hash: 9b8a6bbded182cbf22a30b85b4d0b660 From 598edae2f2154634632a862014b550fb1f80977e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 13:40:53 +0000 Subject: [PATCH 51/96] refactor(cloud): split instance and baremetal image models --- .stats.yml | 2 +- src/gcore/resources/cloud/api.md | 18 +++++++++++------- src/gcore/resources/cloud/baremetal/images.py | 10 +++++----- src/gcore/resources/cloud/instances/images.py | 4 ++-- src/gcore/types/cloud/__init__.py | 2 -- src/gcore/types/cloud/baremetal/__init__.py | 3 ++- ...age_list_response.py => baremetal_image.py} | 12 ++---------- .../cloud/baremetal/baremetal_image_list.py | 16 ++++++++++++++++ src/gcore/types/cloud/instances/__init__.py | 2 ++ src/gcore/types/cloud/{ => instances}/image.py | 4 ++-- .../types/cloud/{ => instances}/image_list.py | 2 +- .../cloud/baremetal/test_images.py | 18 +++++++++--------- .../cloud/instances/test_images.py | 6 +++++- 13 files changed, 58 insertions(+), 41 deletions(-) rename src/gcore/types/cloud/baremetal/{image_list_response.py => baremetal_image.py} (94%) create mode 100644 src/gcore/types/cloud/baremetal/baremetal_image_list.py rename src/gcore/types/cloud/{ => instances}/image.py (98%) rename src/gcore/types/cloud/{ => instances}/image_list.py (89%) diff --git a/.stats.yml b/.stats.yml index 25ac35f0..7abdd5c7 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 657 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-2c51dec6cb0178c3e94e32aaf2ccb1627fdc815fa181a2c053861e1ccf1392bb.yml openapi_spec_hash: a763e3bba4d1827b1ebf28b59ceebfe4 -config_hash: 9b8a6bbded182cbf22a30b85b4d0b660 +config_hash: a9b5cf71cf792435a76f72d3856c8ee0 diff --git a/src/gcore/resources/cloud/api.md b/src/gcore/resources/cloud/api.md index 40c43971..6f43d248 100644 --- a/src/gcore/resources/cloud/api.md +++ b/src/gcore/resources/cloud/api.md @@ -24,8 +24,6 @@ from gcore.types.cloud import ( GPUImage, GPUImageList, HTTPMethod, - Image, - ImageList, Instance, InstanceIsolation, InstanceList, @@ -649,12 +647,12 @@ Methods: Types: ```python -from gcore.types.cloud.baremetal import ImageListResponse +from gcore.types.cloud.baremetal import BaremetalImage, BaremetalImageList ``` Methods: -- client.cloud.baremetal.images.list(\*, project_id, region_id, \*\*params) -> ImageListResponse +- client.cloud.baremetal.images.list(\*, project_id, region_id, \*\*params) -> BaremetalImageList ### Flavors @@ -999,13 +997,19 @@ Methods: ### Images +Types: + +```python +from gcore.types.cloud.instances import Image, ImageList +``` + Methods: -- client.cloud.instances.images.update(image_id, \*, project_id, region_id, \*\*params) -> Image -- client.cloud.instances.images.list(\*, project_id, region_id, \*\*params) -> ImageList +- client.cloud.instances.images.update(image_id, \*, project_id, region_id, \*\*params) -> Image +- client.cloud.instances.images.list(\*, project_id, region_id, \*\*params) -> ImageList - client.cloud.instances.images.delete(image_id, \*, project_id, region_id) -> TaskIDList - client.cloud.instances.images.create_from_volume(\*, project_id, region_id, \*\*params) -> TaskIDList -- client.cloud.instances.images.get(image_id, \*, project_id, region_id, \*\*params) -> Image +- client.cloud.instances.images.get(image_id, \*, project_id, region_id, \*\*params) -> Image - client.cloud.instances.images.upload(\*, project_id, region_id, \*\*params) -> TaskIDList ### Metrics diff --git a/src/gcore/resources/cloud/baremetal/images.py b/src/gcore/resources/cloud/baremetal/images.py index f0bac9bc..6cfd7302 100644 --- a/src/gcore/resources/cloud/baremetal/images.py +++ b/src/gcore/resources/cloud/baremetal/images.py @@ -18,7 +18,7 @@ ) from ...._base_client import make_request_options from ....types.cloud.baremetal import image_list_params -from ....types.cloud.baremetal.image_list_response import ImageListResponse +from ....types.cloud.baremetal.baremetal_image_list import BaremetalImageList __all__ = ["ImagesResource", "AsyncImagesResource"] @@ -59,7 +59,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ImageListResponse: + ) -> BaremetalImageList: """Retrieve a list of available images for bare metal servers. The list can be @@ -111,7 +111,7 @@ def list( image_list_params.ImageListParams, ), ), - cast_to=ImageListResponse, + cast_to=BaremetalImageList, ) @@ -151,7 +151,7 @@ async def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ImageListResponse: + ) -> BaremetalImageList: """Retrieve a list of available images for bare metal servers. The list can be @@ -203,7 +203,7 @@ async def list( image_list_params.ImageListParams, ), ), - cast_to=ImageListResponse, + cast_to=BaremetalImageList, ) diff --git a/src/gcore/resources/cloud/instances/images.py b/src/gcore/resources/cloud/instances/images.py index 8fe2f588..97d689cf 100644 --- a/src/gcore/resources/cloud/instances/images.py +++ b/src/gcore/resources/cloud/instances/images.py @@ -18,7 +18,6 @@ async_to_streamed_response_wrapper, ) from ...._base_client import make_request_options -from ....types.cloud.image import Image from ....types.cloud.instances import ( image_get_params, image_list_params, @@ -26,8 +25,9 @@ image_upload_params, image_create_from_volume_params, ) -from ....types.cloud.image_list import ImageList from ....types.cloud.task_id_list import TaskIDList +from ....types.cloud.instances.image import Image +from ....types.cloud.instances.image_list import ImageList from ....types.cloud.tag_update_map_param import TagUpdateMapParam __all__ = ["ImagesResource", "AsyncImagesResource"] diff --git a/src/gcore/types/cloud/__init__.py b/src/gcore/types/cloud/__init__.py index 450b32e1..bf9dea98 100644 --- a/src/gcore/types/cloud/__init__.py +++ b/src/gcore/types/cloud/__init__.py @@ -4,7 +4,6 @@ from .tag import Tag as Tag from .task import Task as Task -from .image import Image as Image from .route import Route as Route from .member import Member as Member from .region import Region as Region @@ -22,7 +21,6 @@ from .gpu_image import GPUImage as GPUImage from .ip_ranges import IPRanges as IPRanges from .file_share import FileShare as FileShare -from .image_list import ImageList as ImageList from .ip_version import IPVersion as IPVersion from .floating_ip import FloatingIP as FloatingIP from .http_method import HTTPMethod as HTTPMethod diff --git a/src/gcore/types/cloud/baremetal/__init__.py b/src/gcore/types/cloud/baremetal/__init__.py index 7bef20d4..845e2578 100644 --- a/src/gcore/types/cloud/baremetal/__init__.py +++ b/src/gcore/types/cloud/baremetal/__init__.py @@ -2,11 +2,12 @@ from __future__ import annotations +from .baremetal_image import BaremetalImage as BaremetalImage from .baremetal_server import BaremetalServer as BaremetalServer from .image_list_params import ImageListParams as ImageListParams from .flavor_list_params import FlavorListParams as FlavorListParams from .server_list_params import ServerListParams as ServerListParams -from .image_list_response import ImageListResponse as ImageListResponse +from .baremetal_image_list import BaremetalImageList as BaremetalImageList from .server_create_params import ServerCreateParams as ServerCreateParams from .server_delete_params import ServerDeleteParams as ServerDeleteParams from .server_update_params import ServerUpdateParams as ServerUpdateParams diff --git a/src/gcore/types/cloud/baremetal/image_list_response.py b/src/gcore/types/cloud/baremetal/baremetal_image.py similarity index 94% rename from src/gcore/types/cloud/baremetal/image_list_response.py rename to src/gcore/types/cloud/baremetal/baremetal_image.py index 81c15f77..91a534d1 100644 --- a/src/gcore/types/cloud/baremetal/image_list_response.py +++ b/src/gcore/types/cloud/baremetal/baremetal_image.py @@ -7,10 +7,10 @@ from ..tag import Tag from ...._models import BaseModel -__all__ = ["ImageListResponse", "Result"] +__all__ = ["BaremetalImage"] -class Result(BaseModel): +class BaremetalImage(BaseModel): id: str """Image ID""" @@ -119,11 +119,3 @@ class Result(BaseModel): visibility: str """Image visibility. Globally visible images are public""" - - -class ImageListResponse(BaseModel): - count: int - """Number of objects""" - - results: List[Result] - """Objects""" diff --git a/src/gcore/types/cloud/baremetal/baremetal_image_list.py b/src/gcore/types/cloud/baremetal/baremetal_image_list.py new file mode 100644 index 00000000..643c1941 --- /dev/null +++ b/src/gcore/types/cloud/baremetal/baremetal_image_list.py @@ -0,0 +1,16 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import List + +from ...._models import BaseModel +from .baremetal_image import BaremetalImage + +__all__ = ["BaremetalImageList"] + + +class BaremetalImageList(BaseModel): + count: int + """Number of objects""" + + results: List[BaremetalImage] + """Objects""" diff --git a/src/gcore/types/cloud/instances/__init__.py b/src/gcore/types/cloud/instances/__init__.py index fb06e51e..85c26ce7 100644 --- a/src/gcore/types/cloud/instances/__init__.py +++ b/src/gcore/types/cloud/instances/__init__.py @@ -2,7 +2,9 @@ from __future__ import annotations +from .image import Image as Image from .metrics import Metrics as Metrics +from .image_list import ImageList as ImageList from .metrics_list import MetricsList as MetricsList from .image_get_params import ImageGetParams as ImageGetParams from .image_list_params import ImageListParams as ImageListParams diff --git a/src/gcore/types/cloud/image.py b/src/gcore/types/cloud/instances/image.py similarity index 98% rename from src/gcore/types/cloud/image.py rename to src/gcore/types/cloud/instances/image.py index b7775975..823b6ce5 100644 --- a/src/gcore/types/cloud/image.py +++ b/src/gcore/types/cloud/instances/image.py @@ -4,8 +4,8 @@ from datetime import datetime from typing_extensions import Literal -from .tag import Tag -from ..._models import BaseModel +from ..tag import Tag +from ...._models import BaseModel __all__ = ["Image"] diff --git a/src/gcore/types/cloud/image_list.py b/src/gcore/types/cloud/instances/image_list.py similarity index 89% rename from src/gcore/types/cloud/image_list.py rename to src/gcore/types/cloud/instances/image_list.py index 4a4981fc..07ea5687 100644 --- a/src/gcore/types/cloud/image_list.py +++ b/src/gcore/types/cloud/instances/image_list.py @@ -3,7 +3,7 @@ from typing import List from .image import Image -from ..._models import BaseModel +from ...._models import BaseModel __all__ = ["ImageList"] diff --git a/tests/api_resources/cloud/baremetal/test_images.py b/tests/api_resources/cloud/baremetal/test_images.py index 8e7a6db8..0d047bbd 100644 --- a/tests/api_resources/cloud/baremetal/test_images.py +++ b/tests/api_resources/cloud/baremetal/test_images.py @@ -9,7 +9,7 @@ from gcore import Gcore, AsyncGcore from tests.utils import assert_matches_type -from gcore.types.cloud.baremetal import ImageListResponse +from gcore.types.cloud.baremetal import BaremetalImageList base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -23,7 +23,7 @@ def test_method_list(self, client: Gcore) -> None: project_id=1, region_id=7, ) - assert_matches_type(ImageListResponse, image, path=["response"]) + assert_matches_type(BaremetalImageList, image, path=["response"]) @parametrize def test_method_list_with_all_params(self, client: Gcore) -> None: @@ -36,7 +36,7 @@ def test_method_list_with_all_params(self, client: Gcore) -> None: tag_key_value="tag_key_value", visibility="private", ) - assert_matches_type(ImageListResponse, image, path=["response"]) + assert_matches_type(BaremetalImageList, image, path=["response"]) @parametrize def test_raw_response_list(self, client: Gcore) -> None: @@ -48,7 +48,7 @@ def test_raw_response_list(self, client: Gcore) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" image = response.parse() - assert_matches_type(ImageListResponse, image, path=["response"]) + assert_matches_type(BaremetalImageList, image, path=["response"]) @parametrize def test_streaming_response_list(self, client: Gcore) -> None: @@ -60,7 +60,7 @@ def test_streaming_response_list(self, client: Gcore) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" image = response.parse() - assert_matches_type(ImageListResponse, image, path=["response"]) + assert_matches_type(BaremetalImageList, image, path=["response"]) assert cast(Any, response.is_closed) is True @@ -76,7 +76,7 @@ async def test_method_list(self, async_client: AsyncGcore) -> None: project_id=1, region_id=7, ) - assert_matches_type(ImageListResponse, image, path=["response"]) + assert_matches_type(BaremetalImageList, image, path=["response"]) @parametrize async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None: @@ -89,7 +89,7 @@ async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> No tag_key_value="tag_key_value", visibility="private", ) - assert_matches_type(ImageListResponse, image, path=["response"]) + assert_matches_type(BaremetalImageList, image, path=["response"]) @parametrize async def test_raw_response_list(self, async_client: AsyncGcore) -> None: @@ -101,7 +101,7 @@ async def test_raw_response_list(self, async_client: AsyncGcore) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" image = await response.parse() - assert_matches_type(ImageListResponse, image, path=["response"]) + assert_matches_type(BaremetalImageList, image, path=["response"]) @parametrize async def test_streaming_response_list(self, async_client: AsyncGcore) -> None: @@ -113,6 +113,6 @@ async def test_streaming_response_list(self, async_client: AsyncGcore) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" image = await response.parse() - assert_matches_type(ImageListResponse, image, path=["response"]) + assert_matches_type(BaremetalImageList, image, path=["response"]) assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/cloud/instances/test_images.py b/tests/api_resources/cloud/instances/test_images.py index 1bbc238c..036159e2 100644 --- a/tests/api_resources/cloud/instances/test_images.py +++ b/tests/api_resources/cloud/instances/test_images.py @@ -9,7 +9,11 @@ from gcore import Gcore, AsyncGcore from tests.utils import assert_matches_type -from gcore.types.cloud import Image, ImageList, TaskIDList +from gcore.types.cloud import TaskIDList +from gcore.types.cloud.instances import ( + Image, + ImageList, +) base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") From 2f9b73994870d080324cf9443c99814d422ad563 Mon Sep 17 00:00:00 2001 From: Pedro Oliveira <8281907+pedrodeoliveira@users.noreply.github.com> Date: Tue, 7 Apr 2026 14:57:38 +0100 Subject: [PATCH 52/96] fix(examples): update baremetal image examples to use BaremetalImage type The image models were moved from the shared cloud scope to specific subresources, but the baremetal examples were still referencing cloud.Image instead of cloud.baremetal.BaremetalImage. --- examples/cloud/baremetal.py | 12 ++++++------ examples/cloud/baremetal_async.py | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/examples/cloud/baremetal.py b/examples/cloud/baremetal.py index 07cc9966..d9f1a51d 100644 --- a/examples/cloud/baremetal.py +++ b/examples/cloud/baremetal.py @@ -1,8 +1,8 @@ from typing import List from gcore import Gcore -from gcore.types.cloud.image import Image from gcore.types.cloud.baremetal_flavor import BaremetalFlavor +from gcore.types.cloud.baremetal.baremetal_image import BaremetalImage from gcore.types.cloud.baremetal.server_create_params import ( InterfaceCreateBareMetalExternalInterfaceSerializer, ) @@ -80,7 +80,7 @@ def list_flavors(*, client: Gcore) -> List[BaremetalFlavor]: return flavors.results -def list_images(*, client: Gcore) -> List[Image]: +def list_images(*, client: Gcore) -> List[BaremetalImage]: print("\n=== LIST BAREMETAL IMAGES ===") images = client.cloud.baremetal.images.list() _print_image_details(images.results) @@ -108,7 +108,7 @@ def _print_flavor_details(flavors: List[BaremetalFlavor]) -> None: print(f" ... and {len(flavors) - display_count} more flavors") -def _print_image_details(images: List[Image]) -> None: +def _print_image_details(images: List[BaremetalImage]) -> None: display_count = 3 if len(images) < display_count: display_count = len(images) @@ -133,15 +133,15 @@ def _get_smallest_flavor(flavors: List[BaremetalFlavor]) -> str: return smallest_flavor.flavor_id -def _get_ubuntu_image(images: List[Image]) -> str: +def _get_ubuntu_image(images: List[BaremetalImage]) -> str: return _get_os_image(images, "ubuntu") -def _get_debian_image(images: List[Image]) -> str: +def _get_debian_image(images: List[BaremetalImage]) -> str: return _get_os_image(images, "debian") -def _get_os_image(images: List[Image], os_name: str) -> str: +def _get_os_image(images: List[BaremetalImage], os_name: str) -> str: os_images = [img for img in images if os_name.lower() in img.name.lower()] if not os_images: linux_images = [img for img in images if img.os_type.lower() == "linux"] diff --git a/examples/cloud/baremetal_async.py b/examples/cloud/baremetal_async.py index 2e1ec482..bea2ec6d 100644 --- a/examples/cloud/baremetal_async.py +++ b/examples/cloud/baremetal_async.py @@ -2,8 +2,8 @@ from typing import List from gcore import AsyncGcore -from gcore.types.cloud.image import Image from gcore.types.cloud.baremetal_flavor import BaremetalFlavor +from gcore.types.cloud.baremetal.baremetal_image import BaremetalImage from gcore.types.cloud.baremetal.server_create_params import ( InterfaceCreateBareMetalExternalInterfaceSerializer, ) @@ -83,7 +83,7 @@ async def list_flavors(*, client: AsyncGcore) -> List[BaremetalFlavor]: return flavors.results -async def list_images(*, client: AsyncGcore) -> List[Image]: +async def list_images(*, client: AsyncGcore) -> List[BaremetalImage]: print("\n=== LIST BAREMETAL IMAGES ===") images = await client.cloud.baremetal.images.list() _print_image_details(images.results) @@ -111,7 +111,7 @@ def _print_flavor_details(flavors: List[BaremetalFlavor]) -> None: print(f" ... and {len(flavors) - display_count} more flavors") -def _print_image_details(images: List[Image]) -> None: +def _print_image_details(images: List[BaremetalImage]) -> None: display_count = 3 if len(images) < display_count: display_count = len(images) @@ -136,15 +136,15 @@ def _get_smallest_flavor(flavors: List[BaremetalFlavor]) -> str: return smallest_flavor.flavor_id -def _get_ubuntu_image(images: List[Image]) -> str: +def _get_ubuntu_image(images: List[BaremetalImage]) -> str: return _get_os_image(images, "ubuntu") -def _get_debian_image(images: List[Image]) -> str: +def _get_debian_image(images: List[BaremetalImage]) -> str: return _get_os_image(images, "debian") -def _get_os_image(images: List[Image], os_name: str) -> str: +def _get_os_image(images: List[BaremetalImage], os_name: str) -> str: os_images = [img for img in images if os_name.lower() in img.name.lower()] if not os_images: linux_images = [img for img in images if img.os_type.lower() == "linux"] From 3f4d832f936e3aa22f6e781b5903759b07719716 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 14:04:48 +0000 Subject: [PATCH 53/96] fix(dns): update network-mappings get_by_name to new endpoint path --- .stats.yml | 4 +- src/gcore/resources/dns/api.md | 1 + src/gcore/resources/dns/network_mappings.py | 96 +++++++++++++++++++ .../dns/test_network_mappings.py | 76 +++++++++++++++ 4 files changed, 175 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 7abdd5c7..c73293bb 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 657 +configured_endpoints: 658 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-2c51dec6cb0178c3e94e32aaf2ccb1627fdc815fa181a2c053861e1ccf1392bb.yml openapi_spec_hash: a763e3bba4d1827b1ebf28b59ceebfe4 -config_hash: a9b5cf71cf792435a76f72d3856c8ee0 +config_hash: 783d3945b23f1d5cf64f8fba8e44c9d7 diff --git a/src/gcore/resources/dns/api.md b/src/gcore/resources/dns/api.md index 63494906..86f3648e 100644 --- a/src/gcore/resources/dns/api.md +++ b/src/gcore/resources/dns/api.md @@ -154,5 +154,6 @@ Methods: - client.dns.network_mappings.list(\*\*params) -> NetworkMappingListResponse - client.dns.network_mappings.delete(id) -> object - client.dns.network_mappings.get(id) -> DNSNetworkMapping +- client.dns.network_mappings.get_by_name(name) -> DNSNetworkMapping - client.dns.network*mappings.import*() -> NetworkMappingImportResponse - client.dns.network_mappings.replace(id, \*\*params) -> object diff --git a/src/gcore/resources/dns/network_mappings.py b/src/gcore/resources/dns/network_mappings.py index ffd44c7a..f7a0bd11 100644 --- a/src/gcore/resources/dns/network_mappings.py +++ b/src/gcore/resources/dns/network_mappings.py @@ -263,6 +263,48 @@ def get( cast_to=DNSNetworkMapping, ) + def get_by_name( + self, + name: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> DNSNetworkMapping: + """ + Get network mapping by name. + + Particular network mapping item info + + Example of request: + + ``` + curl --location --request GET 'https://api.gcore.com/dns/v2/network-mappings/by-name/test-mapping' \\ + --header 'Authorization: Bearer ...' + ``` + + Args: + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if not name: + raise ValueError(f"Expected a non-empty value for `name` but received {name!r}") + return self._get( + path_template("/dns/v2/network-mappings/by-name/{name}", name=name), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=DNSNetworkMapping, + ) + def import_( self, *, @@ -655,6 +697,48 @@ async def get( cast_to=DNSNetworkMapping, ) + async def get_by_name( + self, + name: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> DNSNetworkMapping: + """ + Get network mapping by name. + + Particular network mapping item info + + Example of request: + + ``` + curl --location --request GET 'https://api.gcore.com/dns/v2/network-mappings/by-name/test-mapping' \\ + --header 'Authorization: Bearer ...' + ``` + + Args: + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if not name: + raise ValueError(f"Expected a non-empty value for `name` but received {name!r}") + return await self._get( + path_template("/dns/v2/network-mappings/by-name/{name}", name=name), + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=DNSNetworkMapping, + ) + async def import_( self, *, @@ -828,6 +912,9 @@ def __init__(self, network_mappings: NetworkMappingsResource) -> None: self.get = to_raw_response_wrapper( network_mappings.get, ) + self.get_by_name = to_raw_response_wrapper( + network_mappings.get_by_name, + ) self.import_ = to_raw_response_wrapper( network_mappings.import_, ) @@ -852,6 +939,9 @@ def __init__(self, network_mappings: AsyncNetworkMappingsResource) -> None: self.get = async_to_raw_response_wrapper( network_mappings.get, ) + self.get_by_name = async_to_raw_response_wrapper( + network_mappings.get_by_name, + ) self.import_ = async_to_raw_response_wrapper( network_mappings.import_, ) @@ -876,6 +966,9 @@ def __init__(self, network_mappings: NetworkMappingsResource) -> None: self.get = to_streamed_response_wrapper( network_mappings.get, ) + self.get_by_name = to_streamed_response_wrapper( + network_mappings.get_by_name, + ) self.import_ = to_streamed_response_wrapper( network_mappings.import_, ) @@ -900,6 +993,9 @@ def __init__(self, network_mappings: AsyncNetworkMappingsResource) -> None: self.get = async_to_streamed_response_wrapper( network_mappings.get, ) + self.get_by_name = async_to_streamed_response_wrapper( + network_mappings.get_by_name, + ) self.import_ = async_to_streamed_response_wrapper( network_mappings.import_, ) diff --git a/tests/api_resources/dns/test_network_mappings.py b/tests/api_resources/dns/test_network_mappings.py index 90c3706f..158a3f7b 100644 --- a/tests/api_resources/dns/test_network_mappings.py +++ b/tests/api_resources/dns/test_network_mappings.py @@ -158,6 +158,44 @@ def test_streaming_response_get(self, client: Gcore) -> None: assert cast(Any, response.is_closed) is True + @parametrize + def test_method_get_by_name(self, client: Gcore) -> None: + network_mapping = client.dns.network_mappings.get_by_name( + "name", + ) + assert_matches_type(DNSNetworkMapping, network_mapping, path=["response"]) + + @parametrize + def test_raw_response_get_by_name(self, client: Gcore) -> None: + response = client.dns.network_mappings.with_raw_response.get_by_name( + "name", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + network_mapping = response.parse() + assert_matches_type(DNSNetworkMapping, network_mapping, path=["response"]) + + @parametrize + def test_streaming_response_get_by_name(self, client: Gcore) -> None: + with client.dns.network_mappings.with_streaming_response.get_by_name( + "name", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + network_mapping = response.parse() + assert_matches_type(DNSNetworkMapping, network_mapping, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_get_by_name(self, client: Gcore) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `name` but received ''"): + client.dns.network_mappings.with_raw_response.get_by_name( + "", + ) + @parametrize def test_method_import(self, client: Gcore) -> None: network_mapping = client.dns.network_mappings.import_() @@ -371,6 +409,44 @@ async def test_streaming_response_get(self, async_client: AsyncGcore) -> None: assert cast(Any, response.is_closed) is True + @parametrize + async def test_method_get_by_name(self, async_client: AsyncGcore) -> None: + network_mapping = await async_client.dns.network_mappings.get_by_name( + "name", + ) + assert_matches_type(DNSNetworkMapping, network_mapping, path=["response"]) + + @parametrize + async def test_raw_response_get_by_name(self, async_client: AsyncGcore) -> None: + response = await async_client.dns.network_mappings.with_raw_response.get_by_name( + "name", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + network_mapping = await response.parse() + assert_matches_type(DNSNetworkMapping, network_mapping, path=["response"]) + + @parametrize + async def test_streaming_response_get_by_name(self, async_client: AsyncGcore) -> None: + async with async_client.dns.network_mappings.with_streaming_response.get_by_name( + "name", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + network_mapping = await response.parse() + assert_matches_type(DNSNetworkMapping, network_mapping, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_get_by_name(self, async_client: AsyncGcore) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `name` but received ''"): + await async_client.dns.network_mappings.with_raw_response.get_by_name( + "", + ) + @parametrize async def test_method_import(self, async_client: AsyncGcore) -> None: network_mapping = await async_client.dns.network_mappings.import_() From 141a927d1717eedcbe636db85e76a4d6432e40a1 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 14:06:15 +0000 Subject: [PATCH 54/96] feat(api): fix(cdn): harmonize pagination across CDN list endpoints Mark CDN resource rules, shields, and rule templates list endpoints with `paginated: false` to align with how other CDN endpoints handle pagination, since these return full arrays rather than paginated responses. --- .stats.yml | 2 +- src/gcore/resources/cdn/api.md | 6 +- .../resources/cdn/cdn_resources/rules.py | 80 +++++++++--------- src/gcore/resources/cdn/rule_templates.py | 76 ++++++++--------- src/gcore/resources/cdn/shields.py | 81 ++++++++++--------- src/gcore/types/cdn/shield_list_response.py | 37 ++++++++- .../cdn/cdn_resources/test_rules.py | 18 ++--- .../api_resources/cdn/test_rule_templates.py | 18 ++--- tests/api_resources/cdn/test_shields.py | 17 ++-- 9 files changed, 193 insertions(+), 142 deletions(-) diff --git a/.stats.yml b/.stats.yml index c73293bb..adfc2e6b 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-2c51dec6cb0178c3e94e32aaf2ccb1627fdc815fa181a2c053861e1ccf1392bb.yml openapi_spec_hash: a763e3bba4d1827b1ebf28b59ceebfe4 -config_hash: 783d3945b23f1d5cf64f8fba8e44c9d7 +config_hash: a8091c31251bc8979abd6db1f2c88983 diff --git a/src/gcore/resources/cdn/api.md b/src/gcore/resources/cdn/api.md index 70a85773..002855e7 100644 --- a/src/gcore/resources/cdn/api.md +++ b/src/gcore/resources/cdn/api.md @@ -69,7 +69,7 @@ Methods: - client.cdn.cdn_resources.rules.create(resource_id, \*\*params) -> CDNResourceRule - client.cdn.cdn_resources.rules.update(rule_id, \*, resource_id, \*\*params) -> CDNResourceRule -- client.cdn.cdn_resources.rules.list(resource_id, \*\*params) -> SyncOffsetPage[CDNResourceRule] +- client.cdn.cdn_resources.rules.list(resource_id, \*\*params) -> CDNResourceRuleList - client.cdn.cdn_resources.rules.delete(rule_id, \*, resource_id) -> None - client.cdn.cdn_resources.rules.get(rule_id, \*, resource_id) -> CDNResourceRule - client.cdn.cdn_resources.rules.replace(rule_id, \*, resource_id, \*\*params) -> CDNResourceRule @@ -84,7 +84,7 @@ from gcore.types.cdn import ShieldListResponse Methods: -- client.cdn.shields.list(\*\*params) -> SyncOffsetPage[ShieldListResponse] +- client.cdn.shields.list(\*\*params) -> ShieldListResponse ## OriginGroups @@ -115,7 +115,7 @@ Methods: - client.cdn.rule_templates.create(\*\*params) -> RuleTemplate - client.cdn.rule_templates.update(rule_template_id, \*\*params) -> RuleTemplate -- client.cdn.rule_templates.list(\*\*params) -> SyncOffsetPage[RuleTemplate] +- client.cdn.rule_templates.list(\*\*params) -> RuleTemplateList - client.cdn.rule_templates.delete(rule_template_id) -> None - client.cdn.rule_templates.get(rule_template_id) -> RuleTemplate - client.cdn.rule_templates.replace(rule_template_id, \*\*params) -> RuleTemplate diff --git a/src/gcore/resources/cdn/cdn_resources/rules.py b/src/gcore/resources/cdn/cdn_resources/rules.py index 2fabd405..bb3ae8ed 100644 --- a/src/gcore/resources/cdn/cdn_resources/rules.py +++ b/src/gcore/resources/cdn/cdn_resources/rules.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import Optional +from typing import Any, Optional, cast from typing_extensions import Literal import httpx @@ -17,10 +17,10 @@ async_to_raw_response_wrapper, async_to_streamed_response_wrapper, ) -from ....pagination import SyncOffsetPage, AsyncOffsetPage -from ...._base_client import AsyncPaginator, make_request_options +from ...._base_client import make_request_options from ....types.cdn.cdn_resources import rule_list_params, rule_create_params, rule_update_params, rule_replace_params from ....types.cdn.cdn_resources.cdn_resource_rule import CDNResourceRule +from ....types.cdn.cdn_resources.cdn_resource_rule_list import CDNResourceRuleList __all__ = ["RulesResource", "AsyncRulesResource"] @@ -272,7 +272,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncOffsetPage[CDNResourceRule]: + ) -> CDNResourceRuleList: """Get rules list Args: @@ -290,23 +290,27 @@ def list( timeout: Override the client-level default timeout for this request, in seconds """ - return self._get_api_list( - path_template("/cdn/resources/{resource_id}/rules", resource_id=resource_id), - page=SyncOffsetPage[CDNResourceRule], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "limit": limit, - "offset": offset, - }, - rule_list_params.RuleListParams, + return cast( + CDNResourceRuleList, + self._get( + path_template("/cdn/resources/{resource_id}/rules", resource_id=resource_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + { + "limit": limit, + "offset": offset, + }, + rule_list_params.RuleListParams, + ), ), + cast_to=cast( + Any, CDNResourceRuleList + ), # Union types cannot be passed in as arguments in the type system ), - model=CDNResourceRule, ) def delete( @@ -723,7 +727,7 @@ async def update( cast_to=CDNResourceRule, ) - def list( + async def list( self, resource_id: int, *, @@ -735,7 +739,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[CDNResourceRule, AsyncOffsetPage[CDNResourceRule]]: + ) -> CDNResourceRuleList: """Get rules list Args: @@ -753,23 +757,27 @@ def list( timeout: Override the client-level default timeout for this request, in seconds """ - return self._get_api_list( - path_template("/cdn/resources/{resource_id}/rules", resource_id=resource_id), - page=AsyncOffsetPage[CDNResourceRule], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "limit": limit, - "offset": offset, - }, - rule_list_params.RuleListParams, + return cast( + CDNResourceRuleList, + await self._get( + path_template("/cdn/resources/{resource_id}/rules", resource_id=resource_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + { + "limit": limit, + "offset": offset, + }, + rule_list_params.RuleListParams, + ), ), + cast_to=cast( + Any, CDNResourceRuleList + ), # Union types cannot be passed in as arguments in the type system ), - model=CDNResourceRule, ) async def delete( diff --git a/src/gcore/resources/cdn/rule_templates.py b/src/gcore/resources/cdn/rule_templates.py index 7080e040..86f670b3 100644 --- a/src/gcore/resources/cdn/rule_templates.py +++ b/src/gcore/resources/cdn/rule_templates.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import Optional +from typing import Any, Optional, cast from typing_extensions import Literal import httpx @@ -23,9 +23,9 @@ rule_template_update_params, rule_template_replace_params, ) -from ...pagination import SyncOffsetPage, AsyncOffsetPage -from ..._base_client import AsyncPaginator, make_request_options +from ..._base_client import make_request_options from ...types.cdn.rule_template import RuleTemplate +from ...types.cdn.rule_template_list import RuleTemplateList __all__ = ["RuleTemplatesResource", "AsyncRuleTemplatesResource"] @@ -242,7 +242,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncOffsetPage[RuleTemplate]: + ) -> RuleTemplateList: """ Get rule templates list @@ -259,23 +259,25 @@ def list( timeout: Override the client-level default timeout for this request, in seconds """ - return self._get_api_list( - "/cdn/resources/rule_templates", - page=SyncOffsetPage[RuleTemplate], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "limit": limit, - "offset": offset, - }, - rule_template_list_params.RuleTemplateListParams, + return cast( + RuleTemplateList, + self._get( + "/cdn/resources/rule_templates", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + { + "limit": limit, + "offset": offset, + }, + rule_template_list_params.RuleTemplateListParams, + ), ), + cast_to=cast(Any, RuleTemplateList), # Union types cannot be passed in as arguments in the type system ), - model=RuleTemplate, ) def delete( @@ -632,7 +634,7 @@ async def update( cast_to=RuleTemplate, ) - def list( + async def list( self, *, limit: int | Omit = omit, @@ -643,7 +645,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[RuleTemplate, AsyncOffsetPage[RuleTemplate]]: + ) -> RuleTemplateList: """ Get rule templates list @@ -660,23 +662,25 @@ def list( timeout: Override the client-level default timeout for this request, in seconds """ - return self._get_api_list( - "/cdn/resources/rule_templates", - page=AsyncOffsetPage[RuleTemplate], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "limit": limit, - "offset": offset, - }, - rule_template_list_params.RuleTemplateListParams, + return cast( + RuleTemplateList, + await self._get( + "/cdn/resources/rule_templates", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + { + "limit": limit, + "offset": offset, + }, + rule_template_list_params.RuleTemplateListParams, + ), ), + cast_to=cast(Any, RuleTemplateList), # Union types cannot be passed in as arguments in the type system ), - model=RuleTemplate, ) async def delete( diff --git a/src/gcore/resources/cdn/shields.py b/src/gcore/resources/cdn/shields.py index 8eb3ed5f..51807bf0 100644 --- a/src/gcore/resources/cdn/shields.py +++ b/src/gcore/resources/cdn/shields.py @@ -2,10 +2,12 @@ from __future__ import annotations +from typing import Any, cast + import httpx from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from ..._utils import maybe_transform +from ..._utils import maybe_transform, async_maybe_transform from ..._compat import cached_property from ..._resource import SyncAPIResource, AsyncAPIResource from ..._response import ( @@ -15,8 +17,7 @@ async_to_streamed_response_wrapper, ) from ...types.cdn import shield_list_params -from ...pagination import SyncOffsetPage, AsyncOffsetPage -from ..._base_client import AsyncPaginator, make_request_options +from ..._base_client import make_request_options from ...types.cdn.shield_list_response import ShieldListResponse __all__ = ["ShieldsResource", "AsyncShieldsResource"] @@ -53,7 +54,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncOffsetPage[ShieldListResponse]: + ) -> ShieldListResponse: """ Get information about all origin shielding locations available in the account. @@ -70,23 +71,27 @@ def list( timeout: Override the client-level default timeout for this request, in seconds """ - return self._get_api_list( - "/cdn/shieldingpop_v2", - page=SyncOffsetPage[ShieldListResponse], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "limit": limit, - "offset": offset, - }, - shield_list_params.ShieldListParams, + return cast( + ShieldListResponse, + self._get( + "/cdn/shieldingpop_v2", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + { + "limit": limit, + "offset": offset, + }, + shield_list_params.ShieldListParams, + ), ), + cast_to=cast( + Any, ShieldListResponse + ), # Union types cannot be passed in as arguments in the type system ), - model=ShieldListResponse, ) @@ -110,7 +115,7 @@ def with_streaming_response(self) -> AsyncShieldsResourceWithStreamingResponse: """ return AsyncShieldsResourceWithStreamingResponse(self) - def list( + async def list( self, *, limit: int | Omit = omit, @@ -121,7 +126,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[ShieldListResponse, AsyncOffsetPage[ShieldListResponse]]: + ) -> ShieldListResponse: """ Get information about all origin shielding locations available in the account. @@ -138,23 +143,27 @@ def list( timeout: Override the client-level default timeout for this request, in seconds """ - return self._get_api_list( - "/cdn/shieldingpop_v2", - page=AsyncOffsetPage[ShieldListResponse], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "limit": limit, - "offset": offset, - }, - shield_list_params.ShieldListParams, + return cast( + ShieldListResponse, + await self._get( + "/cdn/shieldingpop_v2", + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + { + "limit": limit, + "offset": offset, + }, + shield_list_params.ShieldListParams, + ), ), + cast_to=cast( + Any, ShieldListResponse + ), # Union types cannot be passed in as arguments in the type system ), - model=ShieldListResponse, ) diff --git a/src/gcore/types/cdn/shield_list_response.py b/src/gcore/types/cdn/shield_list_response.py index 6956cf1e..458a400c 100644 --- a/src/gcore/types/cdn/shield_list_response.py +++ b/src/gcore/types/cdn/shield_list_response.py @@ -1,13 +1,14 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import Optional +from typing import List, Union, Optional +from typing_extensions import TypeAlias from ..._models import BaseModel -__all__ = ["ShieldListResponse"] +__all__ = ["ShieldListResponse", "PlainList", "PaginatedList", "PaginatedListResult"] -class ShieldListResponse(BaseModel): +class PlainList(BaseModel): id: Optional[int] = None """Origin shielding location ID.""" @@ -19,3 +20,33 @@ class ShieldListResponse(BaseModel): datacenter: Optional[str] = None """Name of origin shielding location datacenter.""" + + +class PaginatedListResult(BaseModel): + id: Optional[int] = None + """Origin shielding location ID.""" + + city: Optional[str] = None + """City of origin shielding location.""" + + country: Optional[str] = None + """Country of origin shielding location.""" + + datacenter: Optional[str] = None + """Name of origin shielding location datacenter.""" + + +class PaginatedList(BaseModel): + count: int + """Total number of items.""" + + next: Optional[str] = None + """URL to the next page of results. Null if current page is the last one.""" + + previous: Optional[str] = None + """URL to the previous page of results. Null if current page is the first one.""" + + results: List[PaginatedListResult] + + +ShieldListResponse: TypeAlias = Union[List[PlainList], PaginatedList] diff --git a/tests/api_resources/cdn/cdn_resources/test_rules.py b/tests/api_resources/cdn/cdn_resources/test_rules.py index 0fb4027d..e7a410e0 100644 --- a/tests/api_resources/cdn/cdn_resources/test_rules.py +++ b/tests/api_resources/cdn/cdn_resources/test_rules.py @@ -9,9 +9,9 @@ from gcore import Gcore, AsyncGcore from tests.utils import assert_matches_type -from gcore.pagination import SyncOffsetPage, AsyncOffsetPage from gcore.types.cdn.cdn_resources import ( CDNResourceRule, + CDNResourceRuleList, ) base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -658,7 +658,7 @@ def test_method_list(self, client: Gcore) -> None: rule = client.cdn.cdn_resources.rules.list( resource_id=0, ) - assert_matches_type(SyncOffsetPage[CDNResourceRule], rule, path=["response"]) + assert_matches_type(CDNResourceRuleList, rule, path=["response"]) @parametrize def test_method_list_with_all_params(self, client: Gcore) -> None: @@ -667,7 +667,7 @@ def test_method_list_with_all_params(self, client: Gcore) -> None: limit=1, offset=0, ) - assert_matches_type(SyncOffsetPage[CDNResourceRule], rule, path=["response"]) + assert_matches_type(CDNResourceRuleList, rule, path=["response"]) @parametrize def test_raw_response_list(self, client: Gcore) -> None: @@ -678,7 +678,7 @@ def test_raw_response_list(self, client: Gcore) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" rule = response.parse() - assert_matches_type(SyncOffsetPage[CDNResourceRule], rule, path=["response"]) + assert_matches_type(CDNResourceRuleList, rule, path=["response"]) @parametrize def test_streaming_response_list(self, client: Gcore) -> None: @@ -689,7 +689,7 @@ def test_streaming_response_list(self, client: Gcore) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" rule = response.parse() - assert_matches_type(SyncOffsetPage[CDNResourceRule], rule, path=["response"]) + assert_matches_type(CDNResourceRuleList, rule, path=["response"]) assert cast(Any, response.is_closed) is True @@ -1725,7 +1725,7 @@ async def test_method_list(self, async_client: AsyncGcore) -> None: rule = await async_client.cdn.cdn_resources.rules.list( resource_id=0, ) - assert_matches_type(AsyncOffsetPage[CDNResourceRule], rule, path=["response"]) + assert_matches_type(CDNResourceRuleList, rule, path=["response"]) @parametrize async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None: @@ -1734,7 +1734,7 @@ async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> No limit=1, offset=0, ) - assert_matches_type(AsyncOffsetPage[CDNResourceRule], rule, path=["response"]) + assert_matches_type(CDNResourceRuleList, rule, path=["response"]) @parametrize async def test_raw_response_list(self, async_client: AsyncGcore) -> None: @@ -1745,7 +1745,7 @@ async def test_raw_response_list(self, async_client: AsyncGcore) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" rule = await response.parse() - assert_matches_type(AsyncOffsetPage[CDNResourceRule], rule, path=["response"]) + assert_matches_type(CDNResourceRuleList, rule, path=["response"]) @parametrize async def test_streaming_response_list(self, async_client: AsyncGcore) -> None: @@ -1756,7 +1756,7 @@ async def test_streaming_response_list(self, async_client: AsyncGcore) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" rule = await response.parse() - assert_matches_type(AsyncOffsetPage[CDNResourceRule], rule, path=["response"]) + assert_matches_type(CDNResourceRuleList, rule, path=["response"]) assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/cdn/test_rule_templates.py b/tests/api_resources/cdn/test_rule_templates.py index 0457f565..b81bbb02 100644 --- a/tests/api_resources/cdn/test_rule_templates.py +++ b/tests/api_resources/cdn/test_rule_templates.py @@ -11,8 +11,8 @@ from tests.utils import assert_matches_type from gcore.types.cdn import ( RuleTemplate, + RuleTemplateList, ) -from gcore.pagination import SyncOffsetPage, AsyncOffsetPage base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -641,7 +641,7 @@ def test_streaming_response_update(self, client: Gcore) -> None: @parametrize def test_method_list(self, client: Gcore) -> None: rule_template = client.cdn.rule_templates.list() - assert_matches_type(SyncOffsetPage[RuleTemplate], rule_template, path=["response"]) + assert_matches_type(RuleTemplateList, rule_template, path=["response"]) @parametrize def test_method_list_with_all_params(self, client: Gcore) -> None: @@ -649,7 +649,7 @@ def test_method_list_with_all_params(self, client: Gcore) -> None: limit=1, offset=0, ) - assert_matches_type(SyncOffsetPage[RuleTemplate], rule_template, path=["response"]) + assert_matches_type(RuleTemplateList, rule_template, path=["response"]) @parametrize def test_raw_response_list(self, client: Gcore) -> None: @@ -658,7 +658,7 @@ def test_raw_response_list(self, client: Gcore) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" rule_template = response.parse() - assert_matches_type(SyncOffsetPage[RuleTemplate], rule_template, path=["response"]) + assert_matches_type(RuleTemplateList, rule_template, path=["response"]) @parametrize def test_streaming_response_list(self, client: Gcore) -> None: @@ -667,7 +667,7 @@ def test_streaming_response_list(self, client: Gcore) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" rule_template = response.parse() - assert_matches_type(SyncOffsetPage[RuleTemplate], rule_template, path=["response"]) + assert_matches_type(RuleTemplateList, rule_template, path=["response"]) assert cast(Any, response.is_closed) is True @@ -1674,7 +1674,7 @@ async def test_streaming_response_update(self, async_client: AsyncGcore) -> None @parametrize async def test_method_list(self, async_client: AsyncGcore) -> None: rule_template = await async_client.cdn.rule_templates.list() - assert_matches_type(AsyncOffsetPage[RuleTemplate], rule_template, path=["response"]) + assert_matches_type(RuleTemplateList, rule_template, path=["response"]) @parametrize async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None: @@ -1682,7 +1682,7 @@ async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> No limit=1, offset=0, ) - assert_matches_type(AsyncOffsetPage[RuleTemplate], rule_template, path=["response"]) + assert_matches_type(RuleTemplateList, rule_template, path=["response"]) @parametrize async def test_raw_response_list(self, async_client: AsyncGcore) -> None: @@ -1691,7 +1691,7 @@ async def test_raw_response_list(self, async_client: AsyncGcore) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" rule_template = await response.parse() - assert_matches_type(AsyncOffsetPage[RuleTemplate], rule_template, path=["response"]) + assert_matches_type(RuleTemplateList, rule_template, path=["response"]) @parametrize async def test_streaming_response_list(self, async_client: AsyncGcore) -> None: @@ -1700,7 +1700,7 @@ async def test_streaming_response_list(self, async_client: AsyncGcore) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" rule_template = await response.parse() - assert_matches_type(AsyncOffsetPage[RuleTemplate], rule_template, path=["response"]) + assert_matches_type(RuleTemplateList, rule_template, path=["response"]) assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/cdn/test_shields.py b/tests/api_resources/cdn/test_shields.py index f175c08a..5444a0f1 100644 --- a/tests/api_resources/cdn/test_shields.py +++ b/tests/api_resources/cdn/test_shields.py @@ -10,7 +10,6 @@ from gcore import Gcore, AsyncGcore from tests.utils import assert_matches_type from gcore.types.cdn import ShieldListResponse -from gcore.pagination import SyncOffsetPage, AsyncOffsetPage base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -21,7 +20,7 @@ class TestShields: @parametrize def test_method_list(self, client: Gcore) -> None: shield = client.cdn.shields.list() - assert_matches_type(SyncOffsetPage[ShieldListResponse], shield, path=["response"]) + assert_matches_type(ShieldListResponse, shield, path=["response"]) @parametrize def test_method_list_with_all_params(self, client: Gcore) -> None: @@ -29,7 +28,7 @@ def test_method_list_with_all_params(self, client: Gcore) -> None: limit=1, offset=0, ) - assert_matches_type(SyncOffsetPage[ShieldListResponse], shield, path=["response"]) + assert_matches_type(ShieldListResponse, shield, path=["response"]) @parametrize def test_raw_response_list(self, client: Gcore) -> None: @@ -38,7 +37,7 @@ def test_raw_response_list(self, client: Gcore) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" shield = response.parse() - assert_matches_type(SyncOffsetPage[ShieldListResponse], shield, path=["response"]) + assert_matches_type(ShieldListResponse, shield, path=["response"]) @parametrize def test_streaming_response_list(self, client: Gcore) -> None: @@ -47,7 +46,7 @@ def test_streaming_response_list(self, client: Gcore) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" shield = response.parse() - assert_matches_type(SyncOffsetPage[ShieldListResponse], shield, path=["response"]) + assert_matches_type(ShieldListResponse, shield, path=["response"]) assert cast(Any, response.is_closed) is True @@ -60,7 +59,7 @@ class TestAsyncShields: @parametrize async def test_method_list(self, async_client: AsyncGcore) -> None: shield = await async_client.cdn.shields.list() - assert_matches_type(AsyncOffsetPage[ShieldListResponse], shield, path=["response"]) + assert_matches_type(ShieldListResponse, shield, path=["response"]) @parametrize async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None: @@ -68,7 +67,7 @@ async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> No limit=1, offset=0, ) - assert_matches_type(AsyncOffsetPage[ShieldListResponse], shield, path=["response"]) + assert_matches_type(ShieldListResponse, shield, path=["response"]) @parametrize async def test_raw_response_list(self, async_client: AsyncGcore) -> None: @@ -77,7 +76,7 @@ async def test_raw_response_list(self, async_client: AsyncGcore) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" shield = await response.parse() - assert_matches_type(AsyncOffsetPage[ShieldListResponse], shield, path=["response"]) + assert_matches_type(ShieldListResponse, shield, path=["response"]) @parametrize async def test_streaming_response_list(self, async_client: AsyncGcore) -> None: @@ -86,6 +85,6 @@ async def test_streaming_response_list(self, async_client: AsyncGcore) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" shield = await response.parse() - assert_matches_type(AsyncOffsetPage[ShieldListResponse], shield, path=["response"]) + assert_matches_type(ShieldListResponse, shield, path=["response"]) assert cast(Any, response.is_closed) is True From 6ab83c7770478af0037438e5208b868b2294a3ed Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 14:42:53 +0000 Subject: [PATCH 55/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index adfc2e6b..090bb72d 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-2c51dec6cb0178c3e94e32aaf2ccb1627fdc815fa181a2c053861e1ccf1392bb.yml -openapi_spec_hash: a763e3bba4d1827b1ebf28b59ceebfe4 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-44d0cdef2a9b854c56dcfd0b1486d4e6bec1de344f60f1eb5a9980b7efbc8c03.yml +openapi_spec_hash: 688f3104d846c7ff42935b452c02800d config_hash: a8091c31251bc8979abd6db1f2c88983 From ecc43d55ef651e1ae5e86d19b37ad4e4850fdcc6 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 16:11:21 +0000 Subject: [PATCH 56/96] fix(client): preserve hardcoded query params when merging with user params --- src/gcore/_base_client.py | 4 ++++ tests/test_client.py | 48 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/gcore/_base_client.py b/src/gcore/_base_client.py index e797b152..e3e40a42 100644 --- a/src/gcore/_base_client.py +++ b/src/gcore/_base_client.py @@ -540,6 +540,10 @@ def _build_request( files = cast(HttpxRequestFiles, ForceMultipartDict()) prepared_url = self._prepare_url(options.url) + # preserve hard-coded query params from the url + if params and prepared_url.query: + params = {**dict(prepared_url.params.items()), **params} + prepared_url = prepared_url.copy_with(raw_path=prepared_url.raw_path.split(b"?", 1)[0]) if "_" in prepared_url.host: # work around https://github.com/encode/httpx/discussions/2880 kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")} diff --git a/tests/test_client.py b/tests/test_client.py index 9a14904e..b27528a8 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -427,6 +427,30 @@ def test_default_query_option(self) -> None: client.close() + def test_hardcoded_query_params_in_url(self, client: Gcore) -> None: + request = client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true")) + url = httpx.URL(request.url) + assert dict(url.params) == {"beta": "true"} + + request = client._build_request( + FinalRequestOptions( + method="get", + url="/foo?beta=true", + params={"limit": "10", "page": "abc"}, + ) + ) + url = httpx.URL(request.url) + assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"} + + request = client._build_request( + FinalRequestOptions( + method="get", + url="/files/a%2Fb?beta=true", + params={"limit": "10"}, + ) + ) + assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10" + def test_cloud_project_id_client_params(self, client: Gcore) -> None: # Test with base client (no custom params) with pytest.raises(ValueError, match="Missing cloud_project_id argument;"): @@ -1338,6 +1362,30 @@ async def test_default_query_option(self) -> None: await client.close() + async def test_hardcoded_query_params_in_url(self, async_client: AsyncGcore) -> None: + request = async_client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true")) + url = httpx.URL(request.url) + assert dict(url.params) == {"beta": "true"} + + request = async_client._build_request( + FinalRequestOptions( + method="get", + url="/foo?beta=true", + params={"limit": "10", "page": "abc"}, + ) + ) + url = httpx.URL(request.url) + assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"} + + request = async_client._build_request( + FinalRequestOptions( + method="get", + url="/files/a%2Fb?beta=true", + params={"limit": "10"}, + ) + ) + assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10" + async def test_cloud_project_id_client_params(self, async_client: AsyncGcore) -> None: # Test with base client (no custom params) with pytest.raises(ValueError, match="Missing cloud_project_id argument;"): From 614d3ada94343203bb097a926f50316bb63df66a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 16:24:19 +0000 Subject: [PATCH 57/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 090bb72d..e44c75ca 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-44d0cdef2a9b854c56dcfd0b1486d4e6bec1de344f60f1eb5a9980b7efbc8c03.yml -openapi_spec_hash: 688f3104d846c7ff42935b452c02800d +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-278d0b4141b87f6b53ac221fb8a74f36060049686a628c7c612686201db1069f.yml +openapi_spec_hash: 30de00e7f8268ed70507af48ccbf4508 config_hash: a8091c31251bc8979abd6db1f2c88983 From d7ff7af96a8e1985b6e8323c2d8f417b784612ab Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 16:31:39 +0000 Subject: [PATCH 58/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index e44c75ca..48d87c15 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-278d0b4141b87f6b53ac221fb8a74f36060049686a628c7c612686201db1069f.yml -openapi_spec_hash: 30de00e7f8268ed70507af48ccbf4508 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-2e677050ec0101e3b4eb73ecaa97491168b0c120ef757d75f1bb153c5e484d54.yml +openapi_spec_hash: ec6299848a5e2ddc5f7bd776a8a5e625 config_hash: a8091c31251bc8979abd6db1f2c88983 From f4ce746e0060a94b0f94a0bf1a85cfb36a9f4e2a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:29:10 +0000 Subject: [PATCH 59/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 48d87c15..50804e11 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-2e677050ec0101e3b4eb73ecaa97491168b0c120ef757d75f1bb153c5e484d54.yml -openapi_spec_hash: ec6299848a5e2ddc5f7bd776a8a5e625 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-33f4c544efb6f64ef88d6ac69d921a9534ec13ce3ab944beb012d822b8893743.yml +openapi_spec_hash: 60d5837c1e1d74a3f0ec593331d1f97f config_hash: a8091c31251bc8979abd6db1f2c88983 From 9512085aba68345c669ac052f60c8cdd922a750f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 20:20:58 +0000 Subject: [PATCH 60/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 50804e11..d4dbd101 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-33f4c544efb6f64ef88d6ac69d921a9534ec13ce3ab944beb012d822b8893743.yml -openapi_spec_hash: 60d5837c1e1d74a3f0ec593331d1f97f +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-98e5cf1489833e50ffe846ba13a7fe141f06b14a89f75da36f6edce1c0273f8b.yml +openapi_spec_hash: e27512354ff01c305843afb1b77f0cd7 config_hash: a8091c31251bc8979abd6db1f2c88983 From 3731830ca3c98705d71248cd24e1f847a9864cf6 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 22:20:31 +0000 Subject: [PATCH 61/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index d4dbd101..a7eb1858 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-98e5cf1489833e50ffe846ba13a7fe141f06b14a89f75da36f6edce1c0273f8b.yml -openapi_spec_hash: e27512354ff01c305843afb1b77f0cd7 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-a530f7c9e471b25ea92d031ad10e7d9ef83376f7585aa5c103b7e2c95a8c6a84.yml +openapi_spec_hash: e2cb8088c4f97930907ea58278169935 config_hash: a8091c31251bc8979abd6db1f2c88983 From cb0b82f1f24268bd29b7052c1a31ce5c1f55ab26 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 00:48:55 +0000 Subject: [PATCH 62/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index a7eb1858..47a5d6e6 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-a530f7c9e471b25ea92d031ad10e7d9ef83376f7585aa5c103b7e2c95a8c6a84.yml -openapi_spec_hash: e2cb8088c4f97930907ea58278169935 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-68b7579a4e6bcbef99f8dbbe810ff84d355979a793a93441c240fcf6e8429f18.yml +openapi_spec_hash: f36e5fe2784b747a06ba2a62f41978d0 config_hash: a8091c31251bc8979abd6db1f2c88983 From 1a0179912c11395a7094a3cd111781a542459329 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 03:14:15 +0000 Subject: [PATCH 63/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 47a5d6e6..01aed6b8 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-68b7579a4e6bcbef99f8dbbe810ff84d355979a793a93441c240fcf6e8429f18.yml -openapi_spec_hash: f36e5fe2784b747a06ba2a62f41978d0 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-87ee82a866ef0a48dc07482d6c44e5075a411b7c872461b276c616e61b99294e.yml +openapi_spec_hash: 56ff35617e42622465d8dbef86e2e5f9 config_hash: a8091c31251bc8979abd6db1f2c88983 From 274b2f8e09f64779b653f587fa718787c6f79b6d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 04:58:16 +0000 Subject: [PATCH 64/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 01aed6b8..d254eb6b 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-87ee82a866ef0a48dc07482d6c44e5075a411b7c872461b276c616e61b99294e.yml -openapi_spec_hash: 56ff35617e42622465d8dbef86e2e5f9 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-0d50907f9797df1deebaadb6480f29a17016e266b5aec0444e43908bf9148b48.yml +openapi_spec_hash: 46bf96210bd74e0f482acd4b8a2c724d config_hash: a8091c31251bc8979abd6db1f2c88983 From fd5f4f96439d09b3ada7653f20ddeb34496133fd Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 06:43:33 +0000 Subject: [PATCH 65/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index d254eb6b..b4bd6532 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-0d50907f9797df1deebaadb6480f29a17016e266b5aec0444e43908bf9148b48.yml -openapi_spec_hash: 46bf96210bd74e0f482acd4b8a2c724d +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-556e246885a3e78b57410664bed26300fba46c27692f18ebf306e2e7256ac960.yml +openapi_spec_hash: d99d6cd593464d2c037acd5dff5c50eb config_hash: a8091c31251bc8979abd6db1f2c88983 From 6bab3d65d59f4764bead81dc17108f392acac1bc Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 08:36:19 +0000 Subject: [PATCH 66/96] feat(api): aggregated API specs update --- .stats.yml | 4 +- src/gcore/resources/cloud/api.md | 4 +- .../resources/cloud/load_balancers/flavors.py | 30 ++++- .../load_balancers/l7_policies/l7_policies.py | 40 ++++++- .../cloud/load_balancers/l7_policies/rules.py | 40 ++++++- .../cloud/load_balancers/listeners.py | 18 +++ .../cloud/load_balancers/load_balancers.py | 26 ++--- .../cloud/load_balancers/pools/pools.py | 18 +++ .../resources/cloud/security_groups/rules.py | 106 +++++++++--------- .../cloud/load_balancer_create_params.py | 12 +- .../types/cloud/load_balancers/__init__.py | 1 + .../load_balancers/flavor_list_params.py | 9 ++ .../load_balancers/l7_policies/__init__.py | 1 + .../l7_policies/rule_list_params.py | 24 ++++ .../load_balancers/l7_policy_list_params.py | 24 ++++ .../load_balancers/listener_list_params.py | 9 ++ .../cloud/load_balancers/pool_list_params.py | 9 ++ .../cloud/security_group_create_params.py | 53 ++++----- .../cloud/security_group_update_params.py | 53 ++++----- .../security_groups/rule_create_params.py | 53 ++++----- .../load_balancers/l7_policies/test_rules.py | 22 ++++ .../cloud/load_balancers/test_flavors.py | 4 + .../cloud/load_balancers/test_l7_policies.py | 20 ++++ .../cloud/load_balancers/test_listeners.py | 4 + .../cloud/load_balancers/test_pools.py | 4 + .../cloud/test_load_balancers.py | 12 +- 26 files changed, 427 insertions(+), 173 deletions(-) create mode 100644 src/gcore/types/cloud/load_balancers/l7_policies/rule_list_params.py create mode 100644 src/gcore/types/cloud/load_balancers/l7_policy_list_params.py diff --git a/.stats.yml b/.stats.yml index b4bd6532..705316e9 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-556e246885a3e78b57410664bed26300fba46c27692f18ebf306e2e7256ac960.yml -openapi_spec_hash: d99d6cd593464d2c037acd5dff5c50eb +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d22228888cb7ed9c880f41e9642e4e3f406c3401d5ef7ba8cb3674f12864682c.yml +openapi_spec_hash: a150cff71663ca3fc455be832781e306 config_hash: a8091c31251bc8979abd6db1f2c88983 diff --git a/src/gcore/resources/cloud/api.md b/src/gcore/resources/cloud/api.md index 6f43d248..17de3c77 100644 --- a/src/gcore/resources/cloud/api.md +++ b/src/gcore/resources/cloud/api.md @@ -235,7 +235,7 @@ Methods: - client.cloud.load_balancers.l7_policies.create(\*, project_id, region_id, \*\*params) -> TaskIDList - client.cloud.load_balancers.l7_policies.update(l7policy_id, \*, project_id, region_id, \*\*params) -> TaskIDList -- client.cloud.load_balancers.l7_policies.list(\*, project_id, region_id) -> LoadBalancerL7PolicyList +- client.cloud.load_balancers.l7_policies.list(\*, project_id, region_id, \*\*params) -> LoadBalancerL7PolicyList - client.cloud.load_balancers.l7_policies.delete(l7policy_id, \*, project_id, region_id) -> TaskIDList - client.cloud.load_balancers.l7_policies.get(l7policy_id, \*, project_id, region_id) -> LoadBalancerL7Policy @@ -244,7 +244,7 @@ Methods: Methods: - client.cloud.load_balancers.l7_policies.rules.create(l7policy_id, \*, project_id, region_id, \*\*params) -> TaskIDList -- client.cloud.load_balancers.l7_policies.rules.list(l7policy_id, \*, project_id, region_id) -> LoadBalancerL7RuleList +- client.cloud.load_balancers.l7_policies.rules.list(l7policy_id, \*, project_id, region_id, \*\*params) -> LoadBalancerL7RuleList - client.cloud.load_balancers.l7_policies.rules.delete(l7rule_id, \*, project_id, region_id, l7policy_id) -> TaskIDList - client.cloud.load_balancers.l7_policies.rules.get(l7rule_id, \*, project_id, region_id, l7policy_id) -> LoadBalancerL7Rule - client.cloud.load_balancers.l7_policies.rules.replace(l7rule_id, \*, project_id, region_id, l7policy_id, \*\*params) -> TaskIDList diff --git a/src/gcore/resources/cloud/load_balancers/flavors.py b/src/gcore/resources/cloud/load_balancers/flavors.py index 27e43c14..4f1c4f04 100644 --- a/src/gcore/resources/cloud/load_balancers/flavors.py +++ b/src/gcore/resources/cloud/load_balancers/flavors.py @@ -47,6 +47,8 @@ def list( project_id: int | None = None, region_id: int | None = None, include_prices: bool | Omit = omit, + limit: int | Omit = omit, + offset: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -67,6 +69,11 @@ def list( include_prices: Set to true if the response should include flavor prices + limit: Optional. Limit the number of returned items + + offset: Optional. Offset value is used to exclude the first set of records from the + result + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -86,7 +93,14 @@ def list( extra_query=extra_query, extra_body=extra_body, timeout=timeout, - query=maybe_transform({"include_prices": include_prices}, flavor_list_params.FlavorListParams), + query=maybe_transform( + { + "include_prices": include_prices, + "limit": limit, + "offset": offset, + }, + flavor_list_params.FlavorListParams, + ), ), cast_to=LoadBalancerFlavorList, ) @@ -118,6 +132,8 @@ async def list( project_id: int | None = None, region_id: int | None = None, include_prices: bool | Omit = omit, + limit: int | Omit = omit, + offset: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -138,6 +154,11 @@ async def list( include_prices: Set to true if the response should include flavor prices + limit: Optional. Limit the number of returned items + + offset: Optional. Offset value is used to exclude the first set of records from the + result + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -158,7 +179,12 @@ async def list( extra_body=extra_body, timeout=timeout, query=await async_maybe_transform( - {"include_prices": include_prices}, flavor_list_params.FlavorListParams + { + "include_prices": include_prices, + "limit": limit, + "offset": offset, + }, + flavor_list_params.FlavorListParams, ), ), cast_to=LoadBalancerFlavorList, diff --git a/src/gcore/resources/cloud/load_balancers/l7_policies/l7_policies.py b/src/gcore/resources/cloud/load_balancers/l7_policies/l7_policies.py index b9243fe3..b9674fad 100644 --- a/src/gcore/resources/cloud/load_balancers/l7_policies/l7_policies.py +++ b/src/gcore/resources/cloud/load_balancers/l7_policies/l7_policies.py @@ -26,7 +26,7 @@ ) from ....._base_client import make_request_options from .....types.cloud.task_id_list import TaskIDList -from .....types.cloud.load_balancers import l7_policy_create_params, l7_policy_update_params +from .....types.cloud.load_balancers import l7_policy_list_params, l7_policy_create_params, l7_policy_update_params from .....types.cloud.load_balancer_l7_policy import LoadBalancerL7Policy from .....types.cloud.load_balancer_l7_policy_list import LoadBalancerL7PolicyList @@ -584,6 +584,8 @@ def list( *, project_id: int | None = None, region_id: int | None = None, + limit: int | Omit = omit, + offset: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -599,6 +601,11 @@ def list( region_id: Region ID + limit: Optional. Limit the number of returned items + + offset: Optional. Offset value is used to exclude the first set of records from the + result + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -614,7 +621,17 @@ def list( return self._get( path_template("/cloud/v1/l7policies/{project_id}/{region_id}", project_id=project_id, region_id=region_id), options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + { + "limit": limit, + "offset": offset, + }, + l7_policy_list_params.L7PolicyListParams, + ), ), cast_to=LoadBalancerL7PolicyList, ) @@ -1613,6 +1630,8 @@ async def list( *, project_id: int | None = None, region_id: int | None = None, + limit: int | Omit = omit, + offset: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -1628,6 +1647,11 @@ async def list( region_id: Region ID + limit: Optional. Limit the number of returned items + + offset: Optional. Offset value is used to exclude the first set of records from the + result + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -1643,7 +1667,17 @@ async def list( return await self._get( path_template("/cloud/v1/l7policies/{project_id}/{region_id}", project_id=project_id, region_id=region_id), options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + { + "limit": limit, + "offset": offset, + }, + l7_policy_list_params.L7PolicyListParams, + ), ), cast_to=LoadBalancerL7PolicyList, ) diff --git a/src/gcore/resources/cloud/load_balancers/l7_policies/rules.py b/src/gcore/resources/cloud/load_balancers/l7_policies/rules.py index 901baf03..1267a937 100644 --- a/src/gcore/resources/cloud/load_balancers/l7_policies/rules.py +++ b/src/gcore/resources/cloud/load_balancers/l7_policies/rules.py @@ -20,7 +20,7 @@ from .....types.cloud.task_id_list import TaskIDList from .....types.cloud.load_balancer_l7_rule import LoadBalancerL7Rule from .....types.cloud.load_balancer_l7_rule_list import LoadBalancerL7RuleList -from .....types.cloud.load_balancers.l7_policies import rule_create_params, rule_replace_params +from .....types.cloud.load_balancers.l7_policies import rule_list_params, rule_create_params, rule_replace_params __all__ = ["RulesResource", "AsyncRulesResource"] @@ -139,6 +139,8 @@ def list( *, project_id: int | None = None, region_id: int | None = None, + limit: int | Omit = omit, + offset: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -156,6 +158,11 @@ def list( l7policy_id: L7 policy ID + limit: Optional. Limit the number of returned items + + offset: Optional. Offset value is used to exclude the first set of records from the + result + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -178,7 +185,17 @@ def list( l7policy_id=l7policy_id, ), options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=maybe_transform( + { + "limit": limit, + "offset": offset, + }, + rule_list_params.RuleListParams, + ), ), cast_to=LoadBalancerL7RuleList, ) @@ -674,6 +691,8 @@ async def list( *, project_id: int | None = None, region_id: int | None = None, + limit: int | Omit = omit, + offset: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -691,6 +710,11 @@ async def list( l7policy_id: L7 policy ID + limit: Optional. Limit the number of returned items + + offset: Optional. Offset value is used to exclude the first set of records from the + result + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -713,7 +737,17 @@ async def list( l7policy_id=l7policy_id, ), options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + query=await async_maybe_transform( + { + "limit": limit, + "offset": offset, + }, + rule_list_params.RuleListParams, + ), ), cast_to=LoadBalancerL7RuleList, ) diff --git a/src/gcore/resources/cloud/load_balancers/listeners.py b/src/gcore/resources/cloud/load_balancers/listeners.py index cd6c6dcc..5de5286e 100644 --- a/src/gcore/resources/cloud/load_balancers/listeners.py +++ b/src/gcore/resources/cloud/load_balancers/listeners.py @@ -272,7 +272,9 @@ def list( *, project_id: int | None = None, region_id: int | None = None, + limit: int | Omit = omit, load_balancer_id: str | Omit = omit, + offset: int | Omit = omit, show_stats: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -289,8 +291,13 @@ def list( region_id: Region ID + limit: Optional. Limit the number of returned items + load_balancer_id: Load Balancer ID + offset: Optional. Offset value is used to exclude the first set of records from the + result + show_stats: Show stats extra_headers: Send extra headers @@ -314,7 +321,9 @@ def list( timeout=timeout, query=maybe_transform( { + "limit": limit, "load_balancer_id": load_balancer_id, + "offset": offset, "show_stats": show_stats, }, listener_list_params.ListenerListParams, @@ -845,7 +854,9 @@ async def list( *, project_id: int | None = None, region_id: int | None = None, + limit: int | Omit = omit, load_balancer_id: str | Omit = omit, + offset: int | Omit = omit, show_stats: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -862,8 +873,13 @@ async def list( region_id: Region ID + limit: Optional. Limit the number of returned items + load_balancer_id: Load Balancer ID + offset: Optional. Offset value is used to exclude the first set of records from the + result + show_stats: Show stats extra_headers: Send extra headers @@ -887,7 +903,9 @@ async def list( timeout=timeout, query=await async_maybe_transform( { + "limit": limit, "load_balancer_id": load_balancer_id, + "offset": offset, "show_stats": show_stats, }, listener_list_params.ListenerListParams, diff --git a/src/gcore/resources/cloud/load_balancers/load_balancers.py b/src/gcore/resources/cloud/load_balancers/load_balancers.py index c9dd19be..c9957907 100644 --- a/src/gcore/resources/cloud/load_balancers/load_balancers.py +++ b/src/gcore/resources/cloud/load_balancers/load_balancers.py @@ -146,12 +146,11 @@ def create( *, project_id: int | None = None, region_id: int | None = None, + name: str, flavor: str | Omit = omit, floating_ip: load_balancer_create_params.FloatingIP | Omit = omit, listeners: Iterable[load_balancer_create_params.Listener] | Omit = omit, logging: load_balancer_create_params.Logging | Omit = omit, - name: str | Omit = omit, - name_template: str | Omit = omit, preferred_connectivity: LoadBalancerMemberConnectivity | Omit = omit, tags: Dict[str, str] | Omit = omit, vip_ip_family: InterfaceIPFamily | Omit = omit, @@ -173,6 +172,8 @@ def create( region_id: Region ID + name: Load balancer name. + flavor: Load balancer flavor name floating_ip: Floating IP configuration for assignment @@ -182,11 +183,6 @@ def create( logging: Logging configuration - name: Load balancer name. Either `name` or `name_template` should be specified. - - name_template: Load balancer name which will be changed by template. Either `name` or - `name_template` should be specified. - preferred_connectivity: Preferred option to establish connectivity between load balancer and its pools members. L2 provides best performance, L3 provides less IPs usage. It is taking effect only if `instance_id` + `ip_address` is provided, not `subnet_id` + @@ -230,12 +226,11 @@ def create( ), body=maybe_transform( { + "name": name, "flavor": flavor, "floating_ip": floating_ip, "listeners": listeners, "logging": logging, - "name": name, - "name_template": name_template, "preferred_connectivity": preferred_connectivity, "tags": tags, "vip_ip_family": vip_ip_family, @@ -937,12 +932,11 @@ async def create( *, project_id: int | None = None, region_id: int | None = None, + name: str, flavor: str | Omit = omit, floating_ip: load_balancer_create_params.FloatingIP | Omit = omit, listeners: Iterable[load_balancer_create_params.Listener] | Omit = omit, logging: load_balancer_create_params.Logging | Omit = omit, - name: str | Omit = omit, - name_template: str | Omit = omit, preferred_connectivity: LoadBalancerMemberConnectivity | Omit = omit, tags: Dict[str, str] | Omit = omit, vip_ip_family: InterfaceIPFamily | Omit = omit, @@ -964,6 +958,8 @@ async def create( region_id: Region ID + name: Load balancer name. + flavor: Load balancer flavor name floating_ip: Floating IP configuration for assignment @@ -973,11 +969,6 @@ async def create( logging: Logging configuration - name: Load balancer name. Either `name` or `name_template` should be specified. - - name_template: Load balancer name which will be changed by template. Either `name` or - `name_template` should be specified. - preferred_connectivity: Preferred option to establish connectivity between load balancer and its pools members. L2 provides best performance, L3 provides less IPs usage. It is taking effect only if `instance_id` + `ip_address` is provided, not `subnet_id` + @@ -1021,12 +1012,11 @@ async def create( ), body=await async_maybe_transform( { + "name": name, "flavor": flavor, "floating_ip": floating_ip, "listeners": listeners, "logging": logging, - "name": name, - "name_template": name_template, "preferred_connectivity": preferred_connectivity, "tags": tags, "vip_ip_family": vip_ip_family, diff --git a/src/gcore/resources/cloud/load_balancers/pools/pools.py b/src/gcore/resources/cloud/load_balancers/pools/pools.py index ea10ebba..330079da 100644 --- a/src/gcore/resources/cloud/load_balancers/pools/pools.py +++ b/src/gcore/resources/cloud/load_balancers/pools/pools.py @@ -315,8 +315,10 @@ def list( project_id: int | None = None, region_id: int | None = None, details: bool | Omit = omit, + limit: int | Omit = omit, listener_id: str | Omit = omit, load_balancer_id: str | Omit = omit, + offset: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -334,10 +336,15 @@ def list( details: Show members and Health Monitor details + limit: Optional. Limit the number of returned items + listener_id: Listener ID load_balancer_id: Load Balancer ID + offset: Optional. Offset value is used to exclude the first set of records from the + result + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -360,8 +367,10 @@ def list( query=maybe_transform( { "details": details, + "limit": limit, "listener_id": listener_id, "load_balancer_id": load_balancer_id, + "offset": offset, }, pool_list_params.PoolListParams, ), @@ -912,8 +921,10 @@ async def list( project_id: int | None = None, region_id: int | None = None, details: bool | Omit = omit, + limit: int | Omit = omit, listener_id: str | Omit = omit, load_balancer_id: str | Omit = omit, + offset: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -931,10 +942,15 @@ async def list( details: Show members and Health Monitor details + limit: Optional. Limit the number of returned items + listener_id: Listener ID load_balancer_id: Load Balancer ID + offset: Optional. Offset value is used to exclude the first set of records from the + result + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -957,8 +973,10 @@ async def list( query=await async_maybe_transform( { "details": details, + "limit": limit, "listener_id": listener_id, "load_balancer_id": load_balancer_id, + "offset": offset, }, pool_list_params.PoolListParams, ), diff --git a/src/gcore/resources/cloud/security_groups/rules.py b/src/gcore/resources/cloud/security_groups/rules.py index 9fba7c36..8260bd42 100644 --- a/src/gcore/resources/cloud/security_groups/rules.py +++ b/src/gcore/resources/cloud/security_groups/rules.py @@ -61,31 +61,32 @@ def create( ethertype: Literal["IPv4", "IPv6"] | Omit = omit, port_range_max: Optional[int] | Omit = omit, port_range_min: Optional[int] | Omit = omit, - protocol: Literal[ - "ah", - "any", - "dccp", - "egp", - "esp", - "gre", - "icmp", - "igmp", - "ipencap", - "ipip", - "ipv6-encap", - "ipv6-frag", - "ipv6-icmp", - "ipv6-nonxt", - "ipv6-opts", - "ipv6-route", - "ospf", - "pgm", - "rsvp", - "sctp", - "tcp", - "udp", - "udplite", - "vrrp", + protocol: Optional[ + Literal[ + "ah", + "dccp", + "egp", + "esp", + "gre", + "icmp", + "igmp", + "ipencap", + "ipip", + "ipv6-encap", + "ipv6-frag", + "ipv6-icmp", + "ipv6-nonxt", + "ipv6-opts", + "ipv6-route", + "ospf", + "pgm", + "rsvp", + "sctp", + "tcp", + "udp", + "udplite", + "vrrp", + ] ] | Omit = omit, remote_group_id: str | Omit = omit, @@ -119,7 +120,7 @@ def create( port_range_min: The minimum port number in the range that is matched by the security group rule - protocol: Protocol + protocol: V2 protocol enum without 'any'. Use null for all protocols instead. remote_group_id: The remote group UUID to associate with this security group @@ -522,31 +523,32 @@ async def create( ethertype: Literal["IPv4", "IPv6"] | Omit = omit, port_range_max: Optional[int] | Omit = omit, port_range_min: Optional[int] | Omit = omit, - protocol: Literal[ - "ah", - "any", - "dccp", - "egp", - "esp", - "gre", - "icmp", - "igmp", - "ipencap", - "ipip", - "ipv6-encap", - "ipv6-frag", - "ipv6-icmp", - "ipv6-nonxt", - "ipv6-opts", - "ipv6-route", - "ospf", - "pgm", - "rsvp", - "sctp", - "tcp", - "udp", - "udplite", - "vrrp", + protocol: Optional[ + Literal[ + "ah", + "dccp", + "egp", + "esp", + "gre", + "icmp", + "igmp", + "ipencap", + "ipip", + "ipv6-encap", + "ipv6-frag", + "ipv6-icmp", + "ipv6-nonxt", + "ipv6-opts", + "ipv6-route", + "ospf", + "pgm", + "rsvp", + "sctp", + "tcp", + "udp", + "udplite", + "vrrp", + ] ] | Omit = omit, remote_group_id: str | Omit = omit, @@ -580,7 +582,7 @@ async def create( port_range_min: The minimum port number in the range that is matched by the security group rule - protocol: Protocol + protocol: V2 protocol enum without 'any'. Use null for all protocols instead. remote_group_id: The remote group UUID to associate with this security group diff --git a/src/gcore/types/cloud/load_balancer_create_params.py b/src/gcore/types/cloud/load_balancer_create_params.py index b1fe2885..24e0724b 100644 --- a/src/gcore/types/cloud/load_balancer_create_params.py +++ b/src/gcore/types/cloud/load_balancer_create_params.py @@ -38,6 +38,9 @@ class LoadBalancerCreateParams(TypedDict, total=False): region_id: int """Region ID""" + name: Required[str] + """Load balancer name.""" + flavor: str """Load balancer flavor name""" @@ -53,15 +56,6 @@ class LoadBalancerCreateParams(TypedDict, total=False): logging: Logging """Logging configuration""" - name: str - """Load balancer name. Either `name` or `name_template` should be specified.""" - - name_template: str - """Load balancer name which will be changed by template. - - Either `name` or `name_template` should be specified. - """ - preferred_connectivity: LoadBalancerMemberConnectivity """ Preferred option to establish connectivity between load balancer and its pools diff --git a/src/gcore/types/cloud/load_balancers/__init__.py b/src/gcore/types/cloud/load_balancers/__init__.py index cfacdce7..7a7eddaf 100644 --- a/src/gcore/types/cloud/load_balancers/__init__.py +++ b/src/gcore/types/cloud/load_balancers/__init__.py @@ -9,6 +9,7 @@ from .pool_update_params import PoolUpdateParams as PoolUpdateParams from .listener_get_params import ListenerGetParams as ListenerGetParams from .listener_list_params import ListenerListParams as ListenerListParams +from .l7_policy_list_params import L7PolicyListParams as L7PolicyListParams from .listener_create_params import ListenerCreateParams as ListenerCreateParams from .listener_delete_params import ListenerDeleteParams as ListenerDeleteParams from .listener_update_params import ListenerUpdateParams as ListenerUpdateParams diff --git a/src/gcore/types/cloud/load_balancers/flavor_list_params.py b/src/gcore/types/cloud/load_balancers/flavor_list_params.py index af622cd6..ef732d4e 100644 --- a/src/gcore/types/cloud/load_balancers/flavor_list_params.py +++ b/src/gcore/types/cloud/load_balancers/flavor_list_params.py @@ -16,3 +16,12 @@ class FlavorListParams(TypedDict, total=False): include_prices: bool """Set to true if the response should include flavor prices""" + + limit: int + """Optional. Limit the number of returned items""" + + offset: int + """Optional. + + Offset value is used to exclude the first set of records from the result + """ diff --git a/src/gcore/types/cloud/load_balancers/l7_policies/__init__.py b/src/gcore/types/cloud/load_balancers/l7_policies/__init__.py index 832f1d77..91199151 100644 --- a/src/gcore/types/cloud/load_balancers/l7_policies/__init__.py +++ b/src/gcore/types/cloud/load_balancers/l7_policies/__init__.py @@ -2,5 +2,6 @@ from __future__ import annotations +from .rule_list_params import RuleListParams as RuleListParams from .rule_create_params import RuleCreateParams as RuleCreateParams from .rule_replace_params import RuleReplaceParams as RuleReplaceParams diff --git a/src/gcore/types/cloud/load_balancers/l7_policies/rule_list_params.py b/src/gcore/types/cloud/load_balancers/l7_policies/rule_list_params.py new file mode 100644 index 00000000..f4ccd8e0 --- /dev/null +++ b/src/gcore/types/cloud/load_balancers/l7_policies/rule_list_params.py @@ -0,0 +1,24 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import TypedDict + +__all__ = ["RuleListParams"] + + +class RuleListParams(TypedDict, total=False): + project_id: int + """Project ID""" + + region_id: int + """Region ID""" + + limit: int + """Optional. Limit the number of returned items""" + + offset: int + """Optional. + + Offset value is used to exclude the first set of records from the result + """ diff --git a/src/gcore/types/cloud/load_balancers/l7_policy_list_params.py b/src/gcore/types/cloud/load_balancers/l7_policy_list_params.py new file mode 100644 index 00000000..2f63dec0 --- /dev/null +++ b/src/gcore/types/cloud/load_balancers/l7_policy_list_params.py @@ -0,0 +1,24 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import TypedDict + +__all__ = ["L7PolicyListParams"] + + +class L7PolicyListParams(TypedDict, total=False): + project_id: int + """Project ID""" + + region_id: int + """Region ID""" + + limit: int + """Optional. Limit the number of returned items""" + + offset: int + """Optional. + + Offset value is used to exclude the first set of records from the result + """ diff --git a/src/gcore/types/cloud/load_balancers/listener_list_params.py b/src/gcore/types/cloud/load_balancers/listener_list_params.py index c3e9925f..d0eff492 100644 --- a/src/gcore/types/cloud/load_balancers/listener_list_params.py +++ b/src/gcore/types/cloud/load_balancers/listener_list_params.py @@ -14,8 +14,17 @@ class ListenerListParams(TypedDict, total=False): region_id: int """Region ID""" + limit: int + """Optional. Limit the number of returned items""" + load_balancer_id: str """Load Balancer ID""" + offset: int + """Optional. + + Offset value is used to exclude the first set of records from the result + """ + show_stats: bool """Show stats""" diff --git a/src/gcore/types/cloud/load_balancers/pool_list_params.py b/src/gcore/types/cloud/load_balancers/pool_list_params.py index 1cddb97b..fe83828f 100644 --- a/src/gcore/types/cloud/load_balancers/pool_list_params.py +++ b/src/gcore/types/cloud/load_balancers/pool_list_params.py @@ -17,8 +17,17 @@ class PoolListParams(TypedDict, total=False): details: bool """Show members and Health Monitor details""" + limit: int + """Optional. Limit the number of returned items""" + listener_id: str """Listener ID""" load_balancer_id: str """Load Balancer ID""" + + offset: int + """Optional. + + Offset value is used to exclude the first set of records from the result + """ diff --git a/src/gcore/types/cloud/security_group_create_params.py b/src/gcore/types/cloud/security_group_create_params.py index e660dee3..c56ab8e2 100644 --- a/src/gcore/types/cloud/security_group_create_params.py +++ b/src/gcore/types/cloud/security_group_create_params.py @@ -53,33 +53,34 @@ class Rule(TypedDict, total=False): port_range_min: Optional[int] """The minimum port number in the range that is matched by the security group rule""" - protocol: Literal[ - "ah", - "any", - "dccp", - "egp", - "esp", - "gre", - "icmp", - "igmp", - "ipencap", - "ipip", - "ipv6-encap", - "ipv6-frag", - "ipv6-icmp", - "ipv6-nonxt", - "ipv6-opts", - "ipv6-route", - "ospf", - "pgm", - "rsvp", - "sctp", - "tcp", - "udp", - "udplite", - "vrrp", + protocol: Optional[ + Literal[ + "ah", + "dccp", + "egp", + "esp", + "gre", + "icmp", + "igmp", + "ipencap", + "ipip", + "ipv6-encap", + "ipv6-frag", + "ipv6-icmp", + "ipv6-nonxt", + "ipv6-opts", + "ipv6-route", + "ospf", + "pgm", + "rsvp", + "sctp", + "tcp", + "udp", + "udplite", + "vrrp", + ] ] - """Protocol""" + """V2 protocol enum without 'any'. Use null for all protocols instead.""" remote_group_id: str """The remote group UUID to associate with this security group""" diff --git a/src/gcore/types/cloud/security_group_update_params.py b/src/gcore/types/cloud/security_group_update_params.py index a5e34df0..55f327aa 100644 --- a/src/gcore/types/cloud/security_group_update_params.py +++ b/src/gcore/types/cloud/security_group_update_params.py @@ -74,33 +74,34 @@ class Rule(TypedDict, total=False): port_range_min: int """The minimum port number in the range that is matched by the security group rule""" - protocol: Literal[ - "ah", - "any", - "dccp", - "egp", - "esp", - "gre", - "icmp", - "igmp", - "ipencap", - "ipip", - "ipv6-encap", - "ipv6-frag", - "ipv6-icmp", - "ipv6-nonxt", - "ipv6-opts", - "ipv6-route", - "ospf", - "pgm", - "rsvp", - "sctp", - "tcp", - "udp", - "udplite", - "vrrp", + protocol: Optional[ + Literal[ + "ah", + "dccp", + "egp", + "esp", + "gre", + "icmp", + "igmp", + "ipencap", + "ipip", + "ipv6-encap", + "ipv6-frag", + "ipv6-icmp", + "ipv6-nonxt", + "ipv6-opts", + "ipv6-route", + "ospf", + "pgm", + "rsvp", + "sctp", + "tcp", + "udp", + "udplite", + "vrrp", + ] ] - """Protocol""" + """V2 protocol enum without 'any'. Use null for all protocols instead.""" remote_group_id: str """The remote group UUID to associate with this security group rule""" diff --git a/src/gcore/types/cloud/security_groups/rule_create_params.py b/src/gcore/types/cloud/security_groups/rule_create_params.py index 46fdd411..29f1216e 100644 --- a/src/gcore/types/cloud/security_groups/rule_create_params.py +++ b/src/gcore/types/cloud/security_groups/rule_create_params.py @@ -32,33 +32,34 @@ class RuleCreateParams(TypedDict, total=False): port_range_min: Optional[int] """The minimum port number in the range that is matched by the security group rule""" - protocol: Literal[ - "ah", - "any", - "dccp", - "egp", - "esp", - "gre", - "icmp", - "igmp", - "ipencap", - "ipip", - "ipv6-encap", - "ipv6-frag", - "ipv6-icmp", - "ipv6-nonxt", - "ipv6-opts", - "ipv6-route", - "ospf", - "pgm", - "rsvp", - "sctp", - "tcp", - "udp", - "udplite", - "vrrp", + protocol: Optional[ + Literal[ + "ah", + "dccp", + "egp", + "esp", + "gre", + "icmp", + "igmp", + "ipencap", + "ipip", + "ipv6-encap", + "ipv6-frag", + "ipv6-icmp", + "ipv6-nonxt", + "ipv6-opts", + "ipv6-route", + "ospf", + "pgm", + "rsvp", + "sctp", + "tcp", + "udp", + "udplite", + "vrrp", + ] ] - """Protocol""" + """V2 protocol enum without 'any'. Use null for all protocols instead.""" remote_group_id: str """The remote group UUID to associate with this security group""" diff --git a/tests/api_resources/cloud/load_balancers/l7_policies/test_rules.py b/tests/api_resources/cloud/load_balancers/l7_policies/test_rules.py index 93b6eaf5..c4649689 100644 --- a/tests/api_resources/cloud/load_balancers/l7_policies/test_rules.py +++ b/tests/api_resources/cloud/load_balancers/l7_policies/test_rules.py @@ -99,6 +99,17 @@ def test_method_list(self, client: Gcore) -> None: ) assert_matches_type(LoadBalancerL7RuleList, rule, path=["response"]) + @parametrize + def test_method_list_with_all_params(self, client: Gcore) -> None: + rule = client.cloud.load_balancers.l7_policies.rules.list( + l7policy_id="023f2e34-7806-443b-bfae-16c324569a3d", + project_id=1, + region_id=1, + limit=1000, + offset=0, + ) + assert_matches_type(LoadBalancerL7RuleList, rule, path=["response"]) + @parametrize def test_raw_response_list(self, client: Gcore) -> None: response = client.cloud.load_balancers.l7_policies.rules.with_raw_response.list( @@ -414,6 +425,17 @@ async def test_method_list(self, async_client: AsyncGcore) -> None: ) assert_matches_type(LoadBalancerL7RuleList, rule, path=["response"]) + @parametrize + async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None: + rule = await async_client.cloud.load_balancers.l7_policies.rules.list( + l7policy_id="023f2e34-7806-443b-bfae-16c324569a3d", + project_id=1, + region_id=1, + limit=1000, + offset=0, + ) + assert_matches_type(LoadBalancerL7RuleList, rule, path=["response"]) + @parametrize async def test_raw_response_list(self, async_client: AsyncGcore) -> None: response = await async_client.cloud.load_balancers.l7_policies.rules.with_raw_response.list( diff --git a/tests/api_resources/cloud/load_balancers/test_flavors.py b/tests/api_resources/cloud/load_balancers/test_flavors.py index 49f14df1..43ddefdd 100644 --- a/tests/api_resources/cloud/load_balancers/test_flavors.py +++ b/tests/api_resources/cloud/load_balancers/test_flavors.py @@ -31,6 +31,8 @@ def test_method_list_with_all_params(self, client: Gcore) -> None: project_id=1, region_id=7, include_prices=True, + limit=1000, + offset=0, ) assert_matches_type(LoadBalancerFlavorList, flavor, path=["response"]) @@ -80,6 +82,8 @@ async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> No project_id=1, region_id=7, include_prices=True, + limit=1000, + offset=0, ) assert_matches_type(LoadBalancerFlavorList, flavor, path=["response"]) diff --git a/tests/api_resources/cloud/load_balancers/test_l7_policies.py b/tests/api_resources/cloud/load_balancers/test_l7_policies.py index aae51218..88520e01 100644 --- a/tests/api_resources/cloud/load_balancers/test_l7_policies.py +++ b/tests/api_resources/cloud/load_balancers/test_l7_policies.py @@ -520,6 +520,16 @@ def test_method_list(self, client: Gcore) -> None: ) assert_matches_type(LoadBalancerL7PolicyList, l7_policy, path=["response"]) + @parametrize + def test_method_list_with_all_params(self, client: Gcore) -> None: + l7_policy = client.cloud.load_balancers.l7_policies.list( + project_id=1, + region_id=1, + limit=1000, + offset=0, + ) + assert_matches_type(LoadBalancerL7PolicyList, l7_policy, path=["response"]) + @parametrize def test_raw_response_list(self, client: Gcore) -> None: response = client.cloud.load_balancers.l7_policies.with_raw_response.list( @@ -1147,6 +1157,16 @@ async def test_method_list(self, async_client: AsyncGcore) -> None: ) assert_matches_type(LoadBalancerL7PolicyList, l7_policy, path=["response"]) + @parametrize + async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None: + l7_policy = await async_client.cloud.load_balancers.l7_policies.list( + project_id=1, + region_id=1, + limit=1000, + offset=0, + ) + assert_matches_type(LoadBalancerL7PolicyList, l7_policy, path=["response"]) + @parametrize async def test_raw_response_list(self, async_client: AsyncGcore) -> None: response = await async_client.cloud.load_balancers.l7_policies.with_raw_response.list( diff --git a/tests/api_resources/cloud/load_balancers/test_listeners.py b/tests/api_resources/cloud/load_balancers/test_listeners.py index 81c7a2b2..4f19fe59 100644 --- a/tests/api_resources/cloud/load_balancers/test_listeners.py +++ b/tests/api_resources/cloud/load_balancers/test_listeners.py @@ -173,7 +173,9 @@ def test_method_list_with_all_params(self, client: Gcore) -> None: listener = client.cloud.load_balancers.listeners.list( project_id=1, region_id=1, + limit=1000, load_balancer_id="00000000-0000-4000-8000-000000000000", + offset=0, show_stats=True, ) assert_matches_type(LoadBalancerListenerList, listener, path=["response"]) @@ -478,7 +480,9 @@ async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> No listener = await async_client.cloud.load_balancers.listeners.list( project_id=1, region_id=1, + limit=1000, load_balancer_id="00000000-0000-4000-8000-000000000000", + offset=0, show_stats=True, ) assert_matches_type(LoadBalancerListenerList, listener, path=["response"]) diff --git a/tests/api_resources/cloud/load_balancers/test_pools.py b/tests/api_resources/cloud/load_balancers/test_pools.py index 9905e435..0a97278a 100644 --- a/tests/api_resources/cloud/load_balancers/test_pools.py +++ b/tests/api_resources/cloud/load_balancers/test_pools.py @@ -233,8 +233,10 @@ def test_method_list_with_all_params(self, client: Gcore) -> None: project_id=1, region_id=1, details=True, + limit=1000, listener_id="00000000-0000-4000-8000-000000000000", load_balancer_id="00000000-0000-4000-8000-000000000000", + offset=0, ) assert_matches_type(LoadBalancerPoolList, pool, path=["response"]) @@ -578,8 +580,10 @@ async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> No project_id=1, region_id=1, details=True, + limit=1000, listener_id="00000000-0000-4000-8000-000000000000", load_balancer_id="00000000-0000-4000-8000-000000000000", + offset=0, ) assert_matches_type(LoadBalancerPoolList, pool, path=["response"]) diff --git a/tests/api_resources/cloud/test_load_balancers.py b/tests/api_resources/cloud/test_load_balancers.py index 2c5764ef..d7e2014c 100644 --- a/tests/api_resources/cloud/test_load_balancers.py +++ b/tests/api_resources/cloud/test_load_balancers.py @@ -28,6 +28,7 @@ def test_method_create(self, client: Gcore) -> None: load_balancer = client.cloud.load_balancers.create( project_id=1, region_id=7, + name="new_load_balancer", ) assert_matches_type(TaskIDList, load_balancer, path=["response"]) @@ -36,6 +37,7 @@ def test_method_create_with_all_params(self, client: Gcore) -> None: load_balancer = client.cloud.load_balancers.create( project_id=1, region_id=7, + name="new_load_balancer", flavor="lb1-1-2", floating_ip={ "existing_floating_id": "c64e5db1-5f1f-43ec-a8d9-5090df85b82d", @@ -124,8 +126,6 @@ def test_method_create_with_all_params(self, client: Gcore) -> None: "retention_policy": {"period": 45}, "topic_name": "my-log-name", }, - name="new_load_balancer", - name_template="lb_name_template", preferred_connectivity="L2", tags={"my-tag": "my-tag-value"}, vip_ip_family="dual", @@ -140,6 +140,7 @@ def test_raw_response_create(self, client: Gcore) -> None: response = client.cloud.load_balancers.with_raw_response.create( project_id=1, region_id=7, + name="new_load_balancer", ) assert response.is_closed is True @@ -152,6 +153,7 @@ def test_streaming_response_create(self, client: Gcore) -> None: with client.cloud.load_balancers.with_streaming_response.create( project_id=1, region_id=7, + name="new_load_balancer", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -504,6 +506,7 @@ async def test_method_create(self, async_client: AsyncGcore) -> None: load_balancer = await async_client.cloud.load_balancers.create( project_id=1, region_id=7, + name="new_load_balancer", ) assert_matches_type(TaskIDList, load_balancer, path=["response"]) @@ -512,6 +515,7 @@ async def test_method_create_with_all_params(self, async_client: AsyncGcore) -> load_balancer = await async_client.cloud.load_balancers.create( project_id=1, region_id=7, + name="new_load_balancer", flavor="lb1-1-2", floating_ip={ "existing_floating_id": "c64e5db1-5f1f-43ec-a8d9-5090df85b82d", @@ -600,8 +604,6 @@ async def test_method_create_with_all_params(self, async_client: AsyncGcore) -> "retention_policy": {"period": 45}, "topic_name": "my-log-name", }, - name="new_load_balancer", - name_template="lb_name_template", preferred_connectivity="L2", tags={"my-tag": "my-tag-value"}, vip_ip_family="dual", @@ -616,6 +618,7 @@ async def test_raw_response_create(self, async_client: AsyncGcore) -> None: response = await async_client.cloud.load_balancers.with_raw_response.create( project_id=1, region_id=7, + name="new_load_balancer", ) assert response.is_closed is True @@ -628,6 +631,7 @@ async def test_streaming_response_create(self, async_client: AsyncGcore) -> None async with async_client.cloud.load_balancers.with_streaming_response.create( project_id=1, region_id=7, + name="new_load_balancer", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" From d4ecdece4d577758ff72ba34ceaab9b07dc3ec71 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 10:31:21 +0000 Subject: [PATCH 67/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 705316e9..2eebb439 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d22228888cb7ed9c880f41e9642e4e3f406c3401d5ef7ba8cb3674f12864682c.yml -openapi_spec_hash: a150cff71663ca3fc455be832781e306 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-8dfeb8d10283d24eb34d2bb69b7b67e966053007293a96c4f9b070cc50eaf3b6.yml +openapi_spec_hash: b9ccb78e00b4849db115be43c033e941 config_hash: a8091c31251bc8979abd6db1f2c88983 From 80d8d7c59066689df331e4a69796e89916a95f01 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 12:31:37 +0000 Subject: [PATCH 68/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 2eebb439..6bf21217 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-8dfeb8d10283d24eb34d2bb69b7b67e966053007293a96c4f9b070cc50eaf3b6.yml -openapi_spec_hash: b9ccb78e00b4849db115be43c033e941 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-f80031699ee54d781dd8e947b655cdcbea3a0ec63525f667f156b97371ade2af.yml +openapi_spec_hash: 37d231bec76562576629a18fc0c88a69 config_hash: a8091c31251bc8979abd6db1f2c88983 From 295e5d3552cc864bfdc57318defbf5ab7183cfbb Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 14:43:17 +0000 Subject: [PATCH 69/96] feat(api): aggregated API specs update --- .stats.yml | 4 +- src/gcore/resources/cdn/origin_groups.py | 192 ++++++++++++------ .../types/cdn/origin_group_create_params.py | 23 ++- .../types/cdn/origin_group_replace_params.py | 61 ++++-- .../types/cdn/origin_group_update_params.py | 37 +++- src/gcore/types/cdn/origin_groups.py | 41 +++- tests/api_resources/cdn/test_origin_groups.py | 30 +-- 7 files changed, 266 insertions(+), 122 deletions(-) diff --git a/.stats.yml b/.stats.yml index 6bf21217..febda490 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-f80031699ee54d781dd8e947b655cdcbea3a0ec63525f667f156b97371ade2af.yml -openapi_spec_hash: 37d231bec76562576629a18fc0c88a69 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-13b4a16cd43e7638a0158083372e57034eff7a5024c83e70a7673823bad77b34.yml +openapi_spec_hash: 6b0a3adf49edd6629275fc3a033c391b config_hash: a8091c31251bc8979abd6db1f2c88983 diff --git a/src/gcore/resources/cdn/origin_groups.py b/src/gcore/resources/cdn/origin_groups.py index 01a4a919..d3ba0dbb 100644 --- a/src/gcore/resources/cdn/origin_groups.py +++ b/src/gcore/resources/cdn/origin_groups.py @@ -76,7 +76,9 @@ def create( Args: name: Origin group name. - auth_type: Origin authentication type. + auth_type: **Deprecated.** No longer necessary. Defaults to `none`. + + Origin authentication type. Possible values: @@ -139,9 +141,15 @@ def create( Create an origin group with one or more origin sources. Args: - auth: Credentials to access the private bucket. + auth: **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Credentials to access the private bucket. + + auth_type: **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. - auth_type: Authentication type. + Authentication type. **awsSignatureV4** value is used for S3 storage. @@ -246,14 +254,19 @@ def update( Args: name: Origin group name. - auth_type: Origin authentication type. + auth_type: **Deprecated.** No longer necessary. Defaults to `none`. + + Origin authentication type. Possible values: - **none** - Used for public origins. - **awsSignatureV4** - Used for S3 storage. - path: Parameter is **deprecated**. + path: **Deprecated.** No longer necessary. Omit this field and the default origin path + behavior will be used. + + Origin path prefix. proxy_next_upstream: Defines cases when the request should be passed on to the next origin. @@ -313,15 +326,24 @@ def update( Change origin group Args: - auth: Credentials to access the private bucket. + auth: **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. - auth_type: Authentication type. + Credentials to access the private bucket. + + auth_type: **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Authentication type. **awsSignatureV4** value is used for S3 storage. name: Origin group name. - path: Parameter is **deprecated**. + path: **Deprecated.** No longer necessary. Omit this field and the default origin path + behavior will be used. + + Origin path prefix. proxy_next_upstream: Defines cases when the request should be passed on to the next origin. @@ -537,11 +559,11 @@ def replace( self, origin_group_id: int, *, - auth_type: str, name: str, - path: str, sources: Iterable[origin_group_replace_params.NoneAuthSource], use_next: bool, + auth_type: str | Omit = omit, + path: str | Omit = omit, proxy_next_upstream: SequenceNotStr[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -554,17 +576,8 @@ def replace( Change origin group Args: - auth_type: Origin authentication type. - - Possible values: - - - **none** - Used for public origins. - - **awsSignatureV4** - Used for S3 storage. - name: Origin group name. - path: Parameter is **deprecated**. - use_next: Defines whether to use the next origin from the origin group if origin responds with the cases specified in `proxy_next_upstream`. If you enable it, you must specify cases in `proxy_next_upstream`. @@ -574,6 +587,20 @@ def replace( - **true** - Option is enabled. - **false** - Option is disabled. + auth_type: **Deprecated.** No longer necessary. Defaults to `none`. + + Origin authentication type. + + Possible values: + + - **none** - Used for public origins. + - **awsSignatureV4** - Used for S3 storage. + + path: **Deprecated.** No longer necessary. Omit this field and the default origin path + behavior will be used. + + Origin path prefix. + proxy_next_upstream: Defines cases when the request should be passed on to the next origin. Possible values: @@ -609,8 +636,8 @@ def replace( auth: origin_group_replace_params.AwsSignatureV4Auth, auth_type: str, name: str, - path: str, use_next: bool, + path: str | Omit = omit, proxy_next_upstream: SequenceNotStr[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -623,16 +650,20 @@ def replace( Change origin group Args: - auth: Credentials to access the private bucket. + auth: **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Credentials to access the private bucket. + + auth_type: **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. - auth_type: Authentication type. + Authentication type. **awsSignatureV4** value is used for S3 storage. name: Origin group name. - path: Parameter is **deprecated**. - use_next: Defines whether to use the next origin from the origin group if origin responds with the cases specified in `proxy_next_upstream`. If you enable it, you must specify cases in `proxy_next_upstream`. @@ -642,6 +673,11 @@ def replace( - **true** - Option is enabled. - **false** - Option is disabled. + path: **Deprecated.** No longer necessary. Omit this field and the default origin path + behavior will be used. + + Origin path prefix. + proxy_next_upstream: Defines cases when the request should be passed on to the next origin. Possible values: @@ -669,18 +705,16 @@ def replace( """ ... - @required_args( - ["auth_type", "name", "path", "sources", "use_next"], ["auth", "auth_type", "name", "path", "use_next"] - ) + @required_args(["name", "sources", "use_next"], ["auth", "auth_type", "name", "use_next"]) def replace( self, origin_group_id: int, *, - auth_type: str, name: str, - path: str, sources: Iterable[origin_group_replace_params.NoneAuthSource] | Omit = omit, use_next: bool, + auth_type: str | Omit = omit, + path: str | Omit = omit, proxy_next_upstream: SequenceNotStr[str] | Omit = omit, auth: origin_group_replace_params.AwsSignatureV4Auth | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -696,11 +730,11 @@ def replace( path_template("/cdn/origin_groups/{origin_group_id}", origin_group_id=origin_group_id), body=maybe_transform( { - "auth_type": auth_type, "name": name, - "path": path, "sources": sources, "use_next": use_next, + "auth_type": auth_type, + "path": path, "proxy_next_upstream": proxy_next_upstream, "auth": auth, }, @@ -760,7 +794,9 @@ async def create( Args: name: Origin group name. - auth_type: Origin authentication type. + auth_type: **Deprecated.** No longer necessary. Defaults to `none`. + + Origin authentication type. Possible values: @@ -823,9 +859,15 @@ async def create( Create an origin group with one or more origin sources. Args: - auth: Credentials to access the private bucket. + auth: **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Credentials to access the private bucket. + + auth_type: **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. - auth_type: Authentication type. + Authentication type. **awsSignatureV4** value is used for S3 storage. @@ -930,14 +972,19 @@ async def update( Args: name: Origin group name. - auth_type: Origin authentication type. + auth_type: **Deprecated.** No longer necessary. Defaults to `none`. + + Origin authentication type. Possible values: - **none** - Used for public origins. - **awsSignatureV4** - Used for S3 storage. - path: Parameter is **deprecated**. + path: **Deprecated.** No longer necessary. Omit this field and the default origin path + behavior will be used. + + Origin path prefix. proxy_next_upstream: Defines cases when the request should be passed on to the next origin. @@ -997,15 +1044,24 @@ async def update( Change origin group Args: - auth: Credentials to access the private bucket. + auth: **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. - auth_type: Authentication type. + Credentials to access the private bucket. + + auth_type: **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Authentication type. **awsSignatureV4** value is used for S3 storage. name: Origin group name. - path: Parameter is **deprecated**. + path: **Deprecated.** No longer necessary. Omit this field and the default origin path + behavior will be used. + + Origin path prefix. proxy_next_upstream: Defines cases when the request should be passed on to the next origin. @@ -1221,11 +1277,11 @@ async def replace( self, origin_group_id: int, *, - auth_type: str, name: str, - path: str, sources: Iterable[origin_group_replace_params.NoneAuthSource], use_next: bool, + auth_type: str | Omit = omit, + path: str | Omit = omit, proxy_next_upstream: SequenceNotStr[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -1238,17 +1294,8 @@ async def replace( Change origin group Args: - auth_type: Origin authentication type. - - Possible values: - - - **none** - Used for public origins. - - **awsSignatureV4** - Used for S3 storage. - name: Origin group name. - path: Parameter is **deprecated**. - use_next: Defines whether to use the next origin from the origin group if origin responds with the cases specified in `proxy_next_upstream`. If you enable it, you must specify cases in `proxy_next_upstream`. @@ -1258,6 +1305,20 @@ async def replace( - **true** - Option is enabled. - **false** - Option is disabled. + auth_type: **Deprecated.** No longer necessary. Defaults to `none`. + + Origin authentication type. + + Possible values: + + - **none** - Used for public origins. + - **awsSignatureV4** - Used for S3 storage. + + path: **Deprecated.** No longer necessary. Omit this field and the default origin path + behavior will be used. + + Origin path prefix. + proxy_next_upstream: Defines cases when the request should be passed on to the next origin. Possible values: @@ -1293,8 +1354,8 @@ async def replace( auth: origin_group_replace_params.AwsSignatureV4Auth, auth_type: str, name: str, - path: str, use_next: bool, + path: str | Omit = omit, proxy_next_upstream: SequenceNotStr[str] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -1307,16 +1368,20 @@ async def replace( Change origin group Args: - auth: Credentials to access the private bucket. + auth: **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Credentials to access the private bucket. + + auth_type: **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. - auth_type: Authentication type. + Authentication type. **awsSignatureV4** value is used for S3 storage. name: Origin group name. - path: Parameter is **deprecated**. - use_next: Defines whether to use the next origin from the origin group if origin responds with the cases specified in `proxy_next_upstream`. If you enable it, you must specify cases in `proxy_next_upstream`. @@ -1326,6 +1391,11 @@ async def replace( - **true** - Option is enabled. - **false** - Option is disabled. + path: **Deprecated.** No longer necessary. Omit this field and the default origin path + behavior will be used. + + Origin path prefix. + proxy_next_upstream: Defines cases when the request should be passed on to the next origin. Possible values: @@ -1353,18 +1423,16 @@ async def replace( """ ... - @required_args( - ["auth_type", "name", "path", "sources", "use_next"], ["auth", "auth_type", "name", "path", "use_next"] - ) + @required_args(["name", "sources", "use_next"], ["auth", "auth_type", "name", "use_next"]) async def replace( self, origin_group_id: int, *, - auth_type: str, name: str, - path: str, sources: Iterable[origin_group_replace_params.NoneAuthSource] | Omit = omit, use_next: bool, + auth_type: str | Omit = omit, + path: str | Omit = omit, proxy_next_upstream: SequenceNotStr[str] | Omit = omit, auth: origin_group_replace_params.AwsSignatureV4Auth | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -1380,11 +1448,11 @@ async def replace( path_template("/cdn/origin_groups/{origin_group_id}", origin_group_id=origin_group_id), body=await async_maybe_transform( { - "auth_type": auth_type, "name": name, - "path": path, "sources": sources, "use_next": use_next, + "auth_type": auth_type, + "path": path, "proxy_next_upstream": proxy_next_upstream, "auth": auth, }, diff --git a/src/gcore/types/cdn/origin_group_create_params.py b/src/gcore/types/cdn/origin_group_create_params.py index 10e256e5..8efbd7d2 100644 --- a/src/gcore/types/cdn/origin_group_create_params.py +++ b/src/gcore/types/cdn/origin_group_create_params.py @@ -26,7 +26,9 @@ class NoneAuth(TypedDict, total=False): sources: Required[Iterable[NoneAuthSource]] auth_type: str - """Origin authentication type. + """**Deprecated.** No longer necessary. Defaults to `none`. + + Origin authentication type. Possible values: @@ -204,10 +206,19 @@ class NoneAuthSourceChangeS3Source(TypedDict, total=False): class AwsSignatureV4(TypedDict, total=False): auth: Required[AwsSignatureV4Auth] - """Credentials to access the private bucket.""" + """ + **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Credentials to access the private bucket. + """ auth_type: Required[str] - """Authentication type. + """ + **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Authentication type. **awsSignatureV4** value is used for S3 storage. """ @@ -248,7 +259,11 @@ class AwsSignatureV4(TypedDict, total=False): class AwsSignatureV4Auth(TypedDict, total=False): - """Credentials to access the private bucket.""" + """ + **Deprecated.** To create S3 origins, configure them directly in sources with `origin_type` and `config` instead. + + Credentials to access the private bucket. + """ s3_access_key_id: Required[str] """Access key ID for the S3 account. diff --git a/src/gcore/types/cdn/origin_group_replace_params.py b/src/gcore/types/cdn/origin_group_replace_params.py index 4a93b73b..a8694a66 100644 --- a/src/gcore/types/cdn/origin_group_replace_params.py +++ b/src/gcore/types/cdn/origin_group_replace_params.py @@ -20,21 +20,9 @@ class NoneAuth(TypedDict, total=False): - auth_type: Required[str] - """Origin authentication type. - - Possible values: - - - **none** - Used for public origins. - - **awsSignatureV4** - Used for S3 storage. - """ - name: Required[str] """Origin group name.""" - path: Required[str] - """Parameter is **deprecated**.""" - sources: Required[Iterable[NoneAuthSource]] use_next: Required[bool] @@ -49,6 +37,25 @@ class NoneAuth(TypedDict, total=False): - **false** - Option is disabled. """ + auth_type: str + """**Deprecated.** No longer necessary. Defaults to `none`. + + Origin authentication type. + + Possible values: + + - **none** - Used for public origins. + - **awsSignatureV4** - Used for S3 storage. + """ + + path: str + """**Deprecated.** No longer necessary. + + Omit this field and the default origin path behavior will be used. + + Origin path prefix. + """ + proxy_next_upstream: SequenceNotStr[str] """Defines cases when the request should be passed on to the next origin. @@ -207,10 +214,19 @@ class NoneAuthSourceChangeS3Source(TypedDict, total=False): class AwsSignatureV4(TypedDict, total=False): auth: Required[AwsSignatureV4Auth] - """Credentials to access the private bucket.""" + """ + **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Credentials to access the private bucket. + """ auth_type: Required[str] - """Authentication type. + """ + **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Authentication type. **awsSignatureV4** value is used for S3 storage. """ @@ -218,9 +234,6 @@ class AwsSignatureV4(TypedDict, total=False): name: Required[str] """Origin group name.""" - path: Required[str] - """Parameter is **deprecated**.""" - use_next: Required[bool] """ Defines whether to use the next origin from the origin group if origin responds @@ -233,6 +246,14 @@ class AwsSignatureV4(TypedDict, total=False): - **false** - Option is disabled. """ + path: str + """**Deprecated.** No longer necessary. + + Omit this field and the default origin path behavior will be used. + + Origin path prefix. + """ + proxy_next_upstream: SequenceNotStr[str] """Defines cases when the request should be passed on to the next origin. @@ -254,7 +275,11 @@ class AwsSignatureV4(TypedDict, total=False): class AwsSignatureV4Auth(TypedDict, total=False): - """Credentials to access the private bucket.""" + """ + **Deprecated.** To create S3 origins, configure them directly in sources with `origin_type` and `config` instead. + + Credentials to access the private bucket. + """ s3_access_key_id: Required[str] """Access key ID for the S3 account. diff --git a/src/gcore/types/cdn/origin_group_update_params.py b/src/gcore/types/cdn/origin_group_update_params.py index 39593b45..63a0cb0f 100644 --- a/src/gcore/types/cdn/origin_group_update_params.py +++ b/src/gcore/types/cdn/origin_group_update_params.py @@ -24,7 +24,9 @@ class NoneAuth(TypedDict, total=False): """Origin group name.""" auth_type: str - """Origin authentication type. + """**Deprecated.** No longer necessary. Defaults to `none`. + + Origin authentication type. Possible values: @@ -33,7 +35,12 @@ class NoneAuth(TypedDict, total=False): """ path: str - """Parameter is **deprecated**.""" + """**Deprecated.** No longer necessary. + + Omit this field and the default origin path behavior will be used. + + Origin path prefix. + """ proxy_next_upstream: SequenceNotStr[str] """Defines cases when the request should be passed on to the next origin. @@ -207,10 +214,19 @@ class NoneAuthSourceChangeS3Source(TypedDict, total=False): class AwsSignatureV4(TypedDict, total=False): auth: AwsSignatureV4Auth - """Credentials to access the private bucket.""" + """ + **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Credentials to access the private bucket. + """ auth_type: str - """Authentication type. + """ + **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Authentication type. **awsSignatureV4** value is used for S3 storage. """ @@ -219,7 +235,12 @@ class AwsSignatureV4(TypedDict, total=False): """Origin group name.""" path: str - """Parameter is **deprecated**.""" + """**Deprecated.** No longer necessary. + + Omit this field and the default origin path behavior will be used. + + Origin path prefix. + """ proxy_next_upstream: SequenceNotStr[str] """Defines cases when the request should be passed on to the next origin. @@ -254,7 +275,11 @@ class AwsSignatureV4(TypedDict, total=False): class AwsSignatureV4Auth(TypedDict, total=False): - """Credentials to access the private bucket.""" + """ + **Deprecated.** To create S3 origins, configure them directly in sources with `origin_type` and `config` instead. + + Credentials to access the private bucket. + """ s3_access_key_id: Required[str] """Access key ID for the S3 account. diff --git a/src/gcore/types/cdn/origin_groups.py b/src/gcore/types/cdn/origin_groups.py index 4bf02eb8..43a63d92 100644 --- a/src/gcore/types/cdn/origin_groups.py +++ b/src/gcore/types/cdn/origin_groups.py @@ -179,7 +179,9 @@ class NoneAuth(BaseModel): """ auth_type: Optional[str] = None - """Origin authentication type. + """**Deprecated.** No longer necessary. Defaults to `none`. + + Origin authentication type. Possible values: @@ -197,7 +199,12 @@ class NoneAuth(BaseModel): """ path: Optional[str] = None - """Parameter is **deprecated**.""" + """**Deprecated.** No longer necessary. + + Omit this field and the default origin path behavior will be used. + + Origin path prefix. + """ proxy_next_upstream: Optional[List[str]] = None """Defines cases when the request should be passed on to the next origin. @@ -232,7 +239,11 @@ class NoneAuth(BaseModel): class AwsSignatureV4Auth(BaseModel): - """Credentials to access the private bucket.""" + """ + **Deprecated.** To create S3 origins, configure them directly in sources with `origin_type` and `config` instead. + + Credentials to access the private bucket. + """ s3_access_key_id: str """Access key ID for the S3 account. @@ -280,14 +291,27 @@ class AwsSignatureV4Auth(BaseModel): class AwsSignatureV4(BaseModel): + """ + **Deprecated.** To create S3 origins, configure them directly in sources with `origin_type` and `config` instead. + """ + id: int """Origin group ID.""" auth: AwsSignatureV4Auth - """Credentials to access the private bucket.""" + """ + **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Credentials to access the private bucket. + """ auth_type: str - """Authentication type. + """ + **Deprecated.** To create S3 origins, configure them directly in sources with + `origin_type` and `config` instead. + + Authentication type. **awsSignatureV4** value is used for S3 storage. """ @@ -305,7 +329,12 @@ class AwsSignatureV4(BaseModel): """ path: Optional[str] = None - """Parameter is **deprecated**.""" + """**Deprecated.** No longer necessary. + + Omit this field and the default origin path behavior will be used. + + Origin path prefix. + """ proxy_next_upstream: Optional[List[str]] = None """Defines cases when the request should be passed on to the next origin. diff --git a/tests/api_resources/cdn/test_origin_groups.py b/tests/api_resources/cdn/test_origin_groups.py index 58a1b94f..cc9e84b7 100644 --- a/tests/api_resources/cdn/test_origin_groups.py +++ b/tests/api_resources/cdn/test_origin_groups.py @@ -351,9 +351,7 @@ def test_streaming_response_get(self, client: Gcore) -> None: def test_method_replace_overload_1(self, client: Gcore) -> None: origin_group = client.cdn.origin_groups.replace( origin_group_id=0, - auth_type="none", name="YourOriginGroup", - path="", sources=[{"source": "yourdomain.com"}], use_next=True, ) @@ -363,9 +361,7 @@ def test_method_replace_overload_1(self, client: Gcore) -> None: def test_method_replace_with_all_params_overload_1(self, client: Gcore) -> None: origin_group = client.cdn.origin_groups.replace( origin_group_id=0, - auth_type="none", name="YourOriginGroup", - path="", sources=[ { "source": "yourdomain.com", @@ -376,6 +372,8 @@ def test_method_replace_with_all_params_overload_1(self, client: Gcore) -> None: } ], use_next=True, + auth_type="none", + path="", proxy_next_upstream=["error", "timeout", "invalid_header", "http_500", "http_502", "http_503", "http_504"], ) assert_matches_type(OriginGroups, origin_group, path=["response"]) @@ -384,9 +382,7 @@ def test_method_replace_with_all_params_overload_1(self, client: Gcore) -> None: def test_raw_response_replace_overload_1(self, client: Gcore) -> None: response = client.cdn.origin_groups.with_raw_response.replace( origin_group_id=0, - auth_type="none", name="YourOriginGroup", - path="", sources=[{"source": "yourdomain.com"}], use_next=True, ) @@ -400,9 +396,7 @@ def test_raw_response_replace_overload_1(self, client: Gcore) -> None: def test_streaming_response_replace_overload_1(self, client: Gcore) -> None: with client.cdn.origin_groups.with_streaming_response.replace( origin_group_id=0, - auth_type="none", name="YourOriginGroup", - path="", sources=[{"source": "yourdomain.com"}], use_next=True, ) as response: @@ -426,7 +420,6 @@ def test_method_replace_overload_2(self, client: Gcore) -> None: }, auth_type="awsSignatureV4", name="YourOriginGroup", - path="", use_next=True, ) assert_matches_type(OriginGroups, origin_group, path=["response"]) @@ -445,8 +438,8 @@ def test_method_replace_with_all_params_overload_2(self, client: Gcore) -> None: }, auth_type="awsSignatureV4", name="YourOriginGroup", - path="", use_next=True, + path="", proxy_next_upstream=["error", "timeout", "invalid_header", "http_500", "http_502", "http_503", "http_504"], ) assert_matches_type(OriginGroups, origin_group, path=["response"]) @@ -463,7 +456,6 @@ def test_raw_response_replace_overload_2(self, client: Gcore) -> None: }, auth_type="awsSignatureV4", name="YourOriginGroup", - path="", use_next=True, ) @@ -484,7 +476,6 @@ def test_streaming_response_replace_overload_2(self, client: Gcore) -> None: }, auth_type="awsSignatureV4", name="YourOriginGroup", - path="", use_next=True, ) as response: assert not response.is_closed @@ -832,9 +823,7 @@ async def test_streaming_response_get(self, async_client: AsyncGcore) -> None: async def test_method_replace_overload_1(self, async_client: AsyncGcore) -> None: origin_group = await async_client.cdn.origin_groups.replace( origin_group_id=0, - auth_type="none", name="YourOriginGroup", - path="", sources=[{"source": "yourdomain.com"}], use_next=True, ) @@ -844,9 +833,7 @@ async def test_method_replace_overload_1(self, async_client: AsyncGcore) -> None async def test_method_replace_with_all_params_overload_1(self, async_client: AsyncGcore) -> None: origin_group = await async_client.cdn.origin_groups.replace( origin_group_id=0, - auth_type="none", name="YourOriginGroup", - path="", sources=[ { "source": "yourdomain.com", @@ -857,6 +844,8 @@ async def test_method_replace_with_all_params_overload_1(self, async_client: Asy } ], use_next=True, + auth_type="none", + path="", proxy_next_upstream=["error", "timeout", "invalid_header", "http_500", "http_502", "http_503", "http_504"], ) assert_matches_type(OriginGroups, origin_group, path=["response"]) @@ -865,9 +854,7 @@ async def test_method_replace_with_all_params_overload_1(self, async_client: Asy async def test_raw_response_replace_overload_1(self, async_client: AsyncGcore) -> None: response = await async_client.cdn.origin_groups.with_raw_response.replace( origin_group_id=0, - auth_type="none", name="YourOriginGroup", - path="", sources=[{"source": "yourdomain.com"}], use_next=True, ) @@ -881,9 +868,7 @@ async def test_raw_response_replace_overload_1(self, async_client: AsyncGcore) - async def test_streaming_response_replace_overload_1(self, async_client: AsyncGcore) -> None: async with async_client.cdn.origin_groups.with_streaming_response.replace( origin_group_id=0, - auth_type="none", name="YourOriginGroup", - path="", sources=[{"source": "yourdomain.com"}], use_next=True, ) as response: @@ -907,7 +892,6 @@ async def test_method_replace_overload_2(self, async_client: AsyncGcore) -> None }, auth_type="awsSignatureV4", name="YourOriginGroup", - path="", use_next=True, ) assert_matches_type(OriginGroups, origin_group, path=["response"]) @@ -926,8 +910,8 @@ async def test_method_replace_with_all_params_overload_2(self, async_client: Asy }, auth_type="awsSignatureV4", name="YourOriginGroup", - path="", use_next=True, + path="", proxy_next_upstream=["error", "timeout", "invalid_header", "http_500", "http_502", "http_503", "http_504"], ) assert_matches_type(OriginGroups, origin_group, path=["response"]) @@ -944,7 +928,6 @@ async def test_raw_response_replace_overload_2(self, async_client: AsyncGcore) - }, auth_type="awsSignatureV4", name="YourOriginGroup", - path="", use_next=True, ) @@ -965,7 +948,6 @@ async def test_streaming_response_replace_overload_2(self, async_client: AsyncGc }, auth_type="awsSignatureV4", name="YourOriginGroup", - path="", use_next=True, ) as response: assert not response.is_closed From 2d956ac4395debf49e90ef4a19f6da2e5783643e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 16:35:40 +0000 Subject: [PATCH 70/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index febda490..0e4be761 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-13b4a16cd43e7638a0158083372e57034eff7a5024c83e70a7673823bad77b34.yml -openapi_spec_hash: 6b0a3adf49edd6629275fc3a033c391b +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-090d9d5fecb4af5a5035e1659ebbf75d3b1f661892988ea60673695802bfaa78.yml +openapi_spec_hash: eb02badb1244c9d6668210e63b242539 config_hash: a8091c31251bc8979abd6db1f2c88983 From 187181c0797ae8f168c9b84a7e073dc745c63850 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 18:36:55 +0000 Subject: [PATCH 71/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 0e4be761..c612533c 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-090d9d5fecb4af5a5035e1659ebbf75d3b1f661892988ea60673695802bfaa78.yml -openapi_spec_hash: eb02badb1244c9d6668210e63b242539 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d8eb9df895bbc0f98da98a24ae165751d2298a99d48e21817d0ff67d2612d071.yml +openapi_spec_hash: b4ff23d91c6f927e11f64779c725c5f9 config_hash: a8091c31251bc8979abd6db1f2c88983 From f19a84a543dbd0870f229f644579b358efdea2a4 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 20:21:53 +0000 Subject: [PATCH 72/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index c612533c..1c18bd96 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d8eb9df895bbc0f98da98a24ae165751d2298a99d48e21817d0ff67d2612d071.yml -openapi_spec_hash: b4ff23d91c6f927e11f64779c725c5f9 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-7ef119f8e341570aedbf5a6ee765b6646a4fcb0e2673e10351c0b05465789dbf.yml +openapi_spec_hash: 5f4fffa2c27dd041128bd37770f63b81 config_hash: a8091c31251bc8979abd6db1f2c88983 From c6ee4a6e9ca974b38c379d394a2fad2f496e1b37 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 22:21:37 +0000 Subject: [PATCH 73/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1c18bd96..38fbce52 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-7ef119f8e341570aedbf5a6ee765b6646a4fcb0e2673e10351c0b05465789dbf.yml -openapi_spec_hash: 5f4fffa2c27dd041128bd37770f63b81 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-c765fd02da000f77742bd4a01402e2870cdb6e8d8fb9a2bae87d815c096c618d.yml +openapi_spec_hash: 4960b5e16a151e7ce9e59201616ec512 config_hash: a8091c31251bc8979abd6db1f2c88983 From 4ec0e5514ff327aa890eb1f18d51d8b0017c7139 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 00:41:35 +0000 Subject: [PATCH 74/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 38fbce52..b99d3c75 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-c765fd02da000f77742bd4a01402e2870cdb6e8d8fb9a2bae87d815c096c618d.yml -openapi_spec_hash: 4960b5e16a151e7ce9e59201616ec512 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-dc7e4cacb38f39059823c33d78a11083b755ba2a6c4748aeffa07d7c01882586.yml +openapi_spec_hash: a1b832de25a20b5ae8b7c062e8ccf5f9 config_hash: a8091c31251bc8979abd6db1f2c88983 From b4609eb9a0a11d213f6700accc128c3a5ea4fa8c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 03:14:02 +0000 Subject: [PATCH 75/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index b99d3c75..acfa3c47 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-dc7e4cacb38f39059823c33d78a11083b755ba2a6c4748aeffa07d7c01882586.yml -openapi_spec_hash: a1b832de25a20b5ae8b7c062e8ccf5f9 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-bc10ed8dbce1555e648debd1d817c1cabb2c706474d25b4d9a9ce7d538ee7bca.yml +openapi_spec_hash: 1f4402c721296b8ceffe06f3383534b0 config_hash: a8091c31251bc8979abd6db1f2c88983 From 1ced30c126401f1f80fddaa695eb50884653e9cf Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 04:56:14 +0000 Subject: [PATCH 76/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index acfa3c47..2c5ff2fe 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-bc10ed8dbce1555e648debd1d817c1cabb2c706474d25b4d9a9ce7d538ee7bca.yml -openapi_spec_hash: 1f4402c721296b8ceffe06f3383534b0 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-67d29fbedc59e2604e70c2e8ca133059fa997780726227ca212509937a7f7b35.yml +openapi_spec_hash: 2496c6b7f94fddce11d2b575154d66c4 config_hash: a8091c31251bc8979abd6db1f2c88983 From cfd1bba6af9ec5dffffd45877d82bcc88a3f240d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 06:43:51 +0000 Subject: [PATCH 77/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 2c5ff2fe..2696f36a 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-67d29fbedc59e2604e70c2e8ca133059fa997780726227ca212509937a7f7b35.yml -openapi_spec_hash: 2496c6b7f94fddce11d2b575154d66c4 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-844012056760ca101b915ba7306d2e7c7145d15abaa9f0b4dce7337bf6a76ecc.yml +openapi_spec_hash: b351bc181307bbe03402ffbf85e7d534 config_hash: a8091c31251bc8979abd6db1f2c88983 From bccf2dbf11d2275c90a1a8b342066862344fdd56 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 08:42:13 +0000 Subject: [PATCH 78/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 2696f36a..8225694a 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-844012056760ca101b915ba7306d2e7c7145d15abaa9f0b4dce7337bf6a76ecc.yml -openapi_spec_hash: b351bc181307bbe03402ffbf85e7d534 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-bbeb470cf2259a67e87390bc5571e15b4581b451cc683ad15053164cc1e7e45f.yml +openapi_spec_hash: 5bbc910cb58ce30a4e43bab3d83dd935 config_hash: a8091c31251bc8979abd6db1f2c88983 From 2c69764d955818f6eb49ef7ed0f77e997c982122 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 10:13:21 +0000 Subject: [PATCH 79/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 8225694a..b6912f00 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-bbeb470cf2259a67e87390bc5571e15b4581b451cc683ad15053164cc1e7e45f.yml +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-cc3b99b5f4813e4b74e7de47b174dfbab213557e3c352e583ddd2363d6c8827a.yml openapi_spec_hash: 5bbc910cb58ce30a4e43bab3d83dd935 -config_hash: a8091c31251bc8979abd6db1f2c88983 +config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From 294294c7cd2450f4ff10a2e4bf94be1551a1a082 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 10:33:56 +0000 Subject: [PATCH 80/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index b6912f00..35bd4d4d 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-cc3b99b5f4813e4b74e7de47b174dfbab213557e3c352e583ddd2363d6c8827a.yml -openapi_spec_hash: 5bbc910cb58ce30a4e43bab3d83dd935 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-1024cadeb71ef8ac44c10d992eb11f636a0c3a6bb18ccbd86832772c65aa4fdb.yml +openapi_spec_hash: a3b029c7d2fad40f8b0ef8839931e1ad config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From af2e1616db65336782cb992c09410504c071deea Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 12:34:31 +0000 Subject: [PATCH 81/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 35bd4d4d..69deb1aa 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-1024cadeb71ef8ac44c10d992eb11f636a0c3a6bb18ccbd86832772c65aa4fdb.yml -openapi_spec_hash: a3b029c7d2fad40f8b0ef8839931e1ad +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d3d528a1d47d9bd1d77007dda2a42b2feaa9d47232883e524d490bd1ff91cdde.yml +openapi_spec_hash: e4a6cadf63e64e42559a5930ab73cd18 config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From bb598f828210a34f5087be669a2cdaeda2f6cad7 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:44:39 +0000 Subject: [PATCH 82/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 69deb1aa..49613338 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d3d528a1d47d9bd1d77007dda2a42b2feaa9d47232883e524d490bd1ff91cdde.yml -openapi_spec_hash: e4a6cadf63e64e42559a5930ab73cd18 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-5daa7aba4955d650e6fe95b5c241da24d43d45be8a010203a5a24821652e7034.yml +openapi_spec_hash: 95b491e2e886fd53b7f95867d3351a98 config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From e3d498fdbfb17255bc338070d21a06e59335cd78 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 16:40:08 +0000 Subject: [PATCH 83/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 49613338..5cb4a27f 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-5daa7aba4955d650e6fe95b5c241da24d43d45be8a010203a5a24821652e7034.yml -openapi_spec_hash: 95b491e2e886fd53b7f95867d3351a98 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-6c45a7439b5f40be5fea8cb9144b0e535b210e4ada2a7cae38d947cee85f5287.yml +openapi_spec_hash: 0845fb4b2ff4015752a9a78b959e8d3a config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From 32a4dfc3970cde37664d8c6fe7d3db16d665a3d9 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 18:30:27 +0000 Subject: [PATCH 84/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 5cb4a27f..f28ae91c 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-6c45a7439b5f40be5fea8cb9144b0e535b210e4ada2a7cae38d947cee85f5287.yml -openapi_spec_hash: 0845fb4b2ff4015752a9a78b959e8d3a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-7748cc360dec6d08e01465034c43ea86389254dbe40dce001e7b8e707c39f5c6.yml +openapi_spec_hash: 9748fb594930c82cf4fd712fd45c225c config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From bb45e4c9a89861acb3d44fcf2efbfa1b570533c1 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 20:25:35 +0000 Subject: [PATCH 85/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index f28ae91c..4af44526 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-7748cc360dec6d08e01465034c43ea86389254dbe40dce001e7b8e707c39f5c6.yml -openapi_spec_hash: 9748fb594930c82cf4fd712fd45c225c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-798da4b59f49c74bfb427728d1e4a550c71920a215b7dc7511f58f625cc567f8.yml +openapi_spec_hash: 7f6a586736f6ab632509169db54fcab4 config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From 1ace6a1dfa4d4cacb59e959961bd9aca13da0aeb Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 9 Apr 2026 22:22:10 +0000 Subject: [PATCH 86/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 4af44526..ea0e4a08 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-798da4b59f49c74bfb427728d1e4a550c71920a215b7dc7511f58f625cc567f8.yml -openapi_spec_hash: 7f6a586736f6ab632509169db54fcab4 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-4b79306201c4fca1eed11a48c461881a71480341b5739ef5c2ca997aaf80959e.yml +openapi_spec_hash: 81f9d5f159fcf311e2d118b4cedcd5e3 config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From bc5738ade0e8c6d56b92ab4b02679d2f96b9dd96 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 00:48:32 +0000 Subject: [PATCH 87/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index ea0e4a08..45023496 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-4b79306201c4fca1eed11a48c461881a71480341b5739ef5c2ca997aaf80959e.yml -openapi_spec_hash: 81f9d5f159fcf311e2d118b4cedcd5e3 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d8c81ca09a1630e7818bc1953df85e86376b0fc7ed0c3492a4e0e2e9c24eb48d.yml +openapi_spec_hash: 63f3f86b9b3718278999cf225dc22fd4 config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From 1a6ea64d75de8fa2ae55131b30efa263b632f91c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 03:15:18 +0000 Subject: [PATCH 88/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 45023496..52d6be9c 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d8c81ca09a1630e7818bc1953df85e86376b0fc7ed0c3492a4e0e2e9c24eb48d.yml -openapi_spec_hash: 63f3f86b9b3718278999cf225dc22fd4 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-6df426a294bf4ce7baa071320ecf772e2e372a7873a79a603dcae1a08d33e250.yml +openapi_spec_hash: d53b904cb2459d565d00e6cb565a142d config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From ee15866c5a20e01d0e1c6d6bf9e97f5893240c5d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 05:06:59 +0000 Subject: [PATCH 89/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 52d6be9c..2cb326c0 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-6df426a294bf4ce7baa071320ecf772e2e372a7873a79a603dcae1a08d33e250.yml -openapi_spec_hash: d53b904cb2459d565d00e6cb565a142d +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-116f2531a66622ebe27b365b48059ee01e6f933d05b32d25514e7ea55504167b.yml +openapi_spec_hash: e180b0363c2154557489d2fb67c4549d config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From 0c735be35cd9de507973b642f8d26a0737ea6d18 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 06:48:33 +0000 Subject: [PATCH 90/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 2cb326c0..92e8f342 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-116f2531a66622ebe27b365b48059ee01e6f933d05b32d25514e7ea55504167b.yml -openapi_spec_hash: e180b0363c2154557489d2fb67c4549d +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-1b7795f04d1ddbb27a387c7c9570bdaa4df4f876b52a0b2b11a6f0670e6776d8.yml +openapi_spec_hash: 3a4f1035d9b7034fa1b363d5d61ab6c7 config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From 50854fdb902823e9853db9a5f6d719b021972542 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 08:42:16 +0000 Subject: [PATCH 91/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 92e8f342..56a826a7 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-1b7795f04d1ddbb27a387c7c9570bdaa4df4f876b52a0b2b11a6f0670e6776d8.yml -openapi_spec_hash: 3a4f1035d9b7034fa1b363d5d61ab6c7 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-fed7bcc48620cc9e6978ff32640cf6f44c39bd9f8fa782266a7b25a16b21cd9c.yml +openapi_spec_hash: 33f2f372425c78916fb2ebccf12d7258 config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From b93df0dc7a96f1a2257fc439738704fc9145242e Mon Sep 17 00:00:00 2001 From: Pedro Oliveira <8281907+pedrodeoliveira@users.noreply.github.com> Date: Fri, 10 Apr 2026 09:46:54 +0100 Subject: [PATCH 92/96] fix(cloud): align polling methods with underlying base method - Make `name` a required parameter for load balancer creation instead of optional, and remove the unused `name_template` parameter. - Remove `"any"` from the allowed `protocol` values in security group rule creation. --- .../resources/cloud/load_balancers/load_balancers.py | 8 ++------ src/gcore/resources/cloud/security_groups/rules.py | 2 -- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/gcore/resources/cloud/load_balancers/load_balancers.py b/src/gcore/resources/cloud/load_balancers/load_balancers.py index c9957907..7ca62e45 100644 --- a/src/gcore/resources/cloud/load_balancers/load_balancers.py +++ b/src/gcore/resources/cloud/load_balancers/load_balancers.py @@ -463,8 +463,7 @@ def create_and_poll( floating_ip: load_balancer_create_params.FloatingIP | Omit = omit, listeners: Iterable[load_balancer_create_params.Listener] | Omit = omit, logging: load_balancer_create_params.Logging | Omit = omit, - name: str | Omit = omit, - name_template: str | Omit = omit, + name: str, preferred_connectivity: LoadBalancerMemberConnectivity | Omit = omit, tags: Dict[str, str] | Omit = omit, vip_ip_family: InterfaceIPFamily | Omit = omit, @@ -488,7 +487,6 @@ def create_and_poll( listeners=listeners, logging=logging, name=name, - name_template=name_template, preferred_connectivity=preferred_connectivity, tags=tags, vip_ip_family=vip_ip_family, @@ -1249,8 +1247,7 @@ async def create_and_poll( floating_ip: load_balancer_create_params.FloatingIP | Omit = omit, listeners: Iterable[load_balancer_create_params.Listener] | Omit = omit, logging: load_balancer_create_params.Logging | Omit = omit, - name: str | Omit = omit, - name_template: str | Omit = omit, + name: str, preferred_connectivity: LoadBalancerMemberConnectivity | Omit = omit, tags: Dict[str, str] | Omit = omit, vip_ip_family: InterfaceIPFamily | Omit = omit, @@ -1274,7 +1271,6 @@ async def create_and_poll( listeners=listeners, logging=logging, name=name, - name_template=name_template, preferred_connectivity=preferred_connectivity, tags=tags, vip_ip_family=vip_ip_family, diff --git a/src/gcore/resources/cloud/security_groups/rules.py b/src/gcore/resources/cloud/security_groups/rules.py index 8260bd42..061c4274 100644 --- a/src/gcore/resources/cloud/security_groups/rules.py +++ b/src/gcore/resources/cloud/security_groups/rules.py @@ -362,7 +362,6 @@ def create_and_poll( port_range_min: Optional[int] | Omit = omit, protocol: Literal[ "ah", - "any", "dccp", "egp", "esp", @@ -824,7 +823,6 @@ async def create_and_poll( port_range_min: Optional[int] | Omit = omit, protocol: Literal[ "ah", - "any", "dccp", "egp", "esp", From bf1cf508e78bb34ae2ceb7ecddeae26bb8e1dea1 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 10:30:51 +0000 Subject: [PATCH 93/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 56a826a7..29b8b1a6 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-fed7bcc48620cc9e6978ff32640cf6f44c39bd9f8fa782266a7b25a16b21cd9c.yml -openapi_spec_hash: 33f2f372425c78916fb2ebccf12d7258 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-6fd6d913c1185759e3581e135931b18851ac26e1b8b997c736033a512d167e5d.yml +openapi_spec_hash: 3f921cca7ecc822db9676c8932dbacac config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From 745e2e7b2772ec275c0af4389ef5874348e69610 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 12:27:12 +0000 Subject: [PATCH 94/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 29b8b1a6..9557c248 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-6fd6d913c1185759e3581e135931b18851ac26e1b8b997c736033a512d167e5d.yml -openapi_spec_hash: 3f921cca7ecc822db9676c8932dbacac +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-7e200a1ebf4ba5268659655ce77c82a5c74f28d87563469acb60bfe208042f53.yml +openapi_spec_hash: 445331a6c14319ed68cbf67b32dab6c3 config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From f7ffb48d8d8f85910dcbca9c8a9dc1f416589ddf Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 14:31:36 +0000 Subject: [PATCH 95/96] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 9557c248..ae2801ee 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 658 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-7e200a1ebf4ba5268659655ce77c82a5c74f28d87563469acb60bfe208042f53.yml -openapi_spec_hash: 445331a6c14319ed68cbf67b32dab6c3 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d6f6e6fa35eeb87838cb48bbf25e1a1f64d3bed1479f49668bb30c4c0f8c3c04.yml +openapi_spec_hash: 6f5bbc1227d778081eeaef37c7327349 config_hash: 7b7ec6618b7e15be0feb6d5c053c145e From 36e4ec2cc116e2351bb2e513a2feb917faff94c0 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 14:32:23 +0000 Subject: [PATCH 96/96] release: 0.42.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 25 +++++++++++++++++++++++++ pyproject.toml | 2 +- src/gcore/_version.py | 2 +- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index ea2682c3..52afe059 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.41.0" + ".": "0.42.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index cc98f8e3..e7bab3bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,30 @@ # Changelog +## 0.42.0 (2026-04-10) + +Full Changelog: [v0.41.0...v0.42.0](https://github.com/G-Core/gcore-python/compare/v0.41.0...v0.42.0) + +### Features + +* **api:** aggregated API specs update ([295e5d3](https://github.com/G-Core/gcore-python/commit/295e5d3552cc864bfdc57318defbf5ab7183cfbb)) +* **api:** aggregated API specs update ([6bab3d6](https://github.com/G-Core/gcore-python/commit/6bab3d65d59f4764bead81dc17108f392acac1bc)) +* **api:** aggregated API specs update ([f263699](https://github.com/G-Core/gcore-python/commit/f26369916ffd96331d9dd541caab4fffc25c3575)) +* **api:** aggregated API specs update ([124c704](https://github.com/G-Core/gcore-python/commit/124c7043ff615b4548efbd7b92446f749cfadfc3)) +* **api:** fix(cdn): harmonize pagination across CDN list endpoints ([141a927](https://github.com/G-Core/gcore-python/commit/141a927d1717eedcbe636db85e76a4d6432e40a1)) + + +### Bug Fixes + +* **client:** preserve hardcoded query params when merging with user params ([ecc43d5](https://github.com/G-Core/gcore-python/commit/ecc43d55ef651e1ae5e86d19b37ad4e4850fdcc6)) +* **cloud:** align polling methods with underlying base method ([b93df0d](https://github.com/G-Core/gcore-python/commit/b93df0dc7a96f1a2257fc439738704fc9145242e)) +* **dns:** update network-mappings get_by_name to new endpoint path ([3f4d832](https://github.com/G-Core/gcore-python/commit/3f4d832f936e3aa22f6e781b5903759b07719716)) +* **examples:** update baremetal image examples to use BaremetalImage type ([2f9b739](https://github.com/G-Core/gcore-python/commit/2f9b73994870d080324cf9443c99814d422ad563)) + + +### Refactors + +* **cloud:** split instance and baremetal image models ([598edae](https://github.com/G-Core/gcore-python/commit/598edae2f2154634632a862014b550fb1f80977e)) + ## 0.41.0 (2026-04-03) Full Changelog: [v0.40.0...v0.41.0](https://github.com/G-Core/gcore-python/compare/v0.40.0...v0.41.0) diff --git a/pyproject.toml b/pyproject.toml index 5f2b6b35..5002951b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "gcore" -version = "0.41.0" +version = "0.42.0" description = "The official Python library for the gcore API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/gcore/_version.py b/src/gcore/_version.py index 139c4ad2..b88cfcf0 100644 --- a/src/gcore/_version.py +++ b/src/gcore/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "gcore" -__version__ = "0.41.0" # x-release-please-version +__version__ = "0.42.0" # x-release-please-version