aioovh 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. aioovh-0.1.0/.github/workflows/pull-request.yml +68 -0
  2. aioovh-0.1.0/.github/workflows/release.yml +59 -0
  3. aioovh-0.1.0/.gitignore +23 -0
  4. aioovh-0.1.0/.python-version +1 -0
  5. aioovh-0.1.0/CHANGELOG.md +35 -0
  6. aioovh-0.1.0/CITATION.cff +27 -0
  7. aioovh-0.1.0/CONTRIBUTING.md +116 -0
  8. aioovh-0.1.0/LICENSE +21 -0
  9. aioovh-0.1.0/PKG-INFO +188 -0
  10. aioovh-0.1.0/README.md +153 -0
  11. aioovh-0.1.0/mapping.yaml +196 -0
  12. aioovh-0.1.0/pyproject.toml +94 -0
  13. aioovh-0.1.0/scripts/fetch_specs.py +37 -0
  14. aioovh-0.1.0/scripts/generate.py +28 -0
  15. aioovh-0.1.0/scripts/objects.py +1219 -0
  16. aioovh-0.1.0/scripts/operations.py +635 -0
  17. aioovh-0.1.0/scripts/release.sh +74 -0
  18. aioovh-0.1.0/scripts/roll_changelog.py +87 -0
  19. aioovh-0.1.0/src/aioovh/__init__.py +49 -0
  20. aioovh-0.1.0/src/aioovh/_client.py +402 -0
  21. aioovh-0.1.0/src/aioovh/_endpoints.py +25 -0
  22. aioovh-0.1.0/src/aioovh/_enums.py +15 -0
  23. aioovh-0.1.0/src/aioovh/_errors.py +127 -0
  24. aioovh-0.1.0/src/aioovh/_models.py +17 -0
  25. aioovh-0.1.0/src/aioovh/_namespaces.py +158 -0
  26. aioovh-0.1.0/src/aioovh/_objects.py +168 -0
  27. aioovh-0.1.0/src/aioovh/_operations/__init__.py +1 -0
  28. aioovh-0.1.0/src/aioovh/_operations/v1/__init__.py +1 -0
  29. aioovh-0.1.0/src/aioovh/_operations/v1/all_dom/__init__.py +34 -0
  30. aioovh-0.1.0/src/aioovh/_operations/v1/all_dom/api.py +149 -0
  31. aioovh-0.1.0/src/aioovh/_operations/v1/all_dom/models.py +244 -0
  32. aioovh-0.1.0/src/aioovh/_operations/v1/auth/__init__.py +74 -0
  33. aioovh-0.1.0/src/aioovh/_operations/v1/auth/api.py +93 -0
  34. aioovh-0.1.0/src/aioovh/_operations/v1/auth/models.py +747 -0
  35. aioovh-0.1.0/src/aioovh/_operations/v1/cdn_dedicated/__init__.py +82 -0
  36. aioovh-0.1.0/src/aioovh/_operations/v1/cdn_dedicated/api.py +1144 -0
  37. aioovh-0.1.0/src/aioovh/_operations/v1/cdn_dedicated/models.py +610 -0
  38. aioovh-0.1.0/src/aioovh/_operations/v1/cloud/__init__.py +1782 -0
  39. aioovh-0.1.0/src/aioovh/_operations/v1/cloud/api.py +27226 -0
  40. aioovh-0.1.0/src/aioovh/_operations/v1/cloud/models.py +21959 -0
  41. aioovh-0.1.0/src/aioovh/_operations/v1/cluster_hadoop/__init__.py +68 -0
  42. aioovh-0.1.0/src/aioovh/_operations/v1/cluster_hadoop/api.py +1071 -0
  43. aioovh-0.1.0/src/aioovh/_operations/v1/cluster_hadoop/models.py +559 -0
  44. aioovh-0.1.0/src/aioovh/_operations/v1/connectivity/__init__.py +148 -0
  45. aioovh-0.1.0/src/aioovh/_operations/v1/connectivity/api.py +618 -0
  46. aioovh-0.1.0/src/aioovh/_operations/v1/connectivity/models.py +1637 -0
  47. aioovh-0.1.0/src/aioovh/_operations/v1/contact/__init__.py +14 -0
  48. aioovh-0.1.0/src/aioovh/_operations/v1/contact/api.py +50 -0
  49. aioovh-0.1.0/src/aioovh/_operations/v1/contact/models.py +53 -0
  50. aioovh-0.1.0/src/aioovh/_operations/v1/dbaas_logs/__init__.py +228 -0
  51. aioovh-0.1.0/src/aioovh/_operations/v1/dbaas_logs/api.py +3125 -0
  52. aioovh-0.1.0/src/aioovh/_operations/v1/dbaas_logs/models.py +2921 -0
  53. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_ceph/__init__.py +98 -0
  54. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_ceph/api.py +872 -0
  55. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_ceph/models.py +938 -0
  56. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_cloud/__init__.py +442 -0
  57. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_cloud/api.py +8577 -0
  58. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_cloud/models.py +5578 -0
  59. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_cluster/__init__.py +50 -0
  60. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_cluster/api.py +280 -0
  61. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_cluster/models.py +502 -0
  62. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_housing/__init__.py +70 -0
  63. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_housing/api.py +447 -0
  64. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_housing/models.py +667 -0
  65. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_installation_template/__init__.py +54 -0
  66. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_installation_template/api.py +229 -0
  67. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_installation_template/models.py +921 -0
  68. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_nasha/__init__.py +76 -0
  69. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_nasha/api.py +1094 -0
  70. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_nasha/models.py +660 -0
  71. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_server/__init__.py +406 -0
  72. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_server/api.py +3434 -0
  73. aioovh-0.1.0/src/aioovh/_operations/v1/dedicated_server/models.py +5721 -0
  74. aioovh-0.1.0/src/aioovh/_operations/v1/domain/__init__.py +322 -0
  75. aioovh-0.1.0/src/aioovh/_operations/v1/domain/api.py +2587 -0
  76. aioovh-0.1.0/src/aioovh/_operations/v1/domain/models.py +3886 -0
  77. aioovh-0.1.0/src/aioovh/_operations/v1/email_domain/__init__.py +132 -0
  78. aioovh-0.1.0/src/aioovh/_operations/v1/email_domain/api.py +2845 -0
  79. aioovh-0.1.0/src/aioovh/_operations/v1/email_domain/models.py +1307 -0
  80. aioovh-0.1.0/src/aioovh/_operations/v1/email_exchange/__init__.py +210 -0
  81. aioovh-0.1.0/src/aioovh/_operations/v1/email_exchange/api.py +7063 -0
  82. aioovh-0.1.0/src/aioovh/_operations/v1/email_exchange/models.py +3447 -0
  83. aioovh-0.1.0/src/aioovh/_operations/v1/email_mxplan/__init__.py +66 -0
  84. aioovh-0.1.0/src/aioovh/_operations/v1/email_mxplan/api.py +1233 -0
  85. aioovh-0.1.0/src/aioovh/_operations/v1/email_mxplan/models.py +951 -0
  86. aioovh-0.1.0/src/aioovh/_operations/v1/email_pro/__init__.py +100 -0
  87. aioovh-0.1.0/src/aioovh/_operations/v1/email_pro/api.py +1671 -0
  88. aioovh-0.1.0/src/aioovh/_operations/v1/email_pro/models.py +1631 -0
  89. aioovh-0.1.0/src/aioovh/_operations/v1/freefax/__init__.py +70 -0
  90. aioovh-0.1.0/src/aioovh/_operations/v1/freefax/api.py +436 -0
  91. aioovh-0.1.0/src/aioovh/_operations/v1/freefax/models.py +603 -0
  92. aioovh-0.1.0/src/aioovh/_operations/v1/horizon_view/__init__.py +58 -0
  93. aioovh-0.1.0/src/aioovh/_operations/v1/horizon_view/api.py +1181 -0
  94. aioovh-0.1.0/src/aioovh/_operations/v1/horizon_view/models.py +588 -0
  95. aioovh-0.1.0/src/aioovh/_operations/v1/hosting_private_database/__init__.py +182 -0
  96. aioovh-0.1.0/src/aioovh/_operations/v1/hosting_private_database/api.py +1872 -0
  97. aioovh-0.1.0/src/aioovh/_operations/v1/hosting_private_database/models.py +1805 -0
  98. aioovh-0.1.0/src/aioovh/_operations/v1/hosting_web/__init__.py +476 -0
  99. aioovh-0.1.0/src/aioovh/_operations/v1/hosting_web/api.py +5366 -0
  100. aioovh-0.1.0/src/aioovh/_operations/v1/hosting_web/models.py +5563 -0
  101. aioovh-0.1.0/src/aioovh/_operations/v1/ip/__init__.py +140 -0
  102. aioovh-0.1.0/src/aioovh/_operations/v1/ip/api.py +1830 -0
  103. aioovh-0.1.0/src/aioovh/_operations/v1/ip/models.py +1656 -0
  104. aioovh-0.1.0/src/aioovh/_operations/v1/ip_loadbalancing/__init__.py +168 -0
  105. aioovh-0.1.0/src/aioovh/_operations/v1/ip_loadbalancing/api.py +3620 -0
  106. aioovh-0.1.0/src/aioovh/_operations/v1/ip_loadbalancing/models.py +2055 -0
  107. aioovh-0.1.0/src/aioovh/_operations/v1/license_cloud_linux/__init__.py +48 -0
  108. aioovh-0.1.0/src/aioovh/_operations/v1/license_cloud_linux/api.py +236 -0
  109. aioovh-0.1.0/src/aioovh/_operations/v1/license_cloud_linux/models.py +393 -0
  110. aioovh-0.1.0/src/aioovh/_operations/v1/license_cpanel/__init__.py +54 -0
  111. aioovh-0.1.0/src/aioovh/_operations/v1/license_cpanel/api.py +331 -0
  112. aioovh-0.1.0/src/aioovh/_operations/v1/license_cpanel/models.py +1475 -0
  113. aioovh-0.1.0/src/aioovh/_operations/v1/license_directadmin/__init__.py +56 -0
  114. aioovh-0.1.0/src/aioovh/_operations/v1/license_directadmin/api.py +359 -0
  115. aioovh-0.1.0/src/aioovh/_operations/v1/license_directadmin/models.py +476 -0
  116. aioovh-0.1.0/src/aioovh/_operations/v1/license_hycu/__init__.py +46 -0
  117. aioovh-0.1.0/src/aioovh/_operations/v1/license_hycu/api.py +274 -0
  118. aioovh-0.1.0/src/aioovh/_operations/v1/license_hycu/models.py +388 -0
  119. aioovh-0.1.0/src/aioovh/_operations/v1/license_office/__init__.py +86 -0
  120. aioovh-0.1.0/src/aioovh/_operations/v1/license_office/api.py +433 -0
  121. aioovh-0.1.0/src/aioovh/_operations/v1/license_office/models.py +1668 -0
  122. aioovh-0.1.0/src/aioovh/_operations/v1/license_office_prepaid/__init__.py +90 -0
  123. aioovh-0.1.0/src/aioovh/_operations/v1/license_office_prepaid/api.py +439 -0
  124. aioovh-0.1.0/src/aioovh/_operations/v1/license_office_prepaid/models.py +1680 -0
  125. aioovh-0.1.0/src/aioovh/_operations/v1/license_plesk/__init__.py +68 -0
  126. aioovh-0.1.0/src/aioovh/_operations/v1/license_plesk/api.py +404 -0
  127. aioovh-0.1.0/src/aioovh/_operations/v1/license_plesk/models.py +693 -0
  128. aioovh-0.1.0/src/aioovh/_operations/v1/license_redhat/__init__.py +42 -0
  129. aioovh-0.1.0/src/aioovh/_operations/v1/license_redhat/api.py +258 -0
  130. aioovh-0.1.0/src/aioovh/_operations/v1/license_redhat/models.py +360 -0
  131. aioovh-0.1.0/src/aioovh/_operations/v1/license_sqlserver/__init__.py +48 -0
  132. aioovh-0.1.0/src/aioovh/_operations/v1/license_sqlserver/api.py +236 -0
  133. aioovh-0.1.0/src/aioovh/_operations/v1/license_sqlserver/models.py +2547 -0
  134. aioovh-0.1.0/src/aioovh/_operations/v1/license_virtuozzo/__init__.py +64 -0
  135. aioovh-0.1.0/src/aioovh/_operations/v1/license_virtuozzo/api.py +409 -0
  136. aioovh-0.1.0/src/aioovh/_operations/v1/license_virtuozzo/models.py +547 -0
  137. aioovh-0.1.0/src/aioovh/_operations/v1/license_windows/__init__.py +54 -0
  138. aioovh-0.1.0/src/aioovh/_operations/v1/license_windows/api.py +359 -0
  139. aioovh-0.1.0/src/aioovh/_operations/v1/license_windows/models.py +2238 -0
  140. aioovh-0.1.0/src/aioovh/_operations/v1/license_worklight/__init__.py +52 -0
  141. aioovh-0.1.0/src/aioovh/_operations/v1/license_worklight/api.py +333 -0
  142. aioovh-0.1.0/src/aioovh/_operations/v1/license_worklight/models.py +430 -0
  143. aioovh-0.1.0/src/aioovh/_operations/v1/me/__init__.py +762 -0
  144. aioovh-0.1.0/src/aioovh/_operations/v1/me/api.py +7580 -0
  145. aioovh-0.1.0/src/aioovh/_operations/v1/me/models.py +8830 -0
  146. aioovh-0.1.0/src/aioovh/_operations/v1/metrics/__init__.py +62 -0
  147. aioovh-0.1.0/src/aioovh/_operations/v1/metrics/api.py +427 -0
  148. aioovh-0.1.0/src/aioovh/_operations/v1/metrics/models.py +546 -0
  149. aioovh-0.1.0/src/aioovh/_operations/v1/ms_services/__init__.py +98 -0
  150. aioovh-0.1.0/src/aioovh/_operations/v1/ms_services/api.py +1424 -0
  151. aioovh-0.1.0/src/aioovh/_operations/v1/ms_services/models.py +1413 -0
  152. aioovh-0.1.0/src/aioovh/_operations/v1/new_account/__init__.py +32 -0
  153. aioovh-0.1.0/src/aioovh/_operations/v1/new_account/api.py +289 -0
  154. aioovh-0.1.0/src/aioovh/_operations/v1/new_account/models.py +485 -0
  155. aioovh-0.1.0/src/aioovh/_operations/v1/nutanix/__init__.py +86 -0
  156. aioovh-0.1.0/src/aioovh/_operations/v1/nutanix/api.py +496 -0
  157. aioovh-0.1.0/src/aioovh/_operations/v1/nutanix/models.py +970 -0
  158. aioovh-0.1.0/src/aioovh/_operations/v1/order/__init__.py +608 -0
  159. aioovh-0.1.0/src/aioovh/_operations/v1/order/api.py +22436 -0
  160. aioovh-0.1.0/src/aioovh/_operations/v1/order/models.py +12173 -0
  161. aioovh-0.1.0/src/aioovh/_operations/v1/over_the_box/__init__.py +152 -0
  162. aioovh-0.1.0/src/aioovh/_operations/v1/over_the_box/api.py +1462 -0
  163. aioovh-0.1.0/src/aioovh/_operations/v1/over_the_box/models.py +1630 -0
  164. aioovh-0.1.0/src/aioovh/_operations/v1/ovh_cloud_connect/__init__.py +154 -0
  165. aioovh-0.1.0/src/aioovh/_operations/v1/ovh_cloud_connect/api.py +1479 -0
  166. aioovh-0.1.0/src/aioovh/_operations/v1/ovh_cloud_connect/models.py +1547 -0
  167. aioovh-0.1.0/src/aioovh/_operations/v1/pack_siptrunk/__init__.py +28 -0
  168. aioovh-0.1.0/src/aioovh/_operations/v1/pack_siptrunk/api.py +131 -0
  169. aioovh-0.1.0/src/aioovh/_operations/v1/pack_siptrunk/models.py +193 -0
  170. aioovh-0.1.0/src/aioovh/_operations/v1/pack_xdsl/__init__.py +152 -0
  171. aioovh-0.1.0/src/aioovh/_operations/v1/pack_xdsl/api.py +1570 -0
  172. aioovh-0.1.0/src/aioovh/_operations/v1/pack_xdsl/models.py +1794 -0
  173. aioovh-0.1.0/src/aioovh/_operations/v1/partner/__init__.py +28 -0
  174. aioovh-0.1.0/src/aioovh/_operations/v1/partner/api.py +42 -0
  175. aioovh-0.1.0/src/aioovh/_operations/v1/partner/models.py +521 -0
  176. aioovh-0.1.0/src/aioovh/_operations/v1/price/__init__.py +1186 -0
  177. aioovh-0.1.0/src/aioovh/_operations/v1/price/api.py +14827 -0
  178. aioovh-0.1.0/src/aioovh/_operations/v1/price/models.py +10269 -0
  179. aioovh-0.1.0/src/aioovh/_operations/v1/products/__init__.py +206 -0
  180. aioovh-0.1.0/src/aioovh/_operations/v1/products/models.py +2597 -0
  181. aioovh-0.1.0/src/aioovh/_operations/v1/saas_csp2/__init__.py +56 -0
  182. aioovh-0.1.0/src/aioovh/_operations/v1/saas_csp2/api.py +509 -0
  183. aioovh-0.1.0/src/aioovh/_operations/v1/saas_csp2/models.py +563 -0
  184. aioovh-0.1.0/src/aioovh/_operations/v1/secret/__init__.py +10 -0
  185. aioovh-0.1.0/src/aioovh/_operations/v1/secret/api.py +34 -0
  186. aioovh-0.1.0/src/aioovh/_operations/v1/secret/models.py +25 -0
  187. aioovh-0.1.0/src/aioovh/_operations/v1/service/__init__.py +50 -0
  188. aioovh-0.1.0/src/aioovh/_operations/v1/service/api.py +189 -0
  189. aioovh-0.1.0/src/aioovh/_operations/v1/service/models.py +441 -0
  190. aioovh-0.1.0/src/aioovh/_operations/v1/services/__init__.py +262 -0
  191. aioovh-0.1.0/src/aioovh/_operations/v1/services/api.py +1306 -0
  192. aioovh-0.1.0/src/aioovh/_operations/v1/services/models.py +2686 -0
  193. aioovh-0.1.0/src/aioovh/_operations/v1/sms/__init__.py +190 -0
  194. aioovh-0.1.0/src/aioovh/_operations/v1/sms/api.py +3469 -0
  195. aioovh-0.1.0/src/aioovh/_operations/v1/sms/models.py +1979 -0
  196. aioovh-0.1.0/src/aioovh/_operations/v1/ssl/__init__.py +40 -0
  197. aioovh-0.1.0/src/aioovh/_operations/v1/ssl/api.py +143 -0
  198. aioovh-0.1.0/src/aioovh/_operations/v1/ssl/models.py +361 -0
  199. aioovh-0.1.0/src/aioovh/_operations/v1/ssl_gateway/__init__.py +58 -0
  200. aioovh-0.1.0/src/aioovh/_operations/v1/ssl_gateway/api.py +607 -0
  201. aioovh-0.1.0/src/aioovh/_operations/v1/ssl_gateway/models.py +560 -0
  202. aioovh-0.1.0/src/aioovh/_operations/v1/stack_mis/__init__.py +30 -0
  203. aioovh-0.1.0/src/aioovh/_operations/v1/stack_mis/api.py +99 -0
  204. aioovh-0.1.0/src/aioovh/_operations/v1/stack_mis/models.py +211 -0
  205. aioovh-0.1.0/src/aioovh/_operations/v1/startup/__init__.py +42 -0
  206. aioovh-0.1.0/src/aioovh/_operations/v1/startup/api.py +42 -0
  207. aioovh-0.1.0/src/aioovh/_operations/v1/startup/models.py +653 -0
  208. aioovh-0.1.0/src/aioovh/_operations/v1/storage/__init__.py +130 -0
  209. aioovh-0.1.0/src/aioovh/_operations/v1/storage/api.py +1283 -0
  210. aioovh-0.1.0/src/aioovh/_operations/v1/storage/models.py +1196 -0
  211. aioovh-0.1.0/src/aioovh/_operations/v1/supply_mondial_relay/__init__.py +24 -0
  212. aioovh-0.1.0/src/aioovh/_operations/v1/supply_mondial_relay/api.py +48 -0
  213. aioovh-0.1.0/src/aioovh/_operations/v1/supply_mondial_relay/models.py +454 -0
  214. aioovh-0.1.0/src/aioovh/_operations/v1/support/__init__.py +28 -0
  215. aioovh-0.1.0/src/aioovh/_operations/v1/support/api.py +288 -0
  216. aioovh-0.1.0/src/aioovh/_operations/v1/support/models.py +231 -0
  217. aioovh-0.1.0/src/aioovh/_operations/v1/telephony/__init__.py +596 -0
  218. aioovh-0.1.0/src/aioovh/_operations/v1/telephony/api.py +16610 -0
  219. aioovh-0.1.0/src/aioovh/_operations/v1/telephony/models.py +6289 -0
  220. aioovh-0.1.0/src/aioovh/_operations/v1/veeam_cloud_connect/__init__.py +46 -0
  221. aioovh-0.1.0/src/aioovh/_operations/v1/veeam_cloud_connect/api.py +347 -0
  222. aioovh-0.1.0/src/aioovh/_operations/v1/veeam_cloud_connect/models.py +393 -0
  223. aioovh-0.1.0/src/aioovh/_operations/v1/veeam_veeam_enterprise/__init__.py +38 -0
  224. aioovh-0.1.0/src/aioovh/_operations/v1/veeam_veeam_enterprise/api.py +295 -0
  225. aioovh-0.1.0/src/aioovh/_operations/v1/veeam_veeam_enterprise/models.py +317 -0
  226. aioovh-0.1.0/src/aioovh/_operations/v1/vip/__init__.py +30 -0
  227. aioovh-0.1.0/src/aioovh/_operations/v1/vip/api.py +98 -0
  228. aioovh-0.1.0/src/aioovh/_operations/v1/vip/models.py +212 -0
  229. aioovh-0.1.0/src/aioovh/_operations/v1/vps/__init__.py +230 -0
  230. aioovh-0.1.0/src/aioovh/_operations/v1/vps/api.py +2131 -0
  231. aioovh-0.1.0/src/aioovh/_operations/v1/vps/models.py +2406 -0
  232. aioovh-0.1.0/src/aioovh/_operations/v1/vrack/__init__.py +102 -0
  233. aioovh-0.1.0/src/aioovh/_operations/v1/vrack/api.py +1952 -0
  234. aioovh-0.1.0/src/aioovh/_operations/v1/vrack/models.py +895 -0
  235. aioovh-0.1.0/src/aioovh/_operations/v1/xdsl/__init__.py +412 -0
  236. aioovh-0.1.0/src/aioovh/_operations/v1/xdsl/api.py +3351 -0
  237. aioovh-0.1.0/src/aioovh/_operations/v1/xdsl/models.py +4832 -0
  238. aioovh-0.1.0/src/aioovh/_operations/v2/__init__.py +1 -0
  239. aioovh-0.1.0/src/aioovh/_operations/v2/account/__init__.py +16 -0
  240. aioovh-0.1.0/src/aioovh/_operations/v2/account/api.py +50 -0
  241. aioovh-0.1.0/src/aioovh/_operations/v2/account/models.py +69 -0
  242. aioovh-0.1.0/src/aioovh/_operations/v2/backup_services/__init__.py +134 -0
  243. aioovh-0.1.0/src/aioovh/_operations/v2/backup_services/api.py +1590 -0
  244. aioovh-0.1.0/src/aioovh/_operations/v2/backup_services/models.py +1633 -0
  245. aioovh-0.1.0/src/aioovh/_operations/v2/commercial_catalog/__init__.py +90 -0
  246. aioovh-0.1.0/src/aioovh/_operations/v2/commercial_catalog/api.py +148 -0
  247. aioovh-0.1.0/src/aioovh/_operations/v2/commercial_catalog/models.py +895 -0
  248. aioovh-0.1.0/src/aioovh/_operations/v2/dedicated_server/__init__.py +74 -0
  249. aioovh-0.1.0/src/aioovh/_operations/v2/dedicated_server/api.py +357 -0
  250. aioovh-0.1.0/src/aioovh/_operations/v2/dedicated_server/models.py +605 -0
  251. aioovh-0.1.0/src/aioovh/_operations/v2/domain/__init__.py +134 -0
  252. aioovh-0.1.0/src/aioovh/_operations/v2/domain/api.py +683 -0
  253. aioovh-0.1.0/src/aioovh/_operations/v2/domain/models.py +1485 -0
  254. aioovh-0.1.0/src/aioovh/_operations/v2/finops/__init__.py +38 -0
  255. aioovh-0.1.0/src/aioovh/_operations/v2/finops/api.py +329 -0
  256. aioovh-0.1.0/src/aioovh/_operations/v2/finops/models.py +330 -0
  257. aioovh-0.1.0/src/aioovh/_operations/v2/iam/__init__.py +86 -0
  258. aioovh-0.1.0/src/aioovh/_operations/v2/iam/api.py +1155 -0
  259. aioovh-0.1.0/src/aioovh/_operations/v2/iam/models.py +952 -0
  260. aioovh-0.1.0/src/aioovh/_operations/v2/location/__init__.py +20 -0
  261. aioovh-0.1.0/src/aioovh/_operations/v2/location/api.py +235 -0
  262. aioovh-0.1.0/src/aioovh/_operations/v2/location/models.py +169 -0
  263. aioovh-0.1.0/src/aioovh/_operations/v2/managed_cms/__init__.py +172 -0
  264. aioovh-0.1.0/src/aioovh/_operations/v2/managed_cms/api.py +1348 -0
  265. aioovh-0.1.0/src/aioovh/_operations/v2/managed_cms/models.py +1733 -0
  266. aioovh-0.1.0/src/aioovh/_operations/v2/network_defense/__init__.py +68 -0
  267. aioovh-0.1.0/src/aioovh/_operations/v2/network_defense/api.py +503 -0
  268. aioovh-0.1.0/src/aioovh/_operations/v2/network_defense/models.py +657 -0
  269. aioovh-0.1.0/src/aioovh/_operations/v2/notification/__init__.py +68 -0
  270. aioovh-0.1.0/src/aioovh/_operations/v2/notification/api.py +677 -0
  271. aioovh-0.1.0/src/aioovh/_operations/v2/notification/models.py +656 -0
  272. aioovh-0.1.0/src/aioovh/_operations/v2/okms/__init__.py +136 -0
  273. aioovh-0.1.0/src/aioovh/_operations/v2/okms/api.py +1300 -0
  274. aioovh-0.1.0/src/aioovh/_operations/v2/okms/models.py +1598 -0
  275. aioovh-0.1.0/src/aioovh/_operations/v2/public_cloud/__init__.py +1834 -0
  276. aioovh-0.1.0/src/aioovh/_operations/v2/public_cloud/api.py +27197 -0
  277. aioovh-0.1.0/src/aioovh/_operations/v2/public_cloud/models.py +22976 -0
  278. aioovh-0.1.0/src/aioovh/_operations/v2/videocenter/__init__.py +32 -0
  279. aioovh-0.1.0/src/aioovh/_operations/v2/videocenter/api.py +140 -0
  280. aioovh-0.1.0/src/aioovh/_operations/v2/videocenter/models.py +224 -0
  281. aioovh-0.1.0/src/aioovh/_operations/v2/vmware_cloud_director/__init__.py +150 -0
  282. aioovh-0.1.0/src/aioovh/_operations/v2/vmware_cloud_director/api.py +2190 -0
  283. aioovh-0.1.0/src/aioovh/_operations/v2/vmware_cloud_director/models.py +1630 -0
  284. aioovh-0.1.0/src/aioovh/_operations/v2/vrack_services/__init__.py +60 -0
  285. aioovh-0.1.0/src/aioovh/_operations/v2/vrack_services/api.py +428 -0
  286. aioovh-0.1.0/src/aioovh/_operations/v2/vrack_services/models.py +567 -0
  287. aioovh-0.1.0/src/aioovh/_operations/v2/webhosting/__init__.py +122 -0
  288. aioovh-0.1.0/src/aioovh/_operations/v2/webhosting/api.py +777 -0
  289. aioovh-0.1.0/src/aioovh/_operations/v2/webhosting/models.py +1169 -0
  290. aioovh-0.1.0/src/aioovh/_operations/v2/zimbra/__init__.py +198 -0
  291. aioovh-0.1.0/src/aioovh/_operations/v2/zimbra/api.py +1428 -0
  292. aioovh-0.1.0/src/aioovh/_operations/v2/zimbra/models.py +2159 -0
  293. aioovh-0.1.0/src/aioovh/_root.py +77 -0
  294. aioovh-0.1.0/src/aioovh/_settings.py +23 -0
  295. aioovh-0.1.0/src/aioovh/account/__init__.py +524 -0
  296. aioovh-0.1.0/src/aioovh/account/resources.py +9516 -0
  297. aioovh-0.1.0/src/aioovh/account/types.py +4812 -0
  298. aioovh-0.1.0/src/aioovh/ai/__init__.py +200 -0
  299. aioovh-0.1.0/src/aioovh/ai/resources.py +4199 -0
  300. aioovh-0.1.0/src/aioovh/ai/types.py +3596 -0
  301. aioovh-0.1.0/src/aioovh/analytics/__init__.py +396 -0
  302. aioovh-0.1.0/src/aioovh/analytics/resources.py +8897 -0
  303. aioovh-0.1.0/src/aioovh/analytics/types.py +1856 -0
  304. aioovh-0.1.0/src/aioovh/backup/__init__.py +96 -0
  305. aioovh-0.1.0/src/aioovh/backup/resources.py +1565 -0
  306. aioovh-0.1.0/src/aioovh/backup/types.py +216 -0
  307. aioovh-0.1.0/src/aioovh/billing/__init__.py +316 -0
  308. aioovh-0.1.0/src/aioovh/billing/resources.py +4917 -0
  309. aioovh-0.1.0/src/aioovh/billing/types.py +1098 -0
  310. aioovh-0.1.0/src/aioovh/compute/__init__.py +328 -0
  311. aioovh-0.1.0/src/aioovh/compute/resources.py +6852 -0
  312. aioovh-0.1.0/src/aioovh/compute/types.py +4614 -0
  313. aioovh-0.1.0/src/aioovh/databases/__init__.py +888 -0
  314. aioovh-0.1.0/src/aioovh/databases/resources.py +20879 -0
  315. aioovh-0.1.0/src/aioovh/databases/types.py +3562 -0
  316. aioovh-0.1.0/src/aioovh/domains/__init__.py +178 -0
  317. aioovh-0.1.0/src/aioovh/domains/resources.py +3101 -0
  318. aioovh-0.1.0/src/aioovh/domains/types.py +516 -0
  319. aioovh-0.1.0/src/aioovh/email/__init__.py +612 -0
  320. aioovh-0.1.0/src/aioovh/email/resources.py +13794 -0
  321. aioovh-0.1.0/src/aioovh/email/types.py +734 -0
  322. aioovh-0.1.0/src/aioovh/iam/__init__.py +252 -0
  323. aioovh-0.1.0/src/aioovh/iam/resources.py +4786 -0
  324. aioovh-0.1.0/src/aioovh/iam/types.py +4624 -0
  325. aioovh-0.1.0/src/aioovh/kubernetes/__init__.py +110 -0
  326. aioovh-0.1.0/src/aioovh/kubernetes/resources.py +2672 -0
  327. aioovh-0.1.0/src/aioovh/kubernetes/types.py +3622 -0
  328. aioovh-0.1.0/src/aioovh/licenses/__init__.py +236 -0
  329. aioovh-0.1.0/src/aioovh/licenses/resources.py +4412 -0
  330. aioovh-0.1.0/src/aioovh/licenses/types.py +1024 -0
  331. aioovh-0.1.0/src/aioovh/network/__init__.py +716 -0
  332. aioovh-0.1.0/src/aioovh/network/resources.py +13607 -0
  333. aioovh-0.1.0/src/aioovh/network/types.py +4428 -0
  334. aioovh-0.1.0/src/aioovh/observability/__init__.py +164 -0
  335. aioovh-0.1.0/src/aioovh/observability/resources.py +2765 -0
  336. aioovh-0.1.0/src/aioovh/observability/types.py +2032 -0
  337. aioovh-0.1.0/src/aioovh/orders/__init__.py +3446 -0
  338. aioovh-0.1.0/src/aioovh/orders/resources.py +33826 -0
  339. aioovh-0.1.0/src/aioovh/orders/types.py +2682 -0
  340. aioovh-0.1.0/src/aioovh/py.typed +0 -0
  341. aioovh-0.1.0/src/aioovh/storage/__init__.py +236 -0
  342. aioovh-0.1.0/src/aioovh/storage/resources.py +4920 -0
  343. aioovh-0.1.0/src/aioovh/storage/types.py +3946 -0
  344. aioovh-0.1.0/src/aioovh/telecom/__init__.py +1130 -0
  345. aioovh-0.1.0/src/aioovh/telecom/resources.py +24737 -0
  346. aioovh-0.1.0/src/aioovh/telecom/types.py +2570 -0
  347. aioovh-0.1.0/src/aioovh/virtualization/__init__.py +462 -0
  348. aioovh-0.1.0/src/aioovh/virtualization/resources.py +9555 -0
  349. aioovh-0.1.0/src/aioovh/virtualization/types.py +724 -0
  350. aioovh-0.1.0/src/aioovh/web_hosting/__init__.py +398 -0
  351. aioovh-0.1.0/src/aioovh/web_hosting/resources.py +7570 -0
  352. aioovh-0.1.0/src/aioovh/web_hosting/types.py +944 -0
  353. aioovh-0.1.0/tests/__init__.py +0 -0
  354. aioovh-0.1.0/tests/conftest.py +82 -0
  355. aioovh-0.1.0/tests/test_client.py +243 -0
  356. aioovh-0.1.0/tests/test_objects.py +216 -0
  357. aioovh-0.1.0/tests/test_operations.py +131 -0
  358. aioovh-0.1.0/uv.lock +1152 -0
@@ -0,0 +1,68 @@
1
+ name: Pull request
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [development]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ concurrency:
11
+ group: ${{ github.workflow }}-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ env:
15
+ UV_FROZEN: "1"
16
+
17
+ jobs:
18
+ check:
19
+ runs-on: ubuntu-latest
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ python-version: ["3.12", "3.13", "3.14"]
24
+ env:
25
+ UV_PYTHON: ${{ matrix.python-version }}
26
+ steps:
27
+ - uses: actions/checkout@v7
28
+
29
+ - name: Install uv
30
+ uses: astral-sh/setup-uv@v10.3.0
31
+ with:
32
+ version: "0.13.4"
33
+ enable-cache: true
34
+
35
+ - name: Install the project
36
+ run: uv sync
37
+
38
+ - name: Lint
39
+ run: |
40
+ uv run ruff check .
41
+ uv run ruff format --check .
42
+
43
+ - name: Check the generated code matches the specs
44
+ run: |
45
+ uv run python scripts/generate.py
46
+ git diff --exit-code -- src docs
47
+
48
+ - name: Type check
49
+ run: uv run mypy
50
+
51
+ - name: Test
52
+ run: uv run pytest -q
53
+
54
+ docs:
55
+ runs-on: ubuntu-latest
56
+ steps:
57
+ - uses: actions/checkout@v7
58
+
59
+ - name: Install uv
60
+ uses: astral-sh/setup-uv@v10.3.0
61
+ with:
62
+ version: "0.13.4"
63
+ enable-cache: true
64
+
65
+ - name: Build the documentation site
66
+ run: |
67
+ uv sync --group docs
68
+ uv run zensical build --clean
@@ -0,0 +1,59 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ env:
8
+ UV_FROZEN: "1"
9
+
10
+ jobs:
11
+ release:
12
+ runs-on: ubuntu-latest
13
+
14
+ # PyPI trusts this workflow over OIDC, so no token is stored; the pypi
15
+ # environment waits for a reviewer, since an upload cannot be taken back
16
+ environment:
17
+ name: pypi
18
+ url: https://pypi.org/project/aioovh/
19
+
20
+ permissions:
21
+ contents: read
22
+ id-token: write
23
+
24
+ steps:
25
+ - uses: actions/checkout@v7
26
+
27
+ - name: Install uv
28
+ uses: astral-sh/setup-uv@v10.3.0
29
+ with:
30
+ version: "0.13.4"
31
+ enable-cache: true
32
+
33
+ - name: Check the tag matches the declared version
34
+ run: test "v$(uv version --short)" = "$GITHUB_REF_NAME"
35
+
36
+ - name: Install the project
37
+ run: uv sync
38
+
39
+ - name: Lint
40
+ run: |
41
+ uv run ruff check .
42
+ uv run ruff format --check .
43
+
44
+ - name: Check the generated code matches the specs
45
+ run: |
46
+ uv run python scripts/generate.py
47
+ git diff --exit-code -- src docs
48
+
49
+ - name: Type check
50
+ run: uv run mypy
51
+
52
+ - name: Test
53
+ run: uv run pytest -q
54
+
55
+ - name: Build
56
+ run: uv build
57
+
58
+ - name: Publish to PyPI
59
+ run: uv publish --trusted-publishing always
@@ -0,0 +1,23 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+
12
+ # Tooling caches
13
+ .pytest_cache/
14
+ .ruff_cache/
15
+ .mypy_cache/
16
+
17
+ # Profiler output
18
+ gmon.out
19
+
20
+ # Documentation site build
21
+ site/
22
+ .cache/
23
+ .claude/
@@ -0,0 +1 @@
1
+ 3.12
@@ -0,0 +1,35 @@
1
+ # Changelog
2
+
3
+ Notable changes to this project, newest first.
4
+
5
+ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and the project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.1.0] - 2026-11-11
11
+
12
+ First version published on PyPI.
13
+
14
+ ### Added
15
+
16
+ - `OVH`, the client, read from the `OVH_*` variables of the official package,
17
+ signing each request with the `$1$` signature and the server clock offset,
18
+ or using OAuth2 client credentials; `with_options()` shares its connections.
19
+ - Business areas shared with aioscaleway: `compute`, `storage`, `backup`,
20
+ `network`, `kubernetes`, `databases`, `analytics`, `ai`, `email`,
21
+ `domains`, `web_hosting`, `observability`, `iam`, `account`, `billing`,
22
+ `orders`, `telecom`, `licenses` and `virtualization`, covering the 70 APIs
23
+ of version 1.0 and the 18 of v2.
24
+ - Collections iterated with `async for`, the 1.0 lists of identifiers loaded a
25
+ few at a time, the v2 cursor pages followed, `filter()` and `ids()`;
26
+ references that act without loading and load when awaited; loaded objects
27
+ that are references too.
28
+ - Public Cloud resources scoped by project, with `default_project`.
29
+ - Typed errors under `OVHAPIError` with the query id, retries with `stamina`,
30
+ dates as `whenever.Instant` and `whenever.Date`, open enumerations.
31
+ - `ovh.raw`, the underlying client, with the official package's raw calls.
32
+ - Type information shipped with the package (`py.typed`).
33
+
34
+ [Unreleased]: https://gitlab.com/businessagile/libraries/aioovh/-/compare/v0.1.0...development
35
+ [0.1.0]: https://gitlab.com/businessagile/libraries/aioovh/-/tags/v0.1.0
@@ -0,0 +1,27 @@
1
+ cff-version: 1.2.0
2
+ message: If you use aioovh in your work, please cite it as below.
3
+ type: software
4
+ title: aioovh
5
+ abstract: Asynchronous, fully typed client for every OVHcloud API, on httpx2 and pydantic.
6
+ authors:
7
+ - given-names: Alexandre
8
+ family-names: BERREBI
9
+ email: alexandre.berrebi@businessagile.eu
10
+ affiliation: Business Agile
11
+ website: https://businessagile.eu/en/about
12
+ version: 0.1.0
13
+ date-released: 2026-11-11
14
+ license: MIT
15
+ url: https://aioovh.businessagile.eu
16
+ repository-code: https://gitlab.com/businessagile/libraries/aioovh
17
+ keywords:
18
+ - ovh
19
+ - ovhcloud
20
+ - kimsufi
21
+ - soyoustart
22
+ - asyncio
23
+ - httpx
24
+ - pydantic
25
+ - sdk
26
+ - api
27
+ - cloud
@@ -0,0 +1,116 @@
1
+ # Contributing
2
+
3
+ ## Issues and pull requests
4
+
5
+ Report bugs, ask questions and propose changes on
6
+ [GitHub](https://github.com/BiBzz/aioovh): [issues](https://github.com/BiBzz/aioovh/issues) and pull requests against `development`
7
+ are welcome there, and your commits do not need to be signed.
8
+
9
+ The code is reviewed and merged on
10
+ [GitLab](https://gitlab.com/businessagile/libraries/aioovh), which mirrors
11
+ itself to GitHub. A pull request is picked up into a GitLab merge request that
12
+ links back to it, keeps you as the author of your commits, and runs the full
13
+ CI. Once merged, the mirror brings the commits to GitHub, which marks the pull
14
+ request as merged; if they had to be rebased, the pull request is closed with
15
+ a link to the commit. Do not expect the GitHub merge button to work: only the
16
+ mirror writes to `development`.
17
+
18
+ ## Setting up
19
+
20
+ The project is managed with [uv](https://docs.astral.sh/uv/), 0.13 or later:
21
+
22
+ ```bash
23
+ uv sync
24
+ ```
25
+
26
+ It uses the interpreter in `.python-version`, the oldest version the library
27
+ supports.
28
+
29
+ ## The checks
30
+
31
+ These are the gates CI runs on every merge request on GitLab, and GitHub
32
+ Actions on every pull request:
33
+
34
+ ```bash
35
+ uv run ruff check .
36
+ uv run ruff format --check .
37
+ uv run python scripts/generate.py && git diff --exit-code -- src docs
38
+ uv run mypy
39
+ uv run pytest -q
40
+ ```
41
+
42
+ The tests run on Python 3.12, 3.13 and 3.14 in CI.
43
+
44
+ ## Generated code
45
+
46
+ Everything under `src/aioovh/_operations/` and the area packages
47
+ (`src/aioovh/billing/`...) is generated, as are `docs/objects.md` and
48
+ `docs/coverage.md`; each generated file starts with a line saying so. Change
49
+ the generators (`scripts/operations.py`, `scripts/objects.py`), the mapping
50
+ (`mapping.yaml`) or the hand-written runtime (`src/aioovh/_*.py`), never the
51
+ output, then regenerate:
52
+
53
+ ```bash
54
+ uv run python scripts/generate.py
55
+ ```
56
+
57
+ The generator stops on a root missing from `mapping.yaml` or on a name clash.
58
+ Read the diff of `docs/objects.md`: it is the public surface.
59
+
60
+ To pick up what OVHcloud changed in its APIs:
61
+
62
+ ```bash
63
+ uv run python scripts/fetch_specs.py
64
+ uv run python scripts/generate.py
65
+ ```
66
+
67
+ The first command downloads every schema listed by the version 1.0 and v2
68
+ roots. Commit the schemas and the generated code together, in a merge request
69
+ of their own: its diff is the list of API changes.
70
+
71
+ ## Commits
72
+
73
+ Work branches off `development`, the default branch, and lands through a
74
+ merge request. Everything in the repository is written in English, and commit
75
+ messages follow the Angular convention: `feat(client): ...`,
76
+ `fix(generator): ...`, `docs: ...`. Maintainers sign their commits and tags.
77
+
78
+ ## The changelog
79
+
80
+ Anything a user of the library would notice goes under `## [Unreleased]` in
81
+ [CHANGELOG.md](CHANGELOG.md), in the merge request that changes the behaviour.
82
+ The format is [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
83
+
84
+ ## Releasing
85
+
86
+ 1. In a merge request, bump `version` in `pyproject.toml`, run `uv lock`, and
87
+ turn the `## [Unreleased]` section into the release:
88
+
89
+ ```bash
90
+ python3 scripts/roll_changelog.py 0.2.0
91
+ ```
92
+
93
+ 2. Once it is merged, from an up to date `development`:
94
+
95
+ ```bash
96
+ scripts/release.sh
97
+ ```
98
+
99
+ It checks the tree matches `origin`, the commit is signed and the
100
+ changelog has the section, replays the checks, signs the `v0.2.0` tag with
101
+ the changelog entry as its message, and pushes it after asking.
102
+
103
+ 3. The GitLab mirror carries the tag to GitHub, where the `Release` workflow
104
+ checks the tag matches the version, replays the checks, then waits for a
105
+ reviewer to approve the `pypi` environment. Approving it is the point of no
106
+ return: a version on PyPI can be yanked, but its files can never be uploaded
107
+ again. The workflow builds the wheel and the sdist and uploads them with
108
+ PyPI trusted publishing, so no token is stored anywhere.
109
+
110
+ ### What PyPI trusts
111
+
112
+ The trusted publisher declared on PyPI for `aioovh` is the GitHub repository
113
+ `BiBzz/aioovh`, workflow `release.yml`, environment `pypi`. Renaming the
114
+ repository, the workflow or the environment breaks the upload until the
115
+ publisher is updated on PyPI. Tags matching `v*` are protected on GitLab, and
116
+ on GitHub only the mirror may create them.
aioovh-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Alexandre BERREBI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
aioovh-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,188 @@
1
+ Metadata-Version: 2.5
2
+ Name: aioovh
3
+ Version: 0.1.0
4
+ Summary: Asynchronous, fully typed client for every OVHcloud API, on httpx2 and pydantic
5
+ Project-URL: Homepage, https://aioovh.businessagile.eu
6
+ Project-URL: Documentation, https://aioovh.businessagile.eu
7
+ Project-URL: Repository, https://gitlab.com/businessagile/libraries/aioovh
8
+ Project-URL: Mirror, https://github.com/BiBzz/aioovh
9
+ Project-URL: Issues, https://github.com/BiBzz/aioovh/issues
10
+ Project-URL: Changelog, https://gitlab.com/businessagile/libraries/aioovh/-/blob/development/CHANGELOG.md
11
+ Author-email: Alexandre BERREBI <alexandre.berrebi@businessagile.eu>
12
+ Maintainer-email: Business Agile <contact@businessagile.eu>
13
+ License-Expression: MIT
14
+ License-File: LICENSE
15
+ Keywords: api,asyncio,cloud,httpx,kimsufi,ovh,ovhcloud,pydantic,sdk,soyoustart
16
+ Classifier: Development Status :: 4 - Beta
17
+ Classifier: Framework :: AsyncIO
18
+ Classifier: Framework :: Pydantic :: 2
19
+ Classifier: Intended Audience :: Developers
20
+ Classifier: Operating System :: OS Independent
21
+ Classifier: Programming Language :: Python :: 3
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Programming Language :: Python :: 3.14
25
+ Classifier: Topic :: Internet :: WWW/HTTP
26
+ Classifier: Topic :: System :: Systems Administration
27
+ Classifier: Typing :: Typed
28
+ Requires-Python: >=3.12
29
+ Requires-Dist: httpx2>=2.16.0
30
+ Requires-Dist: pydantic-settings>=2.16.0
31
+ Requires-Dist: pydantic>=2.14.1
32
+ Requires-Dist: stamina>=26.1.0
33
+ Requires-Dist: whenever>=0.11.0
34
+ Description-Content-Type: text/markdown
35
+
36
+ # aioovh
37
+
38
+ Asynchronous, fully typed Python client for every
39
+ [OVHcloud API](https://eu.api.ovh.com/console/), versions 1.0 and v2, built on
40
+ [httpx2](https://pypi.org/project/httpx2/), [pydantic](https://docs.pydantic.dev/)
41
+ and [whenever](https://whenever.readthedocs.io/).
42
+
43
+ **Documentation**: https://aioovh.businessagile.eu
44
+
45
+ ```python
46
+ from whenever import Date
47
+
48
+ from aioovh import OVH
49
+
50
+ async with OVH() as ovh: # OVH_* from the environment
51
+ async for bill in ovh.billing.bills.filter(date_from=Date(2026, 10, 1)):
52
+ print(bill.bill_id, bill.date, bill.price_without_tax.value)
53
+ async for line in bill.details:
54
+ print(" ", line.description, line.total_price.value)
55
+
56
+ await ovh.compute.vps("vps-1234.vps.ovh.net").reboot()
57
+ account = await ovh.account
58
+ ```
59
+
60
+ ## Why it exists
61
+
62
+ The official [`ovh`](https://pypi.org/project/ovh/) package is synchronous and
63
+ untyped: `client.get("/me/bill/FR123")` blocks the event loop and returns a
64
+ `dict`, and the paths are the API's own (`/me`, `/cloud/project/{id}/...`).
65
+
66
+ `aioovh` is asynchronous down to the socket and organised around what you
67
+ manipulate:
68
+
69
+ - **business areas** shared with its sibling
70
+ [aioscaleway](https://pypi.org/project/aioscaleway/): `compute`, `storage`,
71
+ `network`, `billing`, `domains`, `email`, `telecom`...; `/me` disappears,
72
+ its content goes where it belongs (`ovh.billing.bills`, `ovh.iam.ssh_keys`);
73
+ - **collections** you iterate with `async for` and narrow with `filter()`; the
74
+ 1.0 lists of identifiers are loaded for you, a few objects at a time, and the
75
+ v2 cursor pages are followed;
76
+ - **references** that act without a request to read them first, and that
77
+ `await` loads; **objects** that are references too, with typed fields;
78
+ - **no API version in any name**;
79
+ - the `$1$` request signature on the exact URL and body sent, with the clock
80
+ offset read once from `/auth/time`, or an OAuth2 bearer token.
81
+
82
+ Everything is generated from the schemas the API serves, committed in
83
+ [`specs/`](specs/): 88 APIs and about 7,300 operations. Every operation is
84
+ reachable, through the objects or through `ovh.raw`, and
85
+ [`docs/coverage.md`](docs/coverage.md) says where.
86
+
87
+ ## Installation
88
+
89
+ ```bash
90
+ uv add aioovh
91
+ ```
92
+
93
+ Python 3.12 or later.
94
+
95
+ ## Usage
96
+
97
+ ### Client
98
+
99
+ ```python
100
+ ovh = OVH(
101
+ endpoint="ovh-eu",
102
+ application_key="...",
103
+ application_secret="...",
104
+ consumer_key="...",
105
+ default_project="...", # Public Cloud project used when none is given
106
+ )
107
+ ```
108
+
109
+ Every value left out is read from the variables of the official package
110
+ (`OVH_ENDPOINT`, `OVH_APPLICATION_KEY`, `OVH_APPLICATION_SECRET`,
111
+ `OVH_CONSUMER_KEY`, `OVH_CLIENT_ID`, `OVH_CLIENT_SECRET`), plus
112
+ `OVH_DEFAULT_PROJECT` and `OVH_MAX_CONCURRENCY` (objects loaded at once when a
113
+ list only returns identifiers, 8 by default).
114
+
115
+ ### Collections, references, objects
116
+
117
+ | You write | You get | Requests |
118
+ | --- | --- | --- |
119
+ | `ovh.billing.bills` | a collection | none |
120
+ | `ovh.billing.bills.filter(date_from=Date(2026, 10, 1))` | the same collection, narrowed | none |
121
+ | `async for b in ovh.billing.bills` | loaded objects | the list, then one per object |
122
+ | `ovh.billing.bills(bill_id)` | a reference | none |
123
+ | `await ovh.billing.bills(bill_id)` | a loaded object | one |
124
+ | `await ovh.compute.vps(name).reboot()` | the action's result | one |
125
+ | `[i async for i in ovh.billing.bills.ids()]` | identifiers only | one |
126
+
127
+ A loaded object is also a reference. It cannot load itself when printed or
128
+ read, because those are synchronous; mypy flags a field read on a bare
129
+ reference.
130
+
131
+ Public Cloud resources take their project as a keyword, defaulting to
132
+ `default_project`:
133
+
134
+ ```python
135
+ async for instance in ovh.compute.instances.filter(project=project_id):
136
+ ...
137
+ ```
138
+
139
+ ### Names
140
+
141
+ Collections are named after what they hold (`bills`, `dedicated_servers`,
142
+ `ssh_keys`); under them, the OVHcloud segments in snake case
143
+ (`bill.details`, `server.service_infos()`). Actions are methods named after
144
+ their path (`reboot()`, `change_contact()`), updates `update_...`. The full
145
+ tree is in [docs/objects.md](docs/objects.md).
146
+
147
+ ### Types and errors
148
+
149
+ Arguments and fields are typed; enumerations and nested models of an area live
150
+ in its `types` module. Dates are `whenever.Instant` and `whenever.Date`.
151
+ Enumerations are open.
152
+
153
+ ```python
154
+ from aioovh import NotGrantedCallError, OVHAPIError, ResourceNotFoundError
155
+
156
+ try:
157
+ await ovh.billing.bills("FR123")
158
+ except NotGrantedCallError:
159
+ ... # the consumer key lacks this route
160
+ except OVHAPIError as error:
161
+ print(error.status_code, error.error_code, error.message, error.query_id)
162
+ ```
163
+
164
+ ### The raw layer
165
+
166
+ `ovh.raw` keeps the official package's untyped calls:
167
+
168
+ ```python
169
+ await ovh.raw.get("/me/bill", **{"date.from": "2026-10-01"})
170
+ ```
171
+
172
+ ## Development
173
+
174
+ See [CONTRIBUTING.md](CONTRIBUTING.md) and
175
+ [docs/architecture.md](docs/architecture.md).
176
+
177
+ The source lives on [GitLab](https://gitlab.com/businessagile/libraries/aioovh),
178
+ mirrored to [GitHub](https://github.com/BiBzz/aioovh), where
179
+ [issues](https://github.com/BiBzz/aioovh/issues) and pull requests are welcome.
180
+
181
+ ## Author
182
+
183
+ Created by [Alexandre BERREBI](https://businessagile.eu/en/about), maintained by
184
+ [Business Agile](https://businessagile.eu).
185
+
186
+ ## License
187
+
188
+ MIT, see [LICENSE](LICENSE).
aioovh-0.1.0/README.md ADDED
@@ -0,0 +1,153 @@
1
+ # aioovh
2
+
3
+ Asynchronous, fully typed Python client for every
4
+ [OVHcloud API](https://eu.api.ovh.com/console/), versions 1.0 and v2, built on
5
+ [httpx2](https://pypi.org/project/httpx2/), [pydantic](https://docs.pydantic.dev/)
6
+ and [whenever](https://whenever.readthedocs.io/).
7
+
8
+ **Documentation**: https://aioovh.businessagile.eu
9
+
10
+ ```python
11
+ from whenever import Date
12
+
13
+ from aioovh import OVH
14
+
15
+ async with OVH() as ovh: # OVH_* from the environment
16
+ async for bill in ovh.billing.bills.filter(date_from=Date(2026, 10, 1)):
17
+ print(bill.bill_id, bill.date, bill.price_without_tax.value)
18
+ async for line in bill.details:
19
+ print(" ", line.description, line.total_price.value)
20
+
21
+ await ovh.compute.vps("vps-1234.vps.ovh.net").reboot()
22
+ account = await ovh.account
23
+ ```
24
+
25
+ ## Why it exists
26
+
27
+ The official [`ovh`](https://pypi.org/project/ovh/) package is synchronous and
28
+ untyped: `client.get("/me/bill/FR123")` blocks the event loop and returns a
29
+ `dict`, and the paths are the API's own (`/me`, `/cloud/project/{id}/...`).
30
+
31
+ `aioovh` is asynchronous down to the socket and organised around what you
32
+ manipulate:
33
+
34
+ - **business areas** shared with its sibling
35
+ [aioscaleway](https://pypi.org/project/aioscaleway/): `compute`, `storage`,
36
+ `network`, `billing`, `domains`, `email`, `telecom`...; `/me` disappears,
37
+ its content goes where it belongs (`ovh.billing.bills`, `ovh.iam.ssh_keys`);
38
+ - **collections** you iterate with `async for` and narrow with `filter()`; the
39
+ 1.0 lists of identifiers are loaded for you, a few objects at a time, and the
40
+ v2 cursor pages are followed;
41
+ - **references** that act without a request to read them first, and that
42
+ `await` loads; **objects** that are references too, with typed fields;
43
+ - **no API version in any name**;
44
+ - the `$1$` request signature on the exact URL and body sent, with the clock
45
+ offset read once from `/auth/time`, or an OAuth2 bearer token.
46
+
47
+ Everything is generated from the schemas the API serves, committed in
48
+ [`specs/`](specs/): 88 APIs and about 7,300 operations. Every operation is
49
+ reachable, through the objects or through `ovh.raw`, and
50
+ [`docs/coverage.md`](docs/coverage.md) says where.
51
+
52
+ ## Installation
53
+
54
+ ```bash
55
+ uv add aioovh
56
+ ```
57
+
58
+ Python 3.12 or later.
59
+
60
+ ## Usage
61
+
62
+ ### Client
63
+
64
+ ```python
65
+ ovh = OVH(
66
+ endpoint="ovh-eu",
67
+ application_key="...",
68
+ application_secret="...",
69
+ consumer_key="...",
70
+ default_project="...", # Public Cloud project used when none is given
71
+ )
72
+ ```
73
+
74
+ Every value left out is read from the variables of the official package
75
+ (`OVH_ENDPOINT`, `OVH_APPLICATION_KEY`, `OVH_APPLICATION_SECRET`,
76
+ `OVH_CONSUMER_KEY`, `OVH_CLIENT_ID`, `OVH_CLIENT_SECRET`), plus
77
+ `OVH_DEFAULT_PROJECT` and `OVH_MAX_CONCURRENCY` (objects loaded at once when a
78
+ list only returns identifiers, 8 by default).
79
+
80
+ ### Collections, references, objects
81
+
82
+ | You write | You get | Requests |
83
+ | --- | --- | --- |
84
+ | `ovh.billing.bills` | a collection | none |
85
+ | `ovh.billing.bills.filter(date_from=Date(2026, 10, 1))` | the same collection, narrowed | none |
86
+ | `async for b in ovh.billing.bills` | loaded objects | the list, then one per object |
87
+ | `ovh.billing.bills(bill_id)` | a reference | none |
88
+ | `await ovh.billing.bills(bill_id)` | a loaded object | one |
89
+ | `await ovh.compute.vps(name).reboot()` | the action's result | one |
90
+ | `[i async for i in ovh.billing.bills.ids()]` | identifiers only | one |
91
+
92
+ A loaded object is also a reference. It cannot load itself when printed or
93
+ read, because those are synchronous; mypy flags a field read on a bare
94
+ reference.
95
+
96
+ Public Cloud resources take their project as a keyword, defaulting to
97
+ `default_project`:
98
+
99
+ ```python
100
+ async for instance in ovh.compute.instances.filter(project=project_id):
101
+ ...
102
+ ```
103
+
104
+ ### Names
105
+
106
+ Collections are named after what they hold (`bills`, `dedicated_servers`,
107
+ `ssh_keys`); under them, the OVHcloud segments in snake case
108
+ (`bill.details`, `server.service_infos()`). Actions are methods named after
109
+ their path (`reboot()`, `change_contact()`), updates `update_...`. The full
110
+ tree is in [docs/objects.md](docs/objects.md).
111
+
112
+ ### Types and errors
113
+
114
+ Arguments and fields are typed; enumerations and nested models of an area live
115
+ in its `types` module. Dates are `whenever.Instant` and `whenever.Date`.
116
+ Enumerations are open.
117
+
118
+ ```python
119
+ from aioovh import NotGrantedCallError, OVHAPIError, ResourceNotFoundError
120
+
121
+ try:
122
+ await ovh.billing.bills("FR123")
123
+ except NotGrantedCallError:
124
+ ... # the consumer key lacks this route
125
+ except OVHAPIError as error:
126
+ print(error.status_code, error.error_code, error.message, error.query_id)
127
+ ```
128
+
129
+ ### The raw layer
130
+
131
+ `ovh.raw` keeps the official package's untyped calls:
132
+
133
+ ```python
134
+ await ovh.raw.get("/me/bill", **{"date.from": "2026-10-01"})
135
+ ```
136
+
137
+ ## Development
138
+
139
+ See [CONTRIBUTING.md](CONTRIBUTING.md) and
140
+ [docs/architecture.md](docs/architecture.md).
141
+
142
+ The source lives on [GitLab](https://gitlab.com/businessagile/libraries/aioovh),
143
+ mirrored to [GitHub](https://github.com/BiBzz/aioovh), where
144
+ [issues](https://github.com/BiBzz/aioovh/issues) and pull requests are welcome.
145
+
146
+ ## Author
147
+
148
+ Created by [Alexandre BERREBI](https://businessagile.eu/en/about), maintained by
149
+ [Business Agile](https://businessagile.eu).
150
+
151
+ ## License
152
+
153
+ MIT, see [LICENSE](LICENSE).