Source code for coto.clients.support
from bs4 import BeautifulSoup
from pyotp import TOTP
from datetime import datetime, timedelta
import json
from . import BaseClient
class ReauthException(Exception):
pass
[docs]class Client(BaseClient):
"""
A low-level client representing Support:
.. code-block:: python
import coto
session = coto.Session()
client = session.client('support')
These are the available methods:
* :py:meth:`get_support_level`
* :py:meth:`update_support_level`
"""
def __init__(self, session):
super().__init__(session)
self.__xsrf_token = None
def _url(self, api):
return "https://console.aws.amazon.com/support/plans/service/{0}?state=hashArgs%23".format(api)
def _xsrf_token(self):
if self.__xsrf_token is None:
self._get_xsrf_token()
return self.__xsrf_token
def _get_xsrf_token(self):
r = self.session()._get(
'https://console.aws.amazon.com/support/plans/home?region=eu-central-1&state=hashArgs%23'
)
if r.status_code != 200:
raise Exception("failed get support xsrf token")
for cookie in r.cookies:
if cookie.name == 'XSRF-TOKEN':
self.__xsrf_token = cookie.value
break
def _get(self, api):
r = self.session()._get(
self._url(api), headers={'X-XSRF-TOKEN': self._xsrf_token()})
if 'X-CSRF-TOKEN' in r.headers:
self.__xsrf_token = r.headers['X-CSRF-Token']
if r.status_code != 200:
raise Exception("failed get {0}".format(api))
return json.loads(r.text)
def _post(self, api, data=None):
r = self.session()._post(
self._url(api),
headers={
'Content-Type': 'application/json',
'X-XSRF-TOKEN': self._xsrf_token(),
},
data=json.dumps(data) if data is not None else None,
)
if 'X-CSRF-Token' in r.headers:
self.__xsrf_token = r.headers['X-CSRF-TOKEN']
if r.status_code != 200:
raise Exception("failed post {0}".format(api))
return json.loads(r.text)
[docs] def get_support_level(self):
"""
Lists the current support contract level for the account.
Request Syntax:
.. code-block:: python
response = client.get_support_level()
Returns:
dict: Response Syntax
.. code-block:: python
{
'supportLevel': str,
'canChange': bool
}
"""
r = self._post('describeSupportLevelSummary', { "lang": "en" })
return {
'supportLevel': r['response']['supportLevel'],
'canChange': r['response']['canChange']
}
[docs] def update_support_level(self, support_level):
"""
Change the support contract level for the account.
Request Syntax:
.. code-block:: python
response = client.set_tax_registration(
support_level=str,
)
Args:
support_level (str): Desired support contract level.
Returns:
dict: Response Syntax
.. code-block:: python
{
'supportLevel': str
}
"""
r = self._post('updateSupportLevel', { "supportLevel": support_level })
return {
'supportLevel': r['response']['supportLevel']
}