From 2895d8638e4e0228623a913c89ef2ede49a6bb61 Mon Sep 17 00:00:00 2001 From: Pierre Kieffer Date: Thu, 28 May 2026 12:49:46 +0000 Subject: [PATCH 1/4] feat: migrate API and OAuth2 URLs to new OVHcloud domains - Replace https://api.ovh.com with https://api.eu.ovhcloud.com - Replace https://eu.api.ovh.com with https://api.eu.ovhcloud.com - Replace https://ca.api.ovh.com with https://api.ca.ovhcloud.com - Replace https://www.ovh.com/auth/oauth2/token with https://auth.eu.ovhcloud.com/oauth2/token - Replace https://ca.ovh.com/auth/oauth2/token with https://auth.ca.ovhcloud.com/oauth2/token - Update hardcoded SHA1 signatures in tests accordingly - Update documentation Signed-off-by: Pierre Kieffer --- README.rst | 34 ++++----- docs/index.rst | 18 ++--- .../api_get_service_that_expired_soon.md | 4 +- examples/serviceList/api_get_service_list.md | 4 +- ovh/client.py | 12 +-- ovh/consumer_key.py | 2 +- setup.cfg | 2 +- tests/test_client.py | 74 +++++++++---------- 8 files changed, 75 insertions(+), 75 deletions(-) diff --git a/README.rst b/README.rst index ee9c88a..8970223 100644 --- a/README.rst +++ b/README.rst @@ -28,7 +28,7 @@ credential creation and requests signing. import ovh - # Instantiate. Visit https://api.ovh.com/createToken/?GET=/me + # Instantiate. Visit https://api.eu.ovhcloud.com/createToken/?GET=/me # to get your credentials client = ovh.Client( endpoint='ovh-eu', @@ -73,9 +73,9 @@ To interact with the APIs, the SDK needs to identify itself using an ``application_key`` and an ``application_secret``. To get them, you need to register your application. Depending the API you plan to use, visit: -- `OVHcloud Europe `_ +- `OVHcloud Europe `_ - `OVHcloud US `_ -- `OVHcloud North-America `_ +- `OVHcloud North-America `_ - `So you Start Europe `_ - `So you Start North America `_ - `Kimsufi Europe `_ @@ -436,9 +436,9 @@ Use v1 and v2 API versions When using OVHcloud APIs (not So you Start or Kimsufi ones), you are given the opportunity to aim for two API versions. For the European API, for example: -- the v1 is reachable through https://eu.api.ovh.com/v1 -- the v2 is reachable through https://eu.api.ovh.com/v2 -- the legacy URL is https://eu.api.ovh.com/1.0 +- the v1 is reachable through https://api.eu.ovhcloud.com/v1 +- the v2 is reachable through https://api.eu.ovhcloud.com/v2 +- the legacy URL is https://api.eu.ovhcloud.com/1.0 Calling ``client.get``, you can target the API version you want: @@ -446,13 +446,13 @@ opportunity to aim for two API versions. For the European API, for example: client = ovh.Client(endpoint="ovh-eu") - # Call to https://eu.api.ovh.com/v1/xdsl/xdsl-yourservice + # Call to https://api.eu.ovhcloud.com/v1/xdsl/xdsl-yourservice client.get("/v1/xdsl/xdsl-yourservice") - # Call to https://eu.api.ovh.com/v2/xdsl/xdsl-yourservice + # Call to https://api.eu.ovhcloud.com/v2/xdsl/xdsl-yourservice client.get("/v2/xdsl/xdsl-yourservice") - # Legacy call to https://eu.api.ovh.com/1.0/xdsl/xdsl-yourservice + # Legacy call to https://api.eu.ovhcloud.com/1.0/xdsl/xdsl-yourservice client.get("/xdsl/xdsl-yourservice") Custom configuration file @@ -567,11 +567,11 @@ Supported APIs OVHcloud Europe --------------- -- **Documentation**: https://eu.api.ovh.com/ +- **Documentation**: https://api.eu.ovhcloud.com/ - **Community support**: api-subscribe@ml.ovh.net -- **Console**: https://eu.api.ovh.com/console -- **Create application credentials**: https://eu.api.ovh.com/createApp/ -- **Create script credentials** (all keys at once): https://eu.api.ovh.com/createToken/ +- **Console**: https://api.eu.ovhcloud.com/console +- **Create application credentials**: https://api.eu.ovhcloud.com/createApp/ +- **Create script credentials** (all keys at once): https://api.eu.ovhcloud.com/createToken/ OVHcloud US ----------- @@ -584,11 +584,11 @@ OVHcloud US OVHcloud North America ---------------------- -- **Documentation**: https://ca.api.ovh.com/ +- **Documentation**: https://api.ca.ovhcloud.com/ - **Community support**: api-subscribe@ml.ovh.net -- **Console**: https://ca.api.ovh.com/console -- **Create application credentials**: https://ca.api.ovh.com/createApp/ -- **Create script credentials** (all keys at once): https://ca.api.ovh.com/createToken/ +- **Console**: https://api.ca.ovhcloud.com/console +- **Create application credentials**: https://api.ca.ovhcloud.com/createApp/ +- **Create script credentials** (all keys at once): https://api.ca.ovhcloud.com/createToken/ So you Start Europe ------------------- diff --git a/docs/index.rst b/docs/index.rst index 1b1923a..a4ba59d 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -13,7 +13,7 @@ creation and requests signing. import ovh - # Instantiate. Visit https://api.ovh.com/createToken/index.cgi?GET=/me + # Instantiate. Visit https://api.eu.ovhcloud.com/createToken/index.cgi?GET=/me # to get your credentials client = ovh.Client( endpoint='ovh-eu', @@ -63,8 +63,8 @@ To interact with the APIs, the SDK needs to identify itself using an ``application_key`` and an ``application_secret``. To get them, you need to register your application. Depending the API you plan yo use, visit: -- `OVH Europe `_ -- `OVH North-America `_ +- `OVH Europe `_ +- `OVH North-America `_ Once created, you will obtain an **application key (AK)** and an **application secret (AS)**. @@ -420,18 +420,18 @@ Supported APIs OVH Europe ---------- -- **Documentation**: https://eu.api.ovh.com/ +- **Documentation**: https://api.eu.ovhcloud.com/ - **Community support**: api-subscribe@ml.ovh.net -- **Console**: https://eu.api.ovh.com/console -- **Create application credentials**: https://eu.api.ovh.com/createApp/ +- **Console**: https://api.eu.ovhcloud.com/console +- **Create application credentials**: https://api.eu.ovhcloud.com/createApp/ OVH North America ----------------- -- **Documentation**: https://ca.api.ovh.com/ +- **Documentation**: https://api.ca.ovhcloud.com/ - **Community support**: api-subscribe@ml.ovh.net -- **Console**: https://ca.api.ovh.com/console -- **Create application credentials**: https://ca.api.ovh.com/createApp/ +- **Console**: https://api.ca.ovhcloud.com/console +- **Create application credentials**: https://api.ca.ovhcloud.com/createApp/ Related links ============= diff --git a/examples/serviceExpiration/api_get_service_that_expired_soon.md b/examples/serviceExpiration/api_get_service_that_expired_soon.md index b91094b..e81ee1f 100644 --- a/examples/serviceExpiration/api_get_service_that_expired_soon.md +++ b/examples/serviceExpiration/api_get_service_that_expired_soon.md @@ -17,7 +17,7 @@ pip install tabulate ovh ## Create a new token -You can create a new token using this url: [https://api.ovh.com/createToken/?GET=/*](https://api.ovh.com/createToken/?GET=/*). +You can create a new token using this url: [https://api.eu.ovhcloud.com/createToken/?GET=/*](https://api.eu.ovhcloud.com/createToken/?GET=/*). Keep application key, application secret and consumer key and replace default values in ```ovh.conf``` file. ```ini @@ -60,5 +60,5 @@ router router-rbx-1-sdr-1337 expired 2016-01-31 ## What's more? -You can discover all OVH possibilities by using API console to show all available endpoints: [https://api.ovh.com/console](https://api.ovh.com/console) +You can discover all OVH possibilities by using API console to show all available endpoints: [https://api.eu.ovhcloud.com/console](https://api.eu.ovhcloud.com/console) diff --git a/examples/serviceList/api_get_service_list.md b/examples/serviceList/api_get_service_list.md index 248c34b..a681afe 100644 --- a/examples/serviceList/api_get_service_list.md +++ b/examples/serviceList/api_get_service_list.md @@ -17,7 +17,7 @@ pip install tabulate ovh ## Create a new token -You can create a new token using this url: [https://api.ovh.com/createToken/?GET=/*](https://api.ovh.com/createToken/?GET=/*). +You can create a new token using this url: [https://api.eu.ovhcloud.com/createToken/?GET=/*](https://api.eu.ovhcloud.com/createToken/?GET=/*). Keep application key, application secret and consumer key and replace default values in ```ovh.conf``` file. ```ini @@ -60,5 +60,5 @@ router router-rbx-1-sdr-1337 expired 2016-01-31 ## What's more? -You can discover all OVH possibilities by using API console to show all available endpoints: [https://api.ovh.com/console](https://api.ovh.com/console) +You can discover all OVH possibilities by using API console to show all available endpoints: [https://api.eu.ovhcloud.com/console](https://api.eu.ovhcloud.com/console) diff --git a/ovh/client.py b/ovh/client.py index 2489cfc..932f4b5 100644 --- a/ovh/client.py +++ b/ovh/client.py @@ -28,7 +28,7 @@ This module provides a simple python wrapper over the OVH REST API. It handles requesting credential, signing queries... - - To get your API keys: https://eu.api.ovh.com/createApp/ + - To get your API keys: https://api.eu.ovhcloud.com/createApp/ - To get started with API: https://help.ovhcloud.com/csm/en-gb-api-getting-started-ovhcloud-api?id=kb_article_view&sysparm_article=KB0042784 """ @@ -65,9 +65,9 @@ # Mapping between OVH API region names and corresponding endpoints ENDPOINTS = { - "ovh-eu": "https://eu.api.ovh.com/1.0", + "ovh-eu": "https://api.eu.ovhcloud.com/1.0", "ovh-us": "https://api.us.ovhcloud.com/1.0", - "ovh-ca": "https://ca.api.ovh.com/1.0", + "ovh-ca": "https://api.ca.ovhcloud.com/1.0", "kimsufi-eu": "https://eu.api.kimsufi.com/1.0", "kimsufi-ca": "https://ca.api.kimsufi.com/1.0", "soyoustart-eu": "https://eu.api.soyoustart.com/1.0", @@ -79,8 +79,8 @@ # OAuth2 token provider URLs OAUTH2_TOKEN_URLS = { - "ovh-eu": "https://www.ovh.com/auth/oauth2/token", - "ovh-ca": "https://ca.ovh.com/auth/oauth2/token", + "ovh-eu": "https://auth.eu.ovhcloud.com/oauth2/token", + "ovh-ca": "https://auth.ca.ovhcloud.com/oauth2/token", "ovh-us": "https://us.ovhcloud.com/auth/oauth2/token", } @@ -284,7 +284,7 @@ def new_consumer_key_request(self): { 'state': 'pendingValidation', 'consumerKey': 'TnpZAd5pYNqxk4RhlPiSRfJ4WrkmII2i', - 'validationUrl': 'https://eu.api.ovh.com/auth/?credentialToken=now2OOAVO4Wp6t7bemyN9DMWIobhGjFNZSHmixtVJM4S7mzjkN2L5VBfG96Iy1i0' + 'validationUrl': 'https://api.eu.ovhcloud.com/auth/?credentialToken=now2OOAVO4Wp6t7bemyN9DMWIobhGjFNZSHmixtVJM4S7mzjkN2L5VBfG96Iy1i0' } """ # noqa:E501 return ConsumerKeyRequest(self) diff --git a/ovh/consumer_key.py b/ovh/consumer_key.py index b48e87f..261de6b 100644 --- a/ovh/consumer_key.py +++ b/ovh/consumer_key.py @@ -70,7 +70,7 @@ def request(self, redirect_url=None, allowedIPs=None): { 'state': 'pendingValidation', 'consumerKey': 'TnpZAd5pYNqxk4RhlPiSRfJ4WrkmII2i', - 'validationUrl': 'https://eu.api.ovh.com/auth/?credentialToken=now2OOAVO4Wp6t7bemyN9DMWIobhGjFNZSHmixtVJM4S7mzjkN2L5VBfG96Iy1i0' + 'validationUrl': 'https://api.eu.ovhcloud.com/auth/?credentialToken=now2OOAVO4Wp6t7bemyN9DMWIobhGjFNZSHmixtVJM4S7mzjkN2L5VBfG96Iy1i0' } """ # noqa: E501 return self._client.request_consumerkey(self._access_rules, redirect_url, allowedIPs) diff --git a/setup.cfg b/setup.cfg index ae1d7ec..1616cf9 100644 --- a/setup.cfg +++ b/setup.cfg @@ -5,7 +5,7 @@ long_description = file: README.rst version = 1.2.0 author = OVHcloud team - Romain Beuque author_email = api@ml.ovh.net -url = https://api.ovh.com +url = https://api.eu.ovhcloud.com license = BSD license_file = LICENSE project_urls = diff --git a/tests/test_client.py b/tests/test_client.py index 7023efe..f8d2d1d 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -114,18 +114,18 @@ def test_query_string(self, m_call): for method, call in (("GET", api.get), ("DELETE", api.delete)): m_call.reset_mock() - assert call("https://eu.api.ovh.com/") == m_call.return_value - assert call("https://eu.api.ovh.com/", param="test") == m_call.return_value - assert call("https://eu.api.ovh.com/?query=string", param="test") == m_call.return_value - assert call("https://eu.api.ovh.com/?query=string", checkbox=True) == m_call.return_value - assert call("https://eu.api.ovh.com/", _from="start", to="end") == m_call.return_value + assert call("https://api.eu.ovhcloud.com/") == m_call.return_value + assert call("https://api.eu.ovhcloud.com/", param="test") == m_call.return_value + assert call("https://api.eu.ovhcloud.com/?query=string", param="test") == m_call.return_value + assert call("https://api.eu.ovhcloud.com/?query=string", checkbox=True) == m_call.return_value + assert call("https://api.eu.ovhcloud.com/", _from="start", to="end") == m_call.return_value assert m_call.call_args_list == [ - mock.call(method, "https://eu.api.ovh.com/", None, True), - mock.call(method, "https://eu.api.ovh.com/?param=test", None, True), - mock.call(method, "https://eu.api.ovh.com/?query=string¶m=test", None, True), - mock.call(method, "https://eu.api.ovh.com/?query=string&checkbox=true", None, True), - mock.call(method, "https://eu.api.ovh.com/?from=start&to=end", None, True), + mock.call(method, "https://api.eu.ovhcloud.com/", None, True), + mock.call(method, "https://api.eu.ovhcloud.com/?param=test", None, True), + mock.call(method, "https://api.eu.ovhcloud.com/?query=string¶m=test", None, True), + mock.call(method, "https://api.eu.ovhcloud.com/?query=string&checkbox=true", None, True), + mock.call(method, "https://api.eu.ovhcloud.com/?from=start&to=end", None, True), ] @mock.patch.object(Client, "call") @@ -135,18 +135,18 @@ def test_body(self, m_call): for method, call in (("POST", api.post), ("PUT", api.put)): m_call.reset_mock() - assert call("https://eu.api.ovh.com/") == m_call.return_value - assert call("https://eu.api.ovh.com/", param="test") == m_call.return_value - assert call("https://eu.api.ovh.com/?query=string", param="test") == m_call.return_value - assert call("https://eu.api.ovh.com/?query=string", checkbox=True) == m_call.return_value - assert call("https://eu.api.ovh.com/", _from="start", to="end") == m_call.return_value + assert call("https://api.eu.ovhcloud.com/") == m_call.return_value + assert call("https://api.eu.ovhcloud.com/", param="test") == m_call.return_value + assert call("https://api.eu.ovhcloud.com/?query=string", param="test") == m_call.return_value + assert call("https://api.eu.ovhcloud.com/?query=string", checkbox=True) == m_call.return_value + assert call("https://api.eu.ovhcloud.com/", _from="start", to="end") == m_call.return_value assert m_call.call_args_list == [ - mock.call(method, "https://eu.api.ovh.com/", None, True), - mock.call(method, "https://eu.api.ovh.com/", {"param": "test"}, True), - mock.call(method, "https://eu.api.ovh.com/?query=string", {"param": "test"}, True), - mock.call(method, "https://eu.api.ovh.com/?query=string", {"checkbox": True}, True), - mock.call(method, "https://eu.api.ovh.com/", {"from": "start", "to": "end"}, True), + mock.call(method, "https://api.eu.ovhcloud.com/", None, True), + mock.call(method, "https://api.eu.ovhcloud.com/", {"param": "test"}, True), + mock.call(method, "https://api.eu.ovhcloud.com/?query=string", {"param": "test"}, True), + mock.call(method, "https://api.eu.ovhcloud.com/?query=string", {"checkbox": True}, True), + mock.call(method, "https://api.eu.ovhcloud.com/", {"from": "start", "to": "end"}, True), ] # test core function @@ -163,18 +163,18 @@ def test_call_signature(self, m_time_delta, m_req, m_time): j_body = '{"a":"b","c":"d"}' api = Client("ovh-eu", MockApplicationKey, MockApplicationSecret, MockConsumerKey) - urlUnauth = "https://eu.api.ovh.com/1.0/unauth" - urlAuth = "https://eu.api.ovh.com/1.0/auth" + urlUnauth = "https://api.eu.ovhcloud.com/1.0/unauth" + urlAuth = "https://api.eu.ovhcloud.com/1.0/auth" for method in "GET", "POST", "PUT", "DELETE": assert api.call(method, "/unauth", None if method in ("GET", "DELETE") else body, False) == m_json assert api.call(method, "/auth", None if method in ("GET", "DELETE") else body, True) == m_json signatures = { - "GET": "$1$e9556054b6309771395efa467c22e627407461ad", - "POST": "$1$ec2fb5c7a81f64723c77d2e5b609ae6f58a84fc1", - "PUT": "$1$8a75a9e7c8e7296c9dbeda6a2a735eb6bd58ec4b", - "DELETE": "$1$a1eecd00b3b02b6cf5708b84b9ff42059a950d85", + "GET": "$1$52992e595b398f6aba591ee5925b379081614ced", + "POST": "$1$ea0e0d82447373a3ddf5947065f1d519ca0bcaf2", + "PUT": "$1$0fdc3ed192ffbf3d1be414dbb733bbb7729500ee", + "DELETE": "$1$f685c165fa9da88b294b5fd2504588588105f994", } def _h(m, auth): @@ -260,7 +260,7 @@ def test_raw_call_with_headers(self, m_req): assert m_req.call_args_list == [ mock.call( "GET", - "https://eu.api.ovh.com/1.0/unit/path", + "https://api.eu.ovhcloud.com/1.0/unit/path", headers={ "Custom-Header": "1", "X-Ovh-Application": MockApplicationKey, @@ -289,9 +289,9 @@ def test_version_in_url(self, m_time_delta, m_req, m_time): api.call("GET", "/v2/call", None, True) signatures = { - "1.0": "$1$7f2db49253edfc41891023fcd1a54cf61db05fbb", - "v1": "$1$e6e7906d385eb28adcbfbe6b66c1528a42d741ad", - "v2": "$1$bb63b132a6f84ad5433d0c534d48d3f7c3804285", + "1.0": "$1$4f3e3e887cc2ce88a0078801d849b8e2c482e997", + "v1": "$1$35654374999e2e09ef148973c54279a68f15e0a2", + "v2": "$1$85b6382fc0cca761b193007763c908bc68ca4a50", } def _h(prefix): @@ -303,15 +303,15 @@ def _h(prefix): } assert m_req.call_args_list == [ - mock.call("GET", "https://eu.api.ovh.com/1.0/call", headers=_h("1.0"), data="", timeout=180), - mock.call("GET", "https://eu.api.ovh.com/v1/call", headers=_h("v1"), data="", timeout=180), - mock.call("GET", "https://eu.api.ovh.com/v2/call", headers=_h("v2"), data="", timeout=180), + mock.call("GET", "https://api.eu.ovhcloud.com/1.0/call", headers=_h("1.0"), data="", timeout=180), + mock.call("GET", "https://api.eu.ovhcloud.com/v1/call", headers=_h("v1"), data="", timeout=180), + mock.call("GET", "https://api.eu.ovhcloud.com/v2/call", headers=_h("v2"), data="", timeout=180), ] @mock.patch("ovh.client.Session.request") def test_oauth2(self, m_req): def resp(*args, **kwargs): - if args[0] == "POST" and args[1] == "https://www.ovh.com/auth/oauth2/token": + if args[0] == "POST" and args[1] == "https://auth.eu.ovhcloud.com/oauth2/token": resp = mock.Mock() resp.status_code = 200 resp.text = """{ @@ -322,7 +322,7 @@ def resp(*args, **kwargs): }""" return resp - if args[0] == "GET" and args[1] == "https://eu.api.ovh.com/1.0/call": + if args[0] == "GET" and args[1] == "https://api.eu.ovhcloud.com/1.0/call": resp = mock.Mock() resp.status_code = 200 resp.text = "{}" @@ -334,7 +334,7 @@ def resp(*args, **kwargs): call_oauth = mock.call( "POST", - "https://www.ovh.com/auth/oauth2/token", + "https://auth.eu.ovhcloud.com/oauth2/token", headers={"Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded"}, data={"grant_type": "client_credentials", "scope": "all"}, files=None, @@ -346,7 +346,7 @@ def resp(*args, **kwargs): ) call_api = mock.call( "GET", - "https://eu.api.ovh.com/1.0/call", + "https://api.eu.ovhcloud.com/1.0/call", headers={"Authorization": "Bearer MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"}, data="", files=None, From 7bbc552c0948615df667bce46b0e5d6fd757b9aa Mon Sep 17 00:00:00 2001 From: Pierre Kieffer Date: Thu, 28 May 2026 13:02:10 +0000 Subject: [PATCH 2/4] ci: Update CI pipeline Python 3.7 is not available for Ubuntu 24.04 runners (https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json) Upgrade actions/setup-python to v5 Upgrade coverallsapp/github-action to v2 and add continue-on-error Pin to major version tag to get latest bug fixes. Prevent coverage reporting failures from blocking the CI pipeline. Signed-off-by: Pierre Kieffer --- .github/workflows/test.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index a891971..dbfb6a9 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -13,12 +13,12 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies @@ -34,4 +34,5 @@ jobs: - name: Test with pytest run: pytest --junitxml=junit/test-results.xml --cov=ovh --cov-report=xml --cov-report=html --cov-report=lcov:coverage/cov.info - name: Coveralls GitHub Action - uses: coverallsapp/github-action@v2.0.0 + uses: coverallsapp/github-action@v2 + continue-on-error: true From fcc89958e0cb6e40bf90e978f8a4c48cef876cb9 Mon Sep 17 00:00:00 2001 From: Pierre Kieffer Date: Thu, 28 May 2026 14:41:48 +0000 Subject: [PATCH 3/4] feat: Copyright 2026 Signed-off-by: Pierre Kieffer --- LICENSE | 2 +- debian/copyright | 4 ++-- ovh/__init__.py | 2 +- ovh/client.py | 2 +- ovh/config.py | 2 +- ovh/consumer_key.py | 2 +- ovh/exceptions.py | 2 +- ovh/oauth2.py | 2 +- tests/__init__.py | 2 +- tests/test_client.py | 2 +- tests/test_config.py | 2 +- tests/test_consumer_key.py | 2 +- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/LICENSE b/LICENSE index 327f58f..907fe09 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2013-2025, OVH SAS. +Copyright (c) 2013-2026, OVH SAS. All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/debian/copyright b/debian/copyright index 7c74d3e..6081b84 100644 --- a/debian/copyright +++ b/debian/copyright @@ -3,12 +3,12 @@ Upstream-Name: python-ovh Source: https://github.com/ovh/python-ovh Files: * -Copyright: 2013-2025 OVH SAS +Copyright: 2013-2026 OVH SAS License: 3-clause BSD See LICENSE Files: debian/* -Copyright: 2013-2025 OVH SAS +Copyright: 2013-2026 OVH SAS License: 3-clause BSD See LICENSE diff --git a/ovh/__init__.py b/ovh/__init__.py index ee56524..dd7f32c 100644 --- a/ovh/__init__.py +++ b/ovh/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2025, OVH SAS. +# Copyright (c) 2013-2026, OVH SAS. # All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/ovh/client.py b/ovh/client.py index 932f4b5..976fb23 100644 --- a/ovh/client.py +++ b/ovh/client.py @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2025, OVH SAS. +# Copyright (c) 2013-2026, OVH SAS. # All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/ovh/config.py b/ovh/config.py index e15c3ea..875961d 100644 --- a/ovh/config.py +++ b/ovh/config.py @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2025, OVH SAS. +# Copyright (c) 2013-2026, OVH SAS. # All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/ovh/consumer_key.py b/ovh/consumer_key.py index 261de6b..3de5995 100644 --- a/ovh/consumer_key.py +++ b/ovh/consumer_key.py @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2025, OVH SAS. +# Copyright (c) 2013-2026, OVH SAS. # All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/ovh/exceptions.py b/ovh/exceptions.py index c54b985..f254e76 100644 --- a/ovh/exceptions.py +++ b/ovh/exceptions.py @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2025, OVH SAS. +# Copyright (c) 2013-2026, OVH SAS. # All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/ovh/oauth2.py b/ovh/oauth2.py index add895a..e2cbafa 100644 --- a/ovh/oauth2.py +++ b/ovh/oauth2.py @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2025, OVH SAS. +# Copyright (c) 2013-2026, OVH SAS. # All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/tests/__init__.py b/tests/__init__.py index 140c59d..85b5717 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2025, OVH SAS. +# Copyright (c) 2013-2026, OVH SAS. # All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/tests/test_client.py b/tests/test_client.py index f8d2d1d..ef1b4d7 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2025, OVH SAS. +# Copyright (c) 2013-2026, OVH SAS. # All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/tests/test_config.py b/tests/test_config.py index 9a15896..890e1d1 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2025, OVH SAS. +# Copyright (c) 2013-2026, OVH SAS. # All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/tests/test_consumer_key.py b/tests/test_consumer_key.py index 61be7e3..67546cf 100644 --- a/tests/test_consumer_key.py +++ b/tests/test_consumer_key.py @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2025, OVH SAS. +# Copyright (c) 2013-2026, OVH SAS. # All rights reserved. # # Redistribution and use in source and binary forms, with or without From d1389f145dec1ab1190ac655980099c6a92d572e Mon Sep 17 00:00:00 2001 From: Pierre Kieffer Date: Mon, 1 Jun 2026 07:16:49 +0000 Subject: [PATCH 4/4] feat: migrate createToken and createApp URLs to new OVHcloud domains - Replace https://api.ovh.com/createToken with https://auth.eu.ovhcloud.com/api/createToken - Replace https://api.ovh.com/createApp with https://auth.eu.ovhcloud.com/api/createApp - Replace https://eu.api.ovh.com/createToken with https://auth.eu.ovhcloud.com/api/createToken - Replace https://eu.api.ovh.com/createApp with https://auth.eu.ovhcloud.com/api/createApp - Replace https://ca.api.ovh.com/createToken with https://auth.ca.ovhcloud.com/api/createToken - Replace https://ca.api.ovh.com/createApp with https://auth.ca.ovhcloud.com/api/createApp Signed-off-by: Pierre Kieffer --- README.rst | 14 +++++++------- docs/index.rst | 10 +++++----- .../api_get_service_that_expired_soon.md | 2 +- examples/serviceList/api_get_service_list.md | 2 +- ovh/client.py | 2 +- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/README.rst b/README.rst index 8970223..92444bb 100644 --- a/README.rst +++ b/README.rst @@ -28,7 +28,7 @@ credential creation and requests signing. import ovh - # Instantiate. Visit https://api.eu.ovhcloud.com/createToken/?GET=/me + # Instantiate. Visit https://auth.eu.ovhcloud.com/api/createToken/?GET=/me # to get your credentials client = ovh.Client( endpoint='ovh-eu', @@ -73,9 +73,9 @@ To interact with the APIs, the SDK needs to identify itself using an ``application_key`` and an ``application_secret``. To get them, you need to register your application. Depending the API you plan to use, visit: -- `OVHcloud Europe `_ +- `OVHcloud Europe `_ - `OVHcloud US `_ -- `OVHcloud North-America `_ +- `OVHcloud North-America `_ - `So you Start Europe `_ - `So you Start North America `_ - `Kimsufi Europe `_ @@ -570,8 +570,8 @@ OVHcloud Europe - **Documentation**: https://api.eu.ovhcloud.com/ - **Community support**: api-subscribe@ml.ovh.net - **Console**: https://api.eu.ovhcloud.com/console -- **Create application credentials**: https://api.eu.ovhcloud.com/createApp/ -- **Create script credentials** (all keys at once): https://api.eu.ovhcloud.com/createToken/ +- **Create application credentials**: https://auth.eu.ovhcloud.com/api/createApp/ +- **Create script credentials** (all keys at once): https://auth.eu.ovhcloud.com/api/createToken/ OVHcloud US ----------- @@ -587,8 +587,8 @@ OVHcloud North America - **Documentation**: https://api.ca.ovhcloud.com/ - **Community support**: api-subscribe@ml.ovh.net - **Console**: https://api.ca.ovhcloud.com/console -- **Create application credentials**: https://api.ca.ovhcloud.com/createApp/ -- **Create script credentials** (all keys at once): https://api.ca.ovhcloud.com/createToken/ +- **Create application credentials**: https://auth.ca.ovhcloud.com/api/createApp/ +- **Create script credentials** (all keys at once): https://auth.ca.ovhcloud.com/api/createToken/ So you Start Europe ------------------- diff --git a/docs/index.rst b/docs/index.rst index a4ba59d..2335b34 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -13,7 +13,7 @@ creation and requests signing. import ovh - # Instantiate. Visit https://api.eu.ovhcloud.com/createToken/index.cgi?GET=/me + # Instantiate. Visit https://auth.eu.ovhcloud.com/api/createToken/index.cgi?GET=/me # to get your credentials client = ovh.Client( endpoint='ovh-eu', @@ -63,8 +63,8 @@ To interact with the APIs, the SDK needs to identify itself using an ``application_key`` and an ``application_secret``. To get them, you need to register your application. Depending the API you plan yo use, visit: -- `OVH Europe `_ -- `OVH North-America `_ +- `OVH Europe `_ +- `OVH North-America `_ Once created, you will obtain an **application key (AK)** and an **application secret (AS)**. @@ -423,7 +423,7 @@ OVH Europe - **Documentation**: https://api.eu.ovhcloud.com/ - **Community support**: api-subscribe@ml.ovh.net - **Console**: https://api.eu.ovhcloud.com/console -- **Create application credentials**: https://api.eu.ovhcloud.com/createApp/ +- **Create application credentials**: https://auth.eu.ovhcloud.com/api/createApp/ OVH North America ----------------- @@ -431,7 +431,7 @@ OVH North America - **Documentation**: https://api.ca.ovhcloud.com/ - **Community support**: api-subscribe@ml.ovh.net - **Console**: https://api.ca.ovhcloud.com/console -- **Create application credentials**: https://api.ca.ovhcloud.com/createApp/ +- **Create application credentials**: https://auth.ca.ovhcloud.com/api/createApp/ Related links ============= diff --git a/examples/serviceExpiration/api_get_service_that_expired_soon.md b/examples/serviceExpiration/api_get_service_that_expired_soon.md index e81ee1f..d417686 100644 --- a/examples/serviceExpiration/api_get_service_that_expired_soon.md +++ b/examples/serviceExpiration/api_get_service_that_expired_soon.md @@ -17,7 +17,7 @@ pip install tabulate ovh ## Create a new token -You can create a new token using this url: [https://api.eu.ovhcloud.com/createToken/?GET=/*](https://api.eu.ovhcloud.com/createToken/?GET=/*). +You can create a new token using this url: [https://auth.eu.ovhcloud.com/api/createToken/?GET=/*](https://auth.eu.ovhcloud.com/api/createToken/?GET=/*). Keep application key, application secret and consumer key and replace default values in ```ovh.conf``` file. ```ini diff --git a/examples/serviceList/api_get_service_list.md b/examples/serviceList/api_get_service_list.md index a681afe..e63907f 100644 --- a/examples/serviceList/api_get_service_list.md +++ b/examples/serviceList/api_get_service_list.md @@ -17,7 +17,7 @@ pip install tabulate ovh ## Create a new token -You can create a new token using this url: [https://api.eu.ovhcloud.com/createToken/?GET=/*](https://api.eu.ovhcloud.com/createToken/?GET=/*). +You can create a new token using this url: [https://auth.eu.ovhcloud.com/api/createToken/?GET=/*](https://auth.eu.ovhcloud.com/api/createToken/?GET=/*). Keep application key, application secret and consumer key and replace default values in ```ovh.conf``` file. ```ini diff --git a/ovh/client.py b/ovh/client.py index 976fb23..092a982 100644 --- a/ovh/client.py +++ b/ovh/client.py @@ -28,7 +28,7 @@ This module provides a simple python wrapper over the OVH REST API. It handles requesting credential, signing queries... - - To get your API keys: https://api.eu.ovhcloud.com/createApp/ + - To get your API keys: https://auth.eu.ovhcloud.com/api/createApp/ - To get started with API: https://help.ovhcloud.com/csm/en-gb-api-getting-started-ovhcloud-api?id=kb_article_view&sysparm_article=KB0042784 """