mirror of
https://github.com/home-assistant/core.git
synced 2025-04-29 03:37:51 +00:00
Use http status constants more, add HTTP_ACCEPTED and HTTP_BAD_GATEWAY (#39993)
* Use http status codes and add HTTP_BAD_GATEWAY constant * Address review comments: - using constants in tado integration - using constant in media_player init.py * Add and use HTTP_ACCEPTED constant
This commit is contained in:
parent
59d610af17
commit
db582bdc1b
@ -6,7 +6,7 @@ import logging
|
|||||||
import aiohttp
|
import aiohttp
|
||||||
import async_timeout
|
import async_timeout
|
||||||
|
|
||||||
from homeassistant.const import MATCH_ALL, STATE_ON
|
from homeassistant.const import HTTP_ACCEPTED, MATCH_ALL, STATE_ON
|
||||||
import homeassistant.util.dt as dt_util
|
import homeassistant.util.dt as dt_util
|
||||||
|
|
||||||
from .const import API_CHANGE, Cause
|
from .const import API_CHANGE, Cause
|
||||||
@ -109,7 +109,7 @@ async def async_send_changereport_message(
|
|||||||
_LOGGER.debug("Sent: %s", json.dumps(message_serialized))
|
_LOGGER.debug("Sent: %s", json.dumps(message_serialized))
|
||||||
_LOGGER.debug("Received (%s): %s", response.status, response_text)
|
_LOGGER.debug("Received (%s): %s", response.status, response_text)
|
||||||
|
|
||||||
if response.status == 202:
|
if response.status == HTTP_ACCEPTED:
|
||||||
return
|
return
|
||||||
|
|
||||||
response_json = json.loads(response_text)
|
response_json = json.loads(response_text)
|
||||||
@ -240,7 +240,7 @@ async def async_send_doorbell_event_message(hass, config, alexa_entity):
|
|||||||
_LOGGER.debug("Sent: %s", json.dumps(message_serialized))
|
_LOGGER.debug("Sent: %s", json.dumps(message_serialized))
|
||||||
_LOGGER.debug("Received (%s): %s", response.status, response_text)
|
_LOGGER.debug("Received (%s): %s", response.status, response_text)
|
||||||
|
|
||||||
if response.status == 202:
|
if response.status == HTTP_ACCEPTED:
|
||||||
return
|
return
|
||||||
|
|
||||||
response_json = json.loads(response_text)
|
response_json = json.loads(response_text)
|
||||||
|
@ -80,7 +80,11 @@ from homeassistant.components.http.ban import (
|
|||||||
)
|
)
|
||||||
from homeassistant.components.http.data_validator import RequestDataValidator
|
from homeassistant.components.http.data_validator import RequestDataValidator
|
||||||
from homeassistant.components.http.view import HomeAssistantView
|
from homeassistant.components.http.view import HomeAssistantView
|
||||||
from homeassistant.const import HTTP_BAD_REQUEST, HTTP_NOT_FOUND
|
from homeassistant.const import (
|
||||||
|
HTTP_BAD_REQUEST,
|
||||||
|
HTTP_METHOD_NOT_ALLOWED,
|
||||||
|
HTTP_NOT_FOUND,
|
||||||
|
)
|
||||||
|
|
||||||
from . import indieauth
|
from . import indieauth
|
||||||
|
|
||||||
@ -153,7 +157,7 @@ class LoginFlowIndexView(HomeAssistantView):
|
|||||||
|
|
||||||
async def get(self, request):
|
async def get(self, request):
|
||||||
"""Do not allow index of flows in progress."""
|
"""Do not allow index of flows in progress."""
|
||||||
return web.Response(status=405)
|
return web.Response(status=HTTP_METHOD_NOT_ALLOWED)
|
||||||
|
|
||||||
@RequestDataValidator(
|
@RequestDataValidator(
|
||||||
vol.Schema(
|
vol.Schema(
|
||||||
|
@ -6,7 +6,12 @@ from aiohttp.hdrs import AUTHORIZATION
|
|||||||
import requests
|
import requests
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.const import CONF_API_KEY, HTTP_OK
|
from homeassistant.const import (
|
||||||
|
CONF_API_KEY,
|
||||||
|
HTTP_METHOD_NOT_ALLOWED,
|
||||||
|
HTTP_OK,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
|
)
|
||||||
from homeassistant.helpers import discovery
|
from homeassistant.helpers import discovery
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.util import Throttle
|
from homeassistant.util import Throttle
|
||||||
@ -67,9 +72,9 @@ class BloomSky:
|
|||||||
headers={AUTHORIZATION: self._api_key},
|
headers={AUTHORIZATION: self._api_key},
|
||||||
timeout=10,
|
timeout=10,
|
||||||
)
|
)
|
||||||
if response.status_code == 401:
|
if response.status_code == HTTP_UNAUTHORIZED:
|
||||||
raise RuntimeError("Invalid API_KEY")
|
raise RuntimeError("Invalid API_KEY")
|
||||||
if response.status_code == 405:
|
if response.status_code == HTTP_METHOD_NOT_ALLOWED:
|
||||||
_LOGGER.error("You have no bloomsky devices configured")
|
_LOGGER.error("You have no bloomsky devices configured")
|
||||||
return
|
return
|
||||||
if response.status_code != HTTP_OK:
|
if response.status_code != HTTP_OK:
|
||||||
|
@ -7,7 +7,12 @@ from bond_api import Bond
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant import config_entries, exceptions
|
from homeassistant import config_entries, exceptions
|
||||||
from homeassistant.const import CONF_ACCESS_TOKEN, CONF_HOST, CONF_NAME
|
from homeassistant.const import (
|
||||||
|
CONF_ACCESS_TOKEN,
|
||||||
|
CONF_HOST,
|
||||||
|
CONF_NAME,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
|
)
|
||||||
|
|
||||||
from .const import CONF_BOND_ID
|
from .const import CONF_BOND_ID
|
||||||
from .const import DOMAIN # pylint:disable=unused-import
|
from .const import DOMAIN # pylint:disable=unused-import
|
||||||
@ -31,7 +36,7 @@ async def _validate_input(data: Dict[str, Any]) -> str:
|
|||||||
except ClientConnectionError as error:
|
except ClientConnectionError as error:
|
||||||
raise InputValidationError("cannot_connect") from error
|
raise InputValidationError("cannot_connect") from error
|
||||||
except ClientResponseError as error:
|
except ClientResponseError as error:
|
||||||
if error.status == 401:
|
if error.status == HTTP_UNAUTHORIZED:
|
||||||
raise InputValidationError("invalid_auth") from error
|
raise InputValidationError("invalid_auth") from error
|
||||||
raise InputValidationError("unknown") from error
|
raise InputValidationError("unknown") from error
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
|
@ -5,7 +5,7 @@ import requests
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.notify import PLATFORM_SCHEMA, BaseNotificationService
|
from homeassistant.components.notify import PLATFORM_SCHEMA, BaseNotificationService
|
||||||
from homeassistant.const import CONF_API_KEY, CONF_RECIPIENT, HTTP_OK
|
from homeassistant.const import CONF_API_KEY, CONF_RECIPIENT, HTTP_ACCEPTED, HTTP_OK
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
@ -37,5 +37,5 @@ class ClickatellNotificationService(BaseNotificationService):
|
|||||||
data = {"apiKey": self.api_key, "to": self.recipient, "content": message}
|
data = {"apiKey": self.api_key, "to": self.recipient, "content": message}
|
||||||
|
|
||||||
resp = requests.get(BASE_API_URL, params=data, timeout=5)
|
resp = requests.get(BASE_API_URL, params=data, timeout=5)
|
||||||
if (resp.status_code != HTTP_OK) or (resp.status_code != 202):
|
if (resp.status_code != HTTP_OK) or (resp.status_code != HTTP_ACCEPTED):
|
||||||
_LOGGER.error("Error %s : %s", resp.status_code, resp.text)
|
_LOGGER.error("Error %s : %s", resp.status_code, resp.text)
|
||||||
|
@ -19,7 +19,13 @@ from homeassistant.components.google_assistant import helpers as google_helpers
|
|||||||
from homeassistant.components.http import HomeAssistantView
|
from homeassistant.components.http import HomeAssistantView
|
||||||
from homeassistant.components.http.data_validator import RequestDataValidator
|
from homeassistant.components.http.data_validator import RequestDataValidator
|
||||||
from homeassistant.components.websocket_api import const as ws_const
|
from homeassistant.components.websocket_api import const as ws_const
|
||||||
from homeassistant.const import HTTP_BAD_REQUEST, HTTP_INTERNAL_SERVER_ERROR, HTTP_OK
|
from homeassistant.const import (
|
||||||
|
HTTP_BAD_GATEWAY,
|
||||||
|
HTTP_BAD_REQUEST,
|
||||||
|
HTTP_INTERNAL_SERVER_ERROR,
|
||||||
|
HTTP_OK,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
|
)
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
@ -73,7 +79,10 @@ _CLOUD_ERRORS = {
|
|||||||
HTTP_INTERNAL_SERVER_ERROR,
|
HTTP_INTERNAL_SERVER_ERROR,
|
||||||
"Remote UI not compatible with 127.0.0.1/::1 as trusted proxies.",
|
"Remote UI not compatible with 127.0.0.1/::1 as trusted proxies.",
|
||||||
),
|
),
|
||||||
asyncio.TimeoutError: (502, "Unable to reach the Home Assistant cloud."),
|
asyncio.TimeoutError: (
|
||||||
|
HTTP_BAD_GATEWAY,
|
||||||
|
"Unable to reach the Home Assistant cloud.",
|
||||||
|
),
|
||||||
aiohttp.ClientError: (
|
aiohttp.ClientError: (
|
||||||
HTTP_INTERNAL_SERVER_ERROR,
|
HTTP_INTERNAL_SERVER_ERROR,
|
||||||
"Error making internal request",
|
"Error making internal request",
|
||||||
@ -122,7 +131,7 @@ async def async_setup(hass):
|
|||||||
HTTP_BAD_REQUEST,
|
HTTP_BAD_REQUEST,
|
||||||
"An account with the given email already exists.",
|
"An account with the given email already exists.",
|
||||||
),
|
),
|
||||||
auth.Unauthenticated: (401, "Authentication failed."),
|
auth.Unauthenticated: (HTTP_UNAUTHORIZED, "Authentication failed."),
|
||||||
auth.PasswordChangeRequired: (
|
auth.PasswordChangeRequired: (
|
||||||
HTTP_BAD_REQUEST,
|
HTTP_BAD_REQUEST,
|
||||||
"Password change required.",
|
"Password change required.",
|
||||||
@ -177,7 +186,7 @@ def _process_cloud_exception(exc, where):
|
|||||||
|
|
||||||
if err_info is None:
|
if err_info is None:
|
||||||
_LOGGER.exception("Unexpected error processing request for %s", where)
|
_LOGGER.exception("Unexpected error processing request for %s", where)
|
||||||
err_info = (502, f"Unexpected error: {exc}")
|
err_info = (HTTP_BAD_GATEWAY, f"Unexpected error: {exc}")
|
||||||
|
|
||||||
return err_info
|
return err_info
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ from aiohttp.web import Response
|
|||||||
|
|
||||||
from homeassistant.components.http import HomeAssistantView
|
from homeassistant.components.http import HomeAssistantView
|
||||||
from homeassistant.components.zwave import DEVICE_CONFIG_SCHEMA_ENTRY, const
|
from homeassistant.components.zwave import DEVICE_CONFIG_SCHEMA_ENTRY, const
|
||||||
from homeassistant.const import HTTP_BAD_REQUEST, HTTP_NOT_FOUND, HTTP_OK
|
from homeassistant.const import HTTP_ACCEPTED, HTTP_BAD_REQUEST, HTTP_NOT_FOUND, HTTP_OK
|
||||||
import homeassistant.core as ha
|
import homeassistant.core as ha
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
@ -254,7 +254,9 @@ class ZWaveProtectionView(HomeAssistantView):
|
|||||||
)
|
)
|
||||||
state = node.set_protection(value_id, selection)
|
state = node.set_protection(value_id, selection)
|
||||||
if not state:
|
if not state:
|
||||||
return self.json_message("Protection setting did not complete", 202)
|
return self.json_message(
|
||||||
|
"Protection setting did not complete", HTTP_ACCEPTED
|
||||||
|
)
|
||||||
return self.json_message("Protection setting succsessfully set", HTTP_OK)
|
return self.json_message("Protection setting succsessfully set", HTTP_OK)
|
||||||
|
|
||||||
return await hass.async_add_executor_job(_set_protection)
|
return await hass.async_add_executor_job(_set_protection)
|
||||||
|
@ -17,6 +17,7 @@ from homeassistant.const import (
|
|||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
CONF_VERIFY_SSL,
|
CONF_VERIFY_SSL,
|
||||||
HTTP_OK,
|
HTTP_OK,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
)
|
)
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
@ -155,7 +156,7 @@ class DdWrtDeviceScanner(DeviceScanner):
|
|||||||
return
|
return
|
||||||
if response.status_code == HTTP_OK:
|
if response.status_code == HTTP_OK:
|
||||||
return _parse_ddwrt_response(response.text)
|
return _parse_ddwrt_response(response.text)
|
||||||
if response.status_code == 401:
|
if response.status_code == HTTP_UNAUTHORIZED:
|
||||||
# Authentication error
|
# Authentication error
|
||||||
_LOGGER.exception(
|
_LOGGER.exception(
|
||||||
"Failed to authenticate, check your username and password"
|
"Failed to authenticate, check your username and password"
|
||||||
|
@ -19,6 +19,7 @@ from homeassistant.const import (
|
|||||||
CONF_TOKEN,
|
CONF_TOKEN,
|
||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
HTTP_OK,
|
HTTP_OK,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.exceptions import ConfigEntryNotReady
|
from homeassistant.exceptions import ConfigEntryNotReady
|
||||||
@ -127,7 +128,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):
|
|||||||
status = await hass.async_add_executor_job(device.ready)
|
status = await hass.async_add_executor_job(device.ready)
|
||||||
info = await hass.async_add_executor_job(device.info)
|
info = await hass.async_add_executor_job(device.info)
|
||||||
except urllib.error.HTTPError as err:
|
except urllib.error.HTTPError as err:
|
||||||
if err.code == 401:
|
if err.code == HTTP_UNAUTHORIZED:
|
||||||
_LOGGER.error(
|
_LOGGER.error(
|
||||||
"Authorization rejected by DoorBird for %s@%s", username, device_ip
|
"Authorization rejected by DoorBird for %s@%s", username, device_ip
|
||||||
)
|
)
|
||||||
@ -357,7 +358,9 @@ class DoorBirdRequestView(HomeAssistantView):
|
|||||||
device = get_doorstation_by_token(hass, token)
|
device = get_doorstation_by_token(hass, token)
|
||||||
|
|
||||||
if device is None:
|
if device is None:
|
||||||
return web.Response(status=401, text="Invalid token provided.")
|
return web.Response(
|
||||||
|
status=HTTP_UNAUTHORIZED, text="Invalid token provided."
|
||||||
|
)
|
||||||
|
|
||||||
if device:
|
if device:
|
||||||
event_data = device.get_event_data()
|
event_data = device.get_event_data()
|
||||||
|
@ -7,7 +7,13 @@ from doorbirdpy import DoorBird
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant import config_entries, core, exceptions
|
from homeassistant import config_entries, core, exceptions
|
||||||
from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PASSWORD, CONF_USERNAME
|
from homeassistant.const import (
|
||||||
|
CONF_HOST,
|
||||||
|
CONF_NAME,
|
||||||
|
CONF_PASSWORD,
|
||||||
|
CONF_USERNAME,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
|
)
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
from homeassistant.util.network import is_link_local
|
from homeassistant.util.network import is_link_local
|
||||||
|
|
||||||
@ -39,7 +45,7 @@ async def validate_input(hass: core.HomeAssistant, data):
|
|||||||
status = await hass.async_add_executor_job(device.ready)
|
status = await hass.async_add_executor_job(device.ready)
|
||||||
info = await hass.async_add_executor_job(device.info)
|
info = await hass.async_add_executor_job(device.info)
|
||||||
except urllib.error.HTTPError as err:
|
except urllib.error.HTTPError as err:
|
||||||
if err.code == 401:
|
if err.code == HTTP_UNAUTHORIZED:
|
||||||
raise InvalidAuth from err
|
raise InvalidAuth from err
|
||||||
raise CannotConnect from err
|
raise CannotConnect from err
|
||||||
except OSError as err:
|
except OSError as err:
|
||||||
|
@ -5,7 +5,12 @@ import requests
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.http import HomeAssistantView
|
from homeassistant.components.http import HomeAssistantView
|
||||||
from homeassistant.const import CONF_ACCESS_TOKEN, HTTP_BAD_REQUEST, HTTP_OK
|
from homeassistant.const import (
|
||||||
|
CONF_ACCESS_TOKEN,
|
||||||
|
HTTP_BAD_REQUEST,
|
||||||
|
HTTP_CREATED,
|
||||||
|
HTTP_OK,
|
||||||
|
)
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
@ -55,7 +60,7 @@ def setup(hass, config):
|
|||||||
url = f"https://api.foursquare.com/v2/checkins/add?oauth_token={config[CONF_ACCESS_TOKEN]}&v=20160802&m=swarm"
|
url = f"https://api.foursquare.com/v2/checkins/add?oauth_token={config[CONF_ACCESS_TOKEN]}&v=20160802&m=swarm"
|
||||||
response = requests.post(url, data=call.data, timeout=10)
|
response = requests.post(url, data=call.data, timeout=10)
|
||||||
|
|
||||||
if response.status_code not in (HTTP_OK, 201):
|
if response.status_code not in (HTTP_OK, HTTP_CREATED):
|
||||||
_LOGGER.exception(
|
_LOGGER.exception(
|
||||||
"Error checking in user. Response %d: %s:",
|
"Error checking in user. Response %d: %s:",
|
||||||
response.status_code,
|
response.status_code,
|
||||||
|
@ -10,7 +10,11 @@ import jwt
|
|||||||
|
|
||||||
# Typing imports
|
# Typing imports
|
||||||
from homeassistant.components.http import HomeAssistantView
|
from homeassistant.components.http import HomeAssistantView
|
||||||
from homeassistant.const import CLOUD_NEVER_EXPOSED_ENTITIES, HTTP_INTERNAL_SERVER_ERROR
|
from homeassistant.const import (
|
||||||
|
CLOUD_NEVER_EXPOSED_ENTITIES,
|
||||||
|
HTTP_INTERNAL_SERVER_ERROR,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
|
)
|
||||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||||
from homeassistant.util import dt as dt_util
|
from homeassistant.util import dt as dt_util
|
||||||
|
|
||||||
@ -200,7 +204,7 @@ class GoogleConfig(AbstractConfig):
|
|||||||
try:
|
try:
|
||||||
return await _call()
|
return await _call()
|
||||||
except ClientResponseError as error:
|
except ClientResponseError as error:
|
||||||
if error.status == 401:
|
if error.status == HTTP_UNAUTHORIZED:
|
||||||
_LOGGER.warning(
|
_LOGGER.warning(
|
||||||
"Request for %s unauthorized, renewing token and retrying", url
|
"Request for %s unauthorized, renewing token and retrying", url
|
||||||
)
|
)
|
||||||
|
@ -12,6 +12,7 @@ from aiohttp.web_exceptions import HTTPBadGateway
|
|||||||
import async_timeout
|
import async_timeout
|
||||||
|
|
||||||
from homeassistant.components.http import KEY_AUTHENTICATED, HomeAssistantView
|
from homeassistant.components.http import KEY_AUTHENTICATED, HomeAssistantView
|
||||||
|
from homeassistant.const import HTTP_UNAUTHORIZED
|
||||||
|
|
||||||
from .const import X_HASS_IS_ADMIN, X_HASS_USER_ID, X_HASSIO
|
from .const import X_HASS_IS_ADMIN, X_HASS_USER_ID, X_HASSIO
|
||||||
|
|
||||||
@ -53,7 +54,7 @@ class HassIOView(HomeAssistantView):
|
|||||||
) -> Union[web.Response, web.StreamResponse]:
|
) -> Union[web.Response, web.StreamResponse]:
|
||||||
"""Route data to Hass.io."""
|
"""Route data to Hass.io."""
|
||||||
if _need_auth(path) and not request[KEY_AUTHENTICATED]:
|
if _need_auth(path) and not request[KEY_AUTHENTICATED]:
|
||||||
return web.Response(status=401)
|
return web.Response(status=HTTP_UNAUTHORIZED)
|
||||||
|
|
||||||
return await self._command_proxy(path, request)
|
return await self._command_proxy(path, request)
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ from homeassistant.components.notify import (
|
|||||||
ATTR_TITLE_DEFAULT,
|
ATTR_TITLE_DEFAULT,
|
||||||
BaseNotificationService,
|
BaseNotificationService,
|
||||||
)
|
)
|
||||||
|
from homeassistant.const import HTTP_CREATED, HTTP_TOO_MANY_REQUESTS
|
||||||
import homeassistant.util.dt as dt_util
|
import homeassistant.util.dt as dt_util
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
@ -90,13 +91,13 @@ class iOSNotificationService(BaseNotificationService):
|
|||||||
|
|
||||||
req = requests.post(PUSH_URL, json=data, timeout=10)
|
req = requests.post(PUSH_URL, json=data, timeout=10)
|
||||||
|
|
||||||
if req.status_code != 201:
|
if req.status_code != HTTP_CREATED:
|
||||||
fallback_error = req.json().get("errorMessage", "Unknown error")
|
fallback_error = req.json().get("errorMessage", "Unknown error")
|
||||||
fallback_message = (
|
fallback_message = (
|
||||||
f"Internal server error, please try again later: {fallback_error}"
|
f"Internal server error, please try again later: {fallback_error}"
|
||||||
)
|
)
|
||||||
message = req.json().get("message", fallback_message)
|
message = req.json().get("message", fallback_message)
|
||||||
if req.status_code == 429:
|
if req.status_code == HTTP_TOO_MANY_REQUESTS:
|
||||||
_LOGGER.warning(message)
|
_LOGGER.warning(message)
|
||||||
log_rate_limits(self.hass, target, req.json(), 30)
|
log_rate_limits(self.hass, target, req.json(), 30)
|
||||||
else:
|
else:
|
||||||
|
@ -9,7 +9,13 @@ import async_timeout
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.scene import Scene
|
from homeassistant.components.scene import Scene
|
||||||
from homeassistant.const import CONF_PLATFORM, CONF_TIMEOUT, CONF_TOKEN, HTTP_OK
|
from homeassistant.const import (
|
||||||
|
CONF_PLATFORM,
|
||||||
|
CONF_TIMEOUT,
|
||||||
|
CONF_TOKEN,
|
||||||
|
HTTP_OK,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
|
)
|
||||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
@ -50,7 +56,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
|||||||
devices = [LifxCloudScene(hass, headers, timeout, scene) for scene in data]
|
devices = [LifxCloudScene(hass, headers, timeout, scene) for scene in data]
|
||||||
async_add_entities(devices)
|
async_add_entities(devices)
|
||||||
return True
|
return True
|
||||||
if status == 401:
|
if status == HTTP_UNAUTHORIZED:
|
||||||
_LOGGER.error("Unauthorized (bad token?) on %s", url)
|
_LOGGER.error("Unauthorized (bad token?) on %s", url)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ from homeassistant.const import (
|
|||||||
HTTP_INTERNAL_SERVER_ERROR,
|
HTTP_INTERNAL_SERVER_ERROR,
|
||||||
HTTP_NOT_FOUND,
|
HTTP_NOT_FOUND,
|
||||||
HTTP_OK,
|
HTTP_OK,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
SERVICE_MEDIA_NEXT_TRACK,
|
SERVICE_MEDIA_NEXT_TRACK,
|
||||||
SERVICE_MEDIA_PAUSE,
|
SERVICE_MEDIA_PAUSE,
|
||||||
SERVICE_MEDIA_PLAY,
|
SERVICE_MEDIA_PLAY,
|
||||||
@ -880,7 +881,7 @@ class MediaPlayerImageView(HomeAssistantView):
|
|||||||
"""Start a get request."""
|
"""Start a get request."""
|
||||||
player = self.component.get_entity(entity_id)
|
player = self.component.get_entity(entity_id)
|
||||||
if player is None:
|
if player is None:
|
||||||
status = HTTP_NOT_FOUND if request[KEY_AUTHENTICATED] else 401
|
status = HTTP_NOT_FOUND if request[KEY_AUTHENTICATED] else HTTP_UNAUTHORIZED
|
||||||
return web.Response(status=status)
|
return web.Response(status=status)
|
||||||
|
|
||||||
authenticated = (
|
authenticated = (
|
||||||
@ -889,7 +890,7 @@ class MediaPlayerImageView(HomeAssistantView):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if not authenticated:
|
if not authenticated:
|
||||||
return web.Response(status=401)
|
return web.Response(status=HTTP_UNAUTHORIZED)
|
||||||
|
|
||||||
data, content_type = await player.async_get_media_image()
|
data, content_type = await player.async_get_media_image()
|
||||||
|
|
||||||
|
@ -9,7 +9,13 @@ import pymelcloud
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
from homeassistant.const import CONF_PASSWORD, CONF_TOKEN, CONF_USERNAME, HTTP_FORBIDDEN
|
from homeassistant.const import (
|
||||||
|
CONF_PASSWORD,
|
||||||
|
CONF_TOKEN,
|
||||||
|
CONF_USERNAME,
|
||||||
|
HTTP_FORBIDDEN,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
|
)
|
||||||
|
|
||||||
from .const import DOMAIN # pylint: disable=unused-import
|
from .const import DOMAIN # pylint: disable=unused-import
|
||||||
|
|
||||||
@ -57,7 +63,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
self.hass.helpers.aiohttp_client.async_get_clientsession(),
|
self.hass.helpers.aiohttp_client.async_get_clientsession(),
|
||||||
)
|
)
|
||||||
except ClientResponseError as err:
|
except ClientResponseError as err:
|
||||||
if err.status == 401 or err.status == HTTP_FORBIDDEN:
|
if err.status == HTTP_UNAUTHORIZED or err.status == HTTP_FORBIDDEN:
|
||||||
return self.async_abort(reason="invalid_auth")
|
return self.async_abort(reason="invalid_auth")
|
||||||
return self.async_abort(reason="cannot_connect")
|
return self.async_abort(reason="cannot_connect")
|
||||||
except (asyncio.TimeoutError, ClientError):
|
except (asyncio.TimeoutError, ClientError):
|
||||||
|
@ -12,7 +12,12 @@ from homeassistant.components.notify import (
|
|||||||
ATTR_TITLE_DEFAULT,
|
ATTR_TITLE_DEFAULT,
|
||||||
BaseNotificationService,
|
BaseNotificationService,
|
||||||
)
|
)
|
||||||
from homeassistant.const import HTTP_OK
|
from homeassistant.const import (
|
||||||
|
HTTP_ACCEPTED,
|
||||||
|
HTTP_CREATED,
|
||||||
|
HTTP_OK,
|
||||||
|
HTTP_TOO_MANY_REQUESTS,
|
||||||
|
)
|
||||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||||
import homeassistant.util.dt as dt_util
|
import homeassistant.util.dt as dt_util
|
||||||
|
|
||||||
@ -135,7 +140,7 @@ class MobileAppNotificationService(BaseNotificationService):
|
|||||||
response = await self._session.post(push_url, json=data)
|
response = await self._session.post(push_url, json=data)
|
||||||
result = await response.json()
|
result = await response.json()
|
||||||
|
|
||||||
if response.status in [HTTP_OK, 201, 202]:
|
if response.status in [HTTP_OK, HTTP_CREATED, HTTP_ACCEPTED]:
|
||||||
log_rate_limits(self.hass, entry_data[ATTR_DEVICE_NAME], result)
|
log_rate_limits(self.hass, entry_data[ATTR_DEVICE_NAME], result)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@ -152,7 +157,7 @@ class MobileAppNotificationService(BaseNotificationService):
|
|||||||
" This message is generated externally to Home Assistant."
|
" This message is generated externally to Home Assistant."
|
||||||
)
|
)
|
||||||
|
|
||||||
if response.status == 429:
|
if response.status == HTTP_TOO_MANY_REQUESTS:
|
||||||
_LOGGER.warning(message)
|
_LOGGER.warning(message)
|
||||||
log_rate_limits(
|
log_rate_limits(
|
||||||
self.hass, entry_data[ATTR_DEVICE_NAME], result, logging.WARNING
|
self.hass, entry_data[ATTR_DEVICE_NAME], result, logging.WARNING
|
||||||
|
@ -4,6 +4,7 @@ from functools import partial
|
|||||||
|
|
||||||
from nest.nest import AUTHORIZE_URL, AuthorizationError, NestAuth
|
from nest.nest import AUTHORIZE_URL, AuthorizationError, NestAuth
|
||||||
|
|
||||||
|
from homeassistant.const import HTTP_UNAUTHORIZED
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
|
|
||||||
from . import config_flow
|
from . import config_flow
|
||||||
@ -42,7 +43,7 @@ async def resolve_auth_code(hass, client_id, client_secret, code):
|
|||||||
await hass.async_add_job(auth.login)
|
await hass.async_add_job(auth.login)
|
||||||
return await result
|
return await result
|
||||||
except AuthorizationError as err:
|
except AuthorizationError as err:
|
||||||
if err.response.status_code == 401:
|
if err.response.status_code == HTTP_UNAUTHORIZED:
|
||||||
raise config_flow.CodeInvalid()
|
raise config_flow.CodeInvalid()
|
||||||
raise config_flow.NestAuthError(
|
raise config_flow.NestAuthError(
|
||||||
f"Unknown error: {err} ({err.response.status_code})"
|
f"Unknown error: {err} ({err.response.status_code})"
|
||||||
|
@ -17,6 +17,7 @@ from homeassistant.const import (
|
|||||||
EVENT_HOMEASSISTANT_STOP,
|
EVENT_HOMEASSISTANT_STOP,
|
||||||
HTTP_BASIC_AUTHENTICATION,
|
HTTP_BASIC_AUTHENTICATION,
|
||||||
HTTP_DIGEST_AUTHENTICATION,
|
HTTP_DIGEST_AUTHENTICATION,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.exceptions import ConfigEntryNotReady
|
from homeassistant.exceptions import ConfigEntryNotReady
|
||||||
@ -138,7 +139,7 @@ async def _get_snapshot_auth(hass, device, entry):
|
|||||||
try:
|
try:
|
||||||
response = await hass.async_add_executor_job(_get)
|
response = await hass.async_add_executor_job(_get)
|
||||||
|
|
||||||
if response.status_code == 401:
|
if response.status_code == HTTP_UNAUTHORIZED:
|
||||||
return HTTP_BASIC_AUTHENTICATION
|
return HTTP_BASIC_AUTHENTICATION
|
||||||
|
|
||||||
return HTTP_DIGEST_AUTHENTICATION
|
return HTTP_DIGEST_AUTHENTICATION
|
||||||
|
@ -15,6 +15,7 @@ from homeassistant.const import (
|
|||||||
CONF_RECIPIENT,
|
CONF_RECIPIENT,
|
||||||
CONF_SENDER,
|
CONF_SENDER,
|
||||||
CONTENT_TYPE_TEXT_PLAIN,
|
CONTENT_TYPE_TEXT_PLAIN,
|
||||||
|
HTTP_ACCEPTED,
|
||||||
)
|
)
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
@ -65,5 +66,5 @@ class SendgridNotificationService(BaseNotificationService):
|
|||||||
}
|
}
|
||||||
|
|
||||||
response = self._sg.client.mail.send.post(request_body=data)
|
response = self._sg.client.mail.send.post(request_body=data)
|
||||||
if response.status_code != 202:
|
if response.status_code != HTTP_ACCEPTED:
|
||||||
_LOGGER.error("Unable to send notification")
|
_LOGGER.error("Unable to send notification")
|
||||||
|
@ -8,7 +8,12 @@ import async_timeout
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant import config_entries, core
|
from homeassistant import config_entries, core
|
||||||
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME
|
from homeassistant.const import (
|
||||||
|
CONF_HOST,
|
||||||
|
CONF_PASSWORD,
|
||||||
|
CONF_USERNAME,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
|
)
|
||||||
from homeassistant.helpers import aiohttp_client
|
from homeassistant.helpers import aiohttp_client
|
||||||
|
|
||||||
from .const import DOMAIN # pylint:disable=unused-import
|
from .const import DOMAIN # pylint:disable=unused-import
|
||||||
@ -91,7 +96,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
try:
|
try:
|
||||||
device_info = await validate_input(self.hass, self.host, user_input)
|
device_info = await validate_input(self.hass, self.host, user_input)
|
||||||
except aiohttp.ClientResponseError as error:
|
except aiohttp.ClientResponseError as error:
|
||||||
if error.status == 401:
|
if error.status == HTTP_UNAUTHORIZED:
|
||||||
errors["base"] = "invalid_auth"
|
errors["base"] = "invalid_auth"
|
||||||
else:
|
else:
|
||||||
errors["base"] = "cannot_connect"
|
errors["base"] = "cannot_connect"
|
||||||
|
@ -8,7 +8,7 @@ import requests
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
||||||
from homeassistant.const import CONF_NAME, HTTP_OK
|
from homeassistant.const import CONF_NAME, HTTP_OK, HTTP_UNAUTHORIZED
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ class SigfoxAPI:
|
|||||||
url = urljoin(API_URL, "devicetypes")
|
url = urljoin(API_URL, "devicetypes")
|
||||||
response = requests.get(url, auth=self._auth, timeout=10)
|
response = requests.get(url, auth=self._auth, timeout=10)
|
||||||
if response.status_code != HTTP_OK:
|
if response.status_code != HTTP_OK:
|
||||||
if response.status_code == 401:
|
if response.status_code == HTTP_UNAUTHORIZED:
|
||||||
_LOGGER.error("Invalid credentials for Sigfox API")
|
_LOGGER.error("Invalid credentials for Sigfox API")
|
||||||
else:
|
else:
|
||||||
_LOGGER.error(
|
_LOGGER.error(
|
||||||
|
@ -14,6 +14,7 @@ from homeassistant.const import (
|
|||||||
CONF_CLIENT_ID,
|
CONF_CLIENT_ID,
|
||||||
CONF_CLIENT_SECRET,
|
CONF_CLIENT_SECRET,
|
||||||
HTTP_FORBIDDEN,
|
HTTP_FORBIDDEN,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
)
|
)
|
||||||
from homeassistant.exceptions import ConfigEntryNotReady
|
from homeassistant.exceptions import ConfigEntryNotReady
|
||||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||||
@ -158,7 +159,7 @@ async def async_setup_entry(hass: HomeAssistantType, entry: ConfigEntry):
|
|||||||
hass.data[DOMAIN][DATA_BROKERS][entry.entry_id] = broker
|
hass.data[DOMAIN][DATA_BROKERS][entry.entry_id] = broker
|
||||||
|
|
||||||
except ClientResponseError as ex:
|
except ClientResponseError as ex:
|
||||||
if ex.status in (401, HTTP_FORBIDDEN):
|
if ex.status in (HTTP_UNAUTHORIZED, HTTP_FORBIDDEN):
|
||||||
_LOGGER.exception(
|
_LOGGER.exception(
|
||||||
"Unable to setup configuration entry '%s' - please reconfigure the integration",
|
"Unable to setup configuration entry '%s' - please reconfigure the integration",
|
||||||
entry.title,
|
entry.title,
|
||||||
|
@ -10,7 +10,7 @@ from homeassistant.components.notify import (
|
|||||||
PLATFORM_SCHEMA,
|
PLATFORM_SCHEMA,
|
||||||
BaseNotificationService,
|
BaseNotificationService,
|
||||||
)
|
)
|
||||||
from homeassistant.const import CONF_RESOURCE, CONF_VERIFY_SSL, HTTP_OK
|
from homeassistant.const import CONF_RESOURCE, CONF_VERIFY_SSL, HTTP_CREATED, HTTP_OK
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
ATTR_FILE_URL = "file_url"
|
ATTR_FILE_URL = "file_url"
|
||||||
@ -57,7 +57,7 @@ class SynologyChatNotificationService(BaseNotificationService):
|
|||||||
self._resource, data=to_send, timeout=10, verify=self._verify_ssl
|
self._resource, data=to_send, timeout=10, verify=self._verify_ssl
|
||||||
)
|
)
|
||||||
|
|
||||||
if response.status_code not in (HTTP_OK, 201):
|
if response.status_code not in (HTTP_OK, HTTP_CREATED):
|
||||||
_LOGGER.exception(
|
_LOGGER.exception(
|
||||||
"Error sending message. Response %d: %s:",
|
"Error sending message. Response %d: %s:",
|
||||||
response.status_code,
|
response.status_code,
|
||||||
|
@ -11,6 +11,7 @@ from homeassistant.const import (
|
|||||||
CONF_SCAN_INTERVAL,
|
CONF_SCAN_INTERVAL,
|
||||||
CONF_TOKEN,
|
CONF_TOKEN,
|
||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
)
|
)
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
from homeassistant.helpers import aiohttp_client, config_validation as cv
|
from homeassistant.helpers import aiohttp_client, config_validation as cv
|
||||||
@ -140,7 +141,7 @@ async def validate_input(hass: core.HomeAssistant, data):
|
|||||||
test_login=True
|
test_login=True
|
||||||
)
|
)
|
||||||
except TeslaException as ex:
|
except TeslaException as ex:
|
||||||
if ex.code == 401:
|
if ex.code == HTTP_UNAUTHORIZED:
|
||||||
_LOGGER.error("Invalid credentials: %s", ex)
|
_LOGGER.error("Invalid credentials: %s", ex)
|
||||||
raise InvalidAuth() from ex
|
raise InvalidAuth() from ex
|
||||||
_LOGGER.error("Unable to communicate with Tesla API: %s", ex)
|
_LOGGER.error("Unable to communicate with Tesla API: %s", ex)
|
||||||
|
@ -8,7 +8,7 @@ import async_timeout
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
from homeassistant.components.sensor import PLATFORM_SCHEMA
|
||||||
from homeassistant.const import CONTENT_TYPE_JSON, HTTP_NOT_FOUND
|
from homeassistant.const import CONTENT_TYPE_JSON, HTTP_NOT_FOUND, HTTP_UNAUTHORIZED
|
||||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
@ -135,7 +135,7 @@ class TtnDataStorage:
|
|||||||
_LOGGER.error("The device is not available: %s", self._device_id)
|
_LOGGER.error("The device is not available: %s", self._device_id)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if status == 401:
|
if status == HTTP_UNAUTHORIZED:
|
||||||
_LOGGER.error("Not authorized for Application ID: %s", self._app_id)
|
_LOGGER.error("Not authorized for Application ID: %s", self._app_id)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ from homeassistant.const import (
|
|||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
CONF_VERIFY_SSL,
|
CONF_VERIFY_SSL,
|
||||||
HTTP_OK,
|
HTTP_OK,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
)
|
)
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
@ -111,7 +112,7 @@ class TomatoDeviceScanner(DeviceScanner):
|
|||||||
self.last_results[param] = json.loads(value.replace("'", '"'))
|
self.last_results[param] = json.loads(value.replace("'", '"'))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if response.status_code == 401:
|
if response.status_code == HTTP_UNAUTHORIZED:
|
||||||
# Authentication error
|
# Authentication error
|
||||||
_LOGGER.exception(
|
_LOGGER.exception(
|
||||||
"Failed to authenticate, please check your username and password"
|
"Failed to authenticate, please check your username and password"
|
||||||
|
@ -12,6 +12,7 @@ from homeassistant.const import (
|
|||||||
CONF_SCAN_INTERVAL,
|
CONF_SCAN_INTERVAL,
|
||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
EVENT_HOMEASSISTANT_STOP,
|
EVENT_HOMEASSISTANT_STOP,
|
||||||
|
HTTP_SERVICE_UNAVAILABLE,
|
||||||
)
|
)
|
||||||
from homeassistant.helpers import discovery
|
from homeassistant.helpers import discovery
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
@ -189,7 +190,7 @@ class VerisureHub:
|
|||||||
self.overview = self.session.get_overview()
|
self.overview = self.session.get_overview()
|
||||||
except verisure.ResponseError as ex:
|
except verisure.ResponseError as ex:
|
||||||
_LOGGER.error("Could not read overview, %s", ex)
|
_LOGGER.error("Could not read overview, %s", ex)
|
||||||
if ex.status_code == 503: # Service unavailable
|
if ex.status_code == HTTP_SERVICE_UNAVAILABLE: # Service unavailable
|
||||||
_LOGGER.info("Trying to log in again")
|
_LOGGER.info("Trying to log in again")
|
||||||
self.login()
|
self.login()
|
||||||
else:
|
else:
|
||||||
|
@ -29,6 +29,7 @@ from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
|||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_WEBHOOK_ID,
|
CONF_WEBHOOK_ID,
|
||||||
|
HTTP_UNAUTHORIZED,
|
||||||
MASS_KILOGRAMS,
|
MASS_KILOGRAMS,
|
||||||
PERCENTAGE,
|
PERCENTAGE,
|
||||||
SPEED_METERS_PER_SECOND,
|
SPEED_METERS_PER_SECOND,
|
||||||
@ -54,7 +55,7 @@ from .const import Measurement
|
|||||||
|
|
||||||
_LOGGER = logging.getLogger(const.LOG_NAMESPACE)
|
_LOGGER = logging.getLogger(const.LOG_NAMESPACE)
|
||||||
NOT_AUTHENTICATED_ERROR = re.compile(
|
NOT_AUTHENTICATED_ERROR = re.compile(
|
||||||
"^401,.*",
|
f"^{HTTP_UNAUTHORIZED},.*",
|
||||||
re.IGNORECASE,
|
re.IGNORECASE,
|
||||||
)
|
)
|
||||||
DATA_UPDATED_SIGNAL = "withings_entity_state_updated"
|
DATA_UPDATED_SIGNAL = "withings_entity_state_updated"
|
||||||
|
@ -564,6 +564,7 @@ URL_API_TEMPLATE = "/api/template"
|
|||||||
|
|
||||||
HTTP_OK = 200
|
HTTP_OK = 200
|
||||||
HTTP_CREATED = 201
|
HTTP_CREATED = 201
|
||||||
|
HTTP_ACCEPTED = 202
|
||||||
HTTP_MOVED_PERMANENTLY = 301
|
HTTP_MOVED_PERMANENTLY = 301
|
||||||
HTTP_BAD_REQUEST = 400
|
HTTP_BAD_REQUEST = 400
|
||||||
HTTP_UNAUTHORIZED = 401
|
HTTP_UNAUTHORIZED = 401
|
||||||
@ -573,6 +574,7 @@ HTTP_METHOD_NOT_ALLOWED = 405
|
|||||||
HTTP_UNPROCESSABLE_ENTITY = 422
|
HTTP_UNPROCESSABLE_ENTITY = 422
|
||||||
HTTP_TOO_MANY_REQUESTS = 429
|
HTTP_TOO_MANY_REQUESTS = 429
|
||||||
HTTP_INTERNAL_SERVER_ERROR = 500
|
HTTP_INTERNAL_SERVER_ERROR = 500
|
||||||
|
HTTP_BAD_GATEWAY = 502
|
||||||
HTTP_SERVICE_UNAVAILABLE = 503
|
HTTP_SERVICE_UNAVAILABLE = 503
|
||||||
|
|
||||||
HTTP_BASIC_AUTHENTICATION = "basic"
|
HTTP_BASIC_AUTHENTICATION = "basic"
|
||||||
|
@ -8,7 +8,7 @@ import voluptuous as vol
|
|||||||
from homeassistant import config_entries, data_entry_flow
|
from homeassistant import config_entries, data_entry_flow
|
||||||
from homeassistant.components.http import HomeAssistantView
|
from homeassistant.components.http import HomeAssistantView
|
||||||
from homeassistant.components.http.data_validator import RequestDataValidator
|
from homeassistant.components.http.data_validator import RequestDataValidator
|
||||||
from homeassistant.const import HTTP_NOT_FOUND
|
from homeassistant.const import HTTP_BAD_REQUEST, HTTP_NOT_FOUND
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ class FlowManagerIndexView(_BaseFlowManagerView):
|
|||||||
except data_entry_flow.UnknownHandler:
|
except data_entry_flow.UnknownHandler:
|
||||||
return self.json_message("Invalid handler specified", HTTP_NOT_FOUND)
|
return self.json_message("Invalid handler specified", HTTP_NOT_FOUND)
|
||||||
except data_entry_flow.UnknownStep:
|
except data_entry_flow.UnknownStep:
|
||||||
return self.json_message("Handler does not support user", 400)
|
return self.json_message("Handler does not support user", HTTP_BAD_REQUEST)
|
||||||
|
|
||||||
result = self._prepare_result_json(result)
|
result = self._prepare_result_json(result)
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ class FlowManagerResourceView(_BaseFlowManagerView):
|
|||||||
except data_entry_flow.UnknownFlow:
|
except data_entry_flow.UnknownFlow:
|
||||||
return self.json_message("Invalid flow specified", HTTP_NOT_FOUND)
|
return self.json_message("Invalid flow specified", HTTP_NOT_FOUND)
|
||||||
except vol.Invalid:
|
except vol.Invalid:
|
||||||
return self.json_message("User input malformed", 400)
|
return self.json_message("User input malformed", HTTP_BAD_REQUEST)
|
||||||
|
|
||||||
result = self._prepare_result_json(result)
|
result = self._prepare_result_json(result)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user