diff --git a/homeassistant/components/fibaro/__init__.py b/homeassistant/components/fibaro/__init__.py index 52ecb881205..89529046f85 100644 --- a/homeassistant/components/fibaro/__init__.py +++ b/homeassistant/components/fibaro/__init__.py @@ -247,8 +247,8 @@ class FibaroController: room_name = self._room_map[device.roomID].name device.room_name = room_name device.friendly_name = f"{room_name} {device.name}" - device.ha_id = "scene_{}_{}_{}".format( - slugify(room_name), slugify(device.name), device.id + device.ha_id = ( + f"scene_{slugify(room_name)}_{slugify(device.name)}_{device.id}" ) device.unique_id_str = f"{self.hub_serial}.scene.{device.id}" self._scene_map[device.id] = device @@ -269,8 +269,8 @@ class FibaroController: room_name = self._room_map[device.roomID].name device.room_name = room_name device.friendly_name = f"{room_name} {device.name}" - device.ha_id = "{}_{}_{}".format( - slugify(room_name), slugify(device.name), device.id + device.ha_id = ( + f"{slugify(room_name)}_{slugify(device.name)}_{device.id}" ) if ( device.enabled diff --git a/homeassistant/components/fibaro/binary_sensor.py b/homeassistant/components/fibaro/binary_sensor.py index af2c2a9401a..fa2d6ceb3c6 100644 --- a/homeassistant/components/fibaro/binary_sensor.py +++ b/homeassistant/components/fibaro/binary_sensor.py @@ -1,7 +1,7 @@ """Support for Fibaro binary sensors.""" import logging -from homeassistant.components.binary_sensor import ENTITY_ID_FORMAT, BinarySensorDevice +from homeassistant.components.binary_sensor import DOMAIN, BinarySensorDevice from homeassistant.const import CONF_DEVICE_CLASS, CONF_ICON from . import FIBARO_DEVICES, FibaroDevice @@ -40,7 +40,7 @@ class FibaroBinarySensor(FibaroDevice, BinarySensorDevice): """Initialize the binary_sensor.""" self._state = None super().__init__(fibaro_device) - self.entity_id = ENTITY_ID_FORMAT.format(self.ha_id) + self.entity_id = f"{DOMAIN}.{self.ha_id}" stype = None devconf = fibaro_device.device_config if fibaro_device.type in SENSOR_TYPES: diff --git a/homeassistant/components/fibaro/cover.py b/homeassistant/components/fibaro/cover.py index fe9c0990fa8..d2f8094f26d 100644 --- a/homeassistant/components/fibaro/cover.py +++ b/homeassistant/components/fibaro/cover.py @@ -4,7 +4,7 @@ import logging from homeassistant.components.cover import ( ATTR_POSITION, ATTR_TILT_POSITION, - ENTITY_ID_FORMAT, + DOMAIN, CoverDevice, ) @@ -29,7 +29,7 @@ class FibaroCover(FibaroDevice, CoverDevice): def __init__(self, fibaro_device): """Initialize the Vera device.""" super().__init__(fibaro_device) - self.entity_id = ENTITY_ID_FORMAT.format(self.ha_id) + self.entity_id = f"{DOMAIN}.{self.ha_id}" @staticmethod def bound(position): diff --git a/homeassistant/components/fibaro/light.py b/homeassistant/components/fibaro/light.py index 38779a05cb0..d14d9a195d9 100644 --- a/homeassistant/components/fibaro/light.py +++ b/homeassistant/components/fibaro/light.py @@ -7,7 +7,7 @@ from homeassistant.components.light import ( ATTR_BRIGHTNESS, ATTR_HS_COLOR, ATTR_WHITE_VALUE, - ENTITY_ID_FORMAT, + DOMAIN, SUPPORT_BRIGHTNESS, SUPPORT_COLOR, SUPPORT_WHITE_VALUE, @@ -77,7 +77,7 @@ class FibaroLight(FibaroDevice, Light): self._supported_flags |= SUPPORT_WHITE_VALUE super().__init__(fibaro_device) - self.entity_id = ENTITY_ID_FORMAT.format(self.ha_id) + self.entity_id = f"{DOMAIN}.{self.ha_id}" @property def brightness(self): diff --git a/homeassistant/components/fibaro/sensor.py b/homeassistant/components/fibaro/sensor.py index 720249b9b8a..5fce0da7a2b 100644 --- a/homeassistant/components/fibaro/sensor.py +++ b/homeassistant/components/fibaro/sensor.py @@ -1,7 +1,7 @@ """Support for Fibaro sensors.""" import logging -from homeassistant.components.sensor import ENTITY_ID_FORMAT +from homeassistant.components.sensor import DOMAIN from homeassistant.const import ( CONCENTRATION_PARTS_PER_MILLION, DEVICE_CLASS_HUMIDITY, @@ -53,7 +53,7 @@ class FibaroSensor(FibaroDevice, Entity): self.current_value = None self.last_changed_time = None super().__init__(fibaro_device) - self.entity_id = ENTITY_ID_FORMAT.format(self.ha_id) + self.entity_id = f"{DOMAIN}.{self.ha_id}" if fibaro_device.type in SENSOR_TYPES: self._unit = SENSOR_TYPES[fibaro_device.type][1] self._icon = SENSOR_TYPES[fibaro_device.type][2] diff --git a/homeassistant/components/fibaro/switch.py b/homeassistant/components/fibaro/switch.py index 4bb8c34d579..b00e5817c9e 100644 --- a/homeassistant/components/fibaro/switch.py +++ b/homeassistant/components/fibaro/switch.py @@ -1,7 +1,7 @@ """Support for Fibaro switches.""" import logging -from homeassistant.components.switch import ENTITY_ID_FORMAT, SwitchDevice +from homeassistant.components.switch import DOMAIN, SwitchDevice from homeassistant.util import convert from . import FIBARO_DEVICES, FibaroDevice @@ -26,7 +26,7 @@ class FibaroSwitch(FibaroDevice, SwitchDevice): """Initialize the Fibaro device.""" self._state = False super().__init__(fibaro_device) - self.entity_id = ENTITY_ID_FORMAT.format(self.ha_id) + self.entity_id = f"{DOMAIN}.{self.ha_id}" def turn_on(self, **kwargs): """Turn device on.""" diff --git a/homeassistant/components/file/notify.py b/homeassistant/components/file/notify.py index 4cd83e64a83..528d44bbb83 100644 --- a/homeassistant/components/file/notify.py +++ b/homeassistant/components/file/notify.py @@ -46,15 +46,11 @@ class FileNotificationService(BaseNotificationService): """Send a message to a file.""" with open(self.filepath, "a") as file: if os.stat(self.filepath).st_size == 0: - title = "{} notifications (Log started: {})\n{}\n".format( - kwargs.get(ATTR_TITLE, ATTR_TITLE_DEFAULT), - dt_util.utcnow().isoformat(), - "-" * 80, - ) + title = f"{kwargs.get(ATTR_TITLE, ATTR_TITLE_DEFAULT)} notifications (Log started: {dt_util.utcnow().isoformat()})\n{'-' * 80}\n" file.write(title) if self.add_timestamp: - text = "{} {}\n".format(dt_util.utcnow().isoformat(), message) + text = f"{dt_util.utcnow().isoformat()} {message}\n" else: text = f"{message}\n" file.write(text) diff --git a/homeassistant/components/fitbit/sensor.py b/homeassistant/components/fitbit/sensor.py index 4c5d55e0241..b6a4fe550c9 100644 --- a/homeassistant/components/fitbit/sensor.py +++ b/homeassistant/components/fitbit/sensor.py @@ -181,16 +181,14 @@ def request_app_setup(hass, config, add_entities, config_path, discovery_info=No start_url = f"{hass.config.api.base_url}{FITBIT_AUTH_CALLBACK_PATH}" - description = """Please create a Fitbit developer app at + description = f"""Please create a Fitbit developer app at https://dev.fitbit.com/apps/new. For the OAuth 2.0 Application Type choose Personal. - Set the Callback URL to {}. + Set the Callback URL to {start_url}. They will provide you a Client ID and secret. - These need to be saved into the file located at: {}. + These need to be saved into the file located at: {config_path}. Then come back here and hit the below button. - """.format( - start_url, config_path - ) + """ submit = "I have saved my Client ID and Client Secret into fitbit.conf." @@ -308,9 +306,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): config_file.get(ATTR_CLIENT_ID), config_file.get(ATTR_CLIENT_SECRET) ) - redirect_uri = "{}{}".format( - hass.config.api.base_url, FITBIT_AUTH_CALLBACK_PATH - ) + redirect_uri = f"{hass.config.api.base_url}{FITBIT_AUTH_CALLBACK_PATH}" fitbit_auth_start_url, _ = oauth.authorize_token_url( redirect_uri=redirect_uri, @@ -355,26 +351,20 @@ class FitbitAuthCallbackView(HomeAssistantView): result = None if data.get("code") is not None: - redirect_uri = "{}{}".format( - hass.config.api.base_url, FITBIT_AUTH_CALLBACK_PATH - ) + redirect_uri = f"{hass.config.api.base_url}{FITBIT_AUTH_CALLBACK_PATH}" try: result = self.oauth.fetch_access_token(data.get("code"), redirect_uri) except MissingTokenError as error: _LOGGER.error("Missing token: %s", error) - response_message = """Something went wrong when + response_message = f"""Something went wrong when attempting authenticating with Fitbit. The error - encountered was {}. Please try again!""".format( - error - ) + encountered was {error}. Please try again!""" except MismatchingStateError as error: _LOGGER.error("Mismatched state, CSRF error: %s", error) - response_message = """Something went wrong when + response_message = f"""Something went wrong when attempting authenticating with Fitbit. The error - encountered was {}. Please try again!""".format( - error - ) + encountered was {error}. Please try again!""" else: _LOGGER.error("Unknown error when authing") response_message = """Something went wrong when @@ -389,10 +379,8 @@ class FitbitAuthCallbackView(HomeAssistantView): An unknown error occurred. Please try again! """ - html_response = """Fitbit Auth -

{}

""".format( - response_message - ) + html_response = f"""Fitbit Auth +

{response_message}

""" if result: config_contents = { @@ -424,7 +412,7 @@ class FitbitSensor(Entity): self.extra = extra self._name = FITBIT_RESOURCES_LIST[self.resource_type][0] if self.extra: - self._name = "{0} Battery".format(self.extra.get("deviceVersion")) + self._name = f"{self.extra.get('deviceVersion')} Battery" unit_type = FITBIT_RESOURCES_LIST[self.resource_type][1] if unit_type == "": split_resource = self.resource_type.split("/") @@ -460,7 +448,7 @@ class FitbitSensor(Entity): if self.resource_type == "devices/battery" and self.extra: battery_level = BATTERY_LEVELS[self.extra.get("battery")] return icon_for_battery_level(battery_level=battery_level, charging=None) - return "mdi:{}".format(FITBIT_RESOURCES_LIST[self.resource_type][2]) + return f"mdi:{FITBIT_RESOURCES_LIST[self.resource_type][2]}" @property def device_state_attributes(self): @@ -513,7 +501,7 @@ class FitbitSensor(Entity): self._state = raw_state else: try: - self._state = "{0:,}".format(int(raw_state)) + self._state = f"{int(raw_state):,}" except TypeError: self._state = raw_state diff --git a/homeassistant/components/flic/binary_sensor.py b/homeassistant/components/flic/binary_sensor.py index 4f2f229977f..55f92e2e5ce 100644 --- a/homeassistant/components/flic/binary_sensor.py +++ b/homeassistant/components/flic/binary_sensor.py @@ -168,7 +168,7 @@ class FlicButton(BinarySensorDevice): @property def name(self): """Return the name of the device.""" - return "flic_{}".format(self.address.replace(":", "")) + return f"flic_{self.address.replace(':', '')}" @property def address(self): @@ -192,9 +192,7 @@ class FlicButton(BinarySensorDevice): def _queued_event_check(self, click_type, time_diff): """Generate a log message and returns true if timeout exceeded.""" - time_string = "{:d} {}".format( - time_diff, "second" if time_diff == 1 else "seconds" - ) + time_string = f"{time_diff:d} {'second' if time_diff == 1 else 'seconds'}" if time_diff > self._timeout: _LOGGER.warning( diff --git a/homeassistant/components/flux/switch.py b/homeassistant/components/flux/switch.py index 8ffd84a518f..0205bb308be 100644 --- a/homeassistant/components/flux/switch.py +++ b/homeassistant/components/flux/switch.py @@ -164,7 +164,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= """Update lights.""" await flux.async_flux_update() - service_name = slugify("{} {}".format(name, "update")) + service_name = slugify(f"{name} update") hass.services.async_register(DOMAIN, service_name, async_update) diff --git a/homeassistant/components/flux_led/light.py b/homeassistant/components/flux_led/light.py index 16db60abbc0..88b8c91420d 100644 --- a/homeassistant/components/flux_led/light.py +++ b/homeassistant/components/flux_led/light.py @@ -167,7 +167,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): ipaddr = device["ipaddr"] if ipaddr in light_ips: continue - device["name"] = "{} {}".format(device["id"], ipaddr) + device["name"] = f"{device['id']} {ipaddr}" device[ATTR_MODE] = None device[CONF_PROTOCOL] = None device[CONF_CUSTOM_EFFECT] = None diff --git a/homeassistant/components/foobot/sensor.py b/homeassistant/components/foobot/sensor.py index 65afb04ba0e..80d17b4f23b 100644 --- a/homeassistant/components/foobot/sensor.py +++ b/homeassistant/components/foobot/sensor.py @@ -101,7 +101,7 @@ class FoobotSensor(Entity): """Initialize the sensor.""" self._uuid = device["uuid"] self.foobot_data = data - self._name = "Foobot {} {}".format(device["name"], SENSOR_TYPES[sensor_type][0]) + self._name = f"Foobot {device['name']} {SENSOR_TYPES[sensor_type][0]}" self.type = sensor_type self._unit_of_measurement = SENSOR_TYPES[sensor_type][1] diff --git a/homeassistant/components/foscam/camera.py b/homeassistant/components/foscam/camera.py index f4ec6556894..1c4c6bb9c8c 100644 --- a/homeassistant/components/foscam/camera.py +++ b/homeassistant/components/foscam/camera.py @@ -190,12 +190,7 @@ class HassFoscamCamera(Camera): async def stream_source(self): """Return the stream source.""" if self._rtsp_port: - return "rtsp://{}:{}@{}:{}/videoMain".format( - self._username, - self._password, - self._foscam_session.host, - self._rtsp_port, - ) + return f"rtsp://{self._username}:{self._password}@{self._foscam_session.host}:{self._rtsp_port}/videoMain" return None @property diff --git a/homeassistant/components/foursquare/__init__.py b/homeassistant/components/foursquare/__init__.py index af15c4e5fa8..07d177ebf30 100644 --- a/homeassistant/components/foursquare/__init__.py +++ b/homeassistant/components/foursquare/__init__.py @@ -52,12 +52,7 @@ def setup(hass, config): def checkin_user(call): """Check a user in on Swarm.""" - url = ( - "https://api.foursquare.com/v2/checkins/add" - "?oauth_token={}" - "&v=20160802" - "&m=swarm" - ).format(config[CONF_ACCESS_TOKEN]) + 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) if response.status_code not in (200, 201): diff --git a/homeassistant/components/fritzbox/switch.py b/homeassistant/components/fritzbox/switch.py index c51c952ab06..5b87d6e726a 100644 --- a/homeassistant/components/fritzbox/switch.py +++ b/homeassistant/components/fritzbox/switch.py @@ -78,9 +78,9 @@ class FritzboxSwitch(SwitchDevice): attrs[ATTR_STATE_LOCKED] = self._device.lock if self._device.has_powermeter: - attrs[ATTR_TOTAL_CONSUMPTION] = "{:.3f}".format( - (self._device.energy or 0.0) / 1000 - ) + attrs[ + ATTR_TOTAL_CONSUMPTION + ] = f"{((self._device.energy or 0.0) / 1000):.3f}" attrs[ATTR_TOTAL_CONSUMPTION_UNIT] = ATTR_TOTAL_CONSUMPTION_UNIT_VALUE if self._device.has_temperature_sensor: attrs[ATTR_TEMPERATURE] = str( diff --git a/homeassistant/components/fronius/sensor.py b/homeassistant/components/fronius/sensor.py index 27e2531c9f9..722dc2dc659 100644 --- a/homeassistant/components/fronius/sensor.py +++ b/homeassistant/components/fronius/sensor.py @@ -90,11 +90,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= device = condition[CONF_DEVICE] sensor_type = condition[CONF_SENSOR_TYPE] scope = condition[CONF_SCOPE] - name = "Fronius {} {} {}".format( - condition[CONF_SENSOR_TYPE].replace("_", " ").capitalize(), - device if scope == SCOPE_DEVICE else SCOPE_SYSTEM, - config[CONF_RESOURCE], - ) + name = f"Fronius {condition[CONF_SENSOR_TYPE].replace('_', ' ').capitalize()} {device if scope == SCOPE_DEVICE else SCOPE_SYSTEM} {config[CONF_RESOURCE]}" if sensor_type == TYPE_INVERTER: if scope == SCOPE_SYSTEM: adapter_cls = FroniusInverterSystem @@ -258,9 +254,7 @@ class FroniusTemplateSensor(Entity): @property def name(self): """Return the name of the sensor.""" - return "{} {}".format( - self._name.replace("_", " ").capitalize(), self.parent.name - ) + return f"{self._name.replace('_', ' ').capitalize()} {self.parent.name}" @property def state(self): diff --git a/homeassistant/components/frontend/__init__.py b/homeassistant/components/frontend/__init__.py index a6f531b6dd5..db721ff18a5 100644 --- a/homeassistant/components/frontend/__init__.py +++ b/homeassistant/components/frontend/__init__.py @@ -50,8 +50,8 @@ MANIFEST_JSON = { "display": "standalone", "icons": [ { - "src": "/static/icons/favicon-{size}x{size}.png".format(size=size), - "sizes": "{size}x{size}".format(size=size), + "src": f"/static/icons/favicon-{size}x{size}.png", + "sizes": f"{size}x{size}", "type": "image/png", "purpose": "maskable any", } diff --git a/homeassistant/components/frontend/storage.py b/homeassistant/components/frontend/storage.py index 2f68c5f8e01..b37945b5e07 100644 --- a/homeassistant/components/frontend/storage.py +++ b/homeassistant/components/frontend/storage.py @@ -9,7 +9,6 @@ from homeassistant.components import websocket_api DATA_STORAGE = "frontend_storage" STORAGE_VERSION_USER_DATA = 1 -STORAGE_KEY_USER_DATA = "frontend.user_data_{}" async def async_setup_frontend_storage(hass): @@ -31,8 +30,7 @@ def with_store(orig_func): if store is None: store = stores[user_id] = hass.helpers.storage.Store( - STORAGE_VERSION_USER_DATA, - STORAGE_KEY_USER_DATA.format(connection.user.id), + STORAGE_VERSION_USER_DATA, f"frontend.user_data_{connection.user.id}" ) if user_id not in data: diff --git a/homeassistant/components/frontier_silicon/media_player.py b/homeassistant/components/frontier_silicon/media_player.py index 82ed14c4336..93e96d6e967 100644 --- a/homeassistant/components/frontier_silicon/media_player.py +++ b/homeassistant/components/frontier_silicon/media_player.py @@ -55,7 +55,6 @@ SUPPORT_FRONTIER_SILICON = ( DEFAULT_PORT = 80 DEFAULT_PASSWORD = "1234" -DEVICE_URL = "http://{0}:{1}/device" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { @@ -83,7 +82,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= try: async_add_entities( - [AFSAPIDevice(DEVICE_URL.format(host, port), password, name)], True + [AFSAPIDevice(f"http://{host}:{port}/device", password, name)], True ) _LOGGER.debug("FSAPI device %s:%s -> %s", host, port, password) return True diff --git a/homeassistant/components/garadget/cover.py b/homeassistant/components/garadget/cover.py index 0eeb5f2b8f9..5a43c3c7281 100644 --- a/homeassistant/components/garadget/cover.py +++ b/homeassistant/components/garadget/cover.py @@ -251,9 +251,7 @@ class GaradgetCover(CoverDevice): def _get_variable(self, var): """Get latest status.""" - url = "{}/v1/devices/{}/{}?access_token={}".format( - self.particle_url, self.device_id, var, self.access_token - ) + url = f"{self.particle_url}/v1/devices/{self.device_id}/{var}?access_token={self.access_token}" ret = requests.get(url, timeout=10) result = {} for pairs in ret.json()["result"].split("|"): diff --git a/homeassistant/components/gdacs/__init__.py b/homeassistant/components/gdacs/__init__.py index 34f1bdc88d8..8b00b2b3ff1 100644 --- a/homeassistant/components/gdacs/__init__.py +++ b/homeassistant/components/gdacs/__init__.py @@ -28,10 +28,6 @@ from .const import ( DOMAIN, FEED, PLATFORMS, - SIGNAL_DELETE_ENTITY, - SIGNAL_NEW_GEOLOCATION, - SIGNAL_STATUS, - SIGNAL_UPDATE_ENTITY, VALID_CATEGORIES, ) @@ -181,7 +177,7 @@ class GdacsFeedEntityManager: @callback def async_event_new_entity(self): """Return manager specific event to signal new entity.""" - return SIGNAL_NEW_GEOLOCATION.format(self._config_entry_id) + return f"gdacs_new_geolocation_{self._config_entry_id}" def get_entry(self, external_id): """Get feed entry by external id.""" @@ -199,14 +195,14 @@ class GdacsFeedEntityManager: async def _update_entity(self, external_id): """Update entity.""" - async_dispatcher_send(self._hass, SIGNAL_UPDATE_ENTITY.format(external_id)) + async_dispatcher_send(self._hass, f"gdacs_update_{external_id}") async def _remove_entity(self, external_id): """Remove entity.""" - async_dispatcher_send(self._hass, SIGNAL_DELETE_ENTITY.format(external_id)) + async_dispatcher_send(self._hass, f"gdacs_delete_{external_id}") async def _status_update(self, status_info): """Propagate status update.""" _LOGGER.debug("Status update received: %s", status_info) self._status_info = status_info - async_dispatcher_send(self._hass, SIGNAL_STATUS.format(self._config_entry_id)) + async_dispatcher_send(self._hass, f"gdacs_status_{self._config_entry_id}") diff --git a/homeassistant/components/gdacs/const.py b/homeassistant/components/gdacs/const.py index 4579304f30d..5d5c83f013e 100644 --- a/homeassistant/components/gdacs/const.py +++ b/homeassistant/components/gdacs/const.py @@ -15,11 +15,5 @@ DEFAULT_ICON = "mdi:alert" DEFAULT_RADIUS = 500.0 DEFAULT_SCAN_INTERVAL = timedelta(minutes=5) -SIGNAL_DELETE_ENTITY = "gdacs_delete_{}" -SIGNAL_UPDATE_ENTITY = "gdacs_update_{}" -SIGNAL_STATUS = "gdacs_status_{}" - -SIGNAL_NEW_GEOLOCATION = "gdacs_new_geolocation_{}" - # Fetch valid categories from integration library. VALID_CATEGORIES = list(EVENT_TYPE_MAP.values()) diff --git a/homeassistant/components/gdacs/geo_location.py b/homeassistant/components/gdacs/geo_location.py index 34da104e093..616be5a5e18 100644 --- a/homeassistant/components/gdacs/geo_location.py +++ b/homeassistant/components/gdacs/geo_location.py @@ -13,13 +13,7 @@ from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.util.unit_system import IMPERIAL_SYSTEM -from .const import ( - DEFAULT_ICON, - DOMAIN, - FEED, - SIGNAL_DELETE_ENTITY, - SIGNAL_UPDATE_ENTITY, -) +from .const import DEFAULT_ICON, DOMAIN, FEED _LOGGER = logging.getLogger(__name__) @@ -102,14 +96,10 @@ class GdacsEvent(GeolocationEvent): async def async_added_to_hass(self): """Call when entity is added to hass.""" self._remove_signal_delete = async_dispatcher_connect( - self.hass, - SIGNAL_DELETE_ENTITY.format(self._external_id), - self._delete_callback, + self.hass, f"gdacs_delete_{self._external_id}", self._delete_callback ) self._remove_signal_update = async_dispatcher_connect( - self.hass, - SIGNAL_UPDATE_ENTITY.format(self._external_id), - self._update_callback, + self.hass, f"gdacs_update_{self._external_id}", self._update_callback ) async def async_will_remove_from_hass(self) -> None: diff --git a/homeassistant/components/gdacs/sensor.py b/homeassistant/components/gdacs/sensor.py index e58090fd165..7ef2855a9be 100644 --- a/homeassistant/components/gdacs/sensor.py +++ b/homeassistant/components/gdacs/sensor.py @@ -7,7 +7,7 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity from homeassistant.util import dt -from .const import DEFAULT_ICON, DOMAIN, FEED, SIGNAL_STATUS +from .const import DEFAULT_ICON, DOMAIN, FEED _LOGGER = logging.getLogger(__name__) @@ -55,7 +55,7 @@ class GdacsSensor(Entity): """Call when entity is added to hass.""" self._remove_signal_status = async_dispatcher_connect( self.hass, - SIGNAL_STATUS.format(self._config_entry_id), + f"gdacs_status_{self._config_entry_id}", self._update_status_callback, ) _LOGGER.debug("Waiting for updates %s", self._config_entry_id) diff --git a/homeassistant/components/geo_json_events/geo_location.py b/homeassistant/components/geo_json_events/geo_location.py index 2f881232495..3435fcc50cf 100644 --- a/homeassistant/components/geo_json_events/geo_location.py +++ b/homeassistant/components/geo_json_events/geo_location.py @@ -29,9 +29,6 @@ DEFAULT_UNIT_OF_MEASUREMENT = "km" SCAN_INTERVAL = timedelta(minutes=5) -SIGNAL_DELETE_ENTITY = "geo_json_events_delete_{}" -SIGNAL_UPDATE_ENTITY = "geo_json_events_update_{}" - SOURCE = "geo_json_events" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( @@ -108,11 +105,11 @@ class GeoJsonFeedEntityManager: def _update_entity(self, external_id): """Update entity.""" - dispatcher_send(self._hass, SIGNAL_UPDATE_ENTITY.format(external_id)) + dispatcher_send(self._hass, f"geo_json_events_update_{external_id}") def _remove_entity(self, external_id): """Remove entity.""" - dispatcher_send(self._hass, SIGNAL_DELETE_ENTITY.format(external_id)) + dispatcher_send(self._hass, f"geo_json_events_delete_{external_id}") class GeoJsonLocationEvent(GeolocationEvent): @@ -133,12 +130,12 @@ class GeoJsonLocationEvent(GeolocationEvent): """Call when entity is added to hass.""" self._remove_signal_delete = async_dispatcher_connect( self.hass, - SIGNAL_DELETE_ENTITY.format(self._external_id), + f"geo_json_events_delete_{self._external_id}", self._delete_callback, ) self._remove_signal_update = async_dispatcher_connect( self.hass, - SIGNAL_UPDATE_ENTITY.format(self._external_id), + f"geo_json_events_update_{self._external_id}", self._update_callback, ) diff --git a/homeassistant/components/geo_rss_events/sensor.py b/homeassistant/components/geo_rss_events/sensor.py index 3ac973f77a0..22f02a4218c 100644 --- a/homeassistant/components/geo_rss_events/sensor.py +++ b/homeassistant/components/geo_rss_events/sensor.py @@ -118,9 +118,7 @@ class GeoRssServiceSensor(Entity): @property def name(self): """Return the name of the sensor.""" - return "{} {}".format( - self._service_name, "Any" if self._category is None else self._category - ) + return f"{self._service_name} {'Any' if self._category is None else self._category}" @property def state(self): diff --git a/homeassistant/components/geofency/__init__.py b/homeassistant/components/geofency/__init__.py index 9afc9a8bfac..cb663676512 100644 --- a/homeassistant/components/geofency/__init__.py +++ b/homeassistant/components/geofency/__init__.py @@ -114,7 +114,7 @@ def _is_mobile_beacon(data, mobile_beacons): def _device_name(data): """Return name of device tracker.""" if ATTR_BEACON_ID in data: - return "{}_{}".format(BEACON_DEV_PREFIX, data["name"]) + return f"{BEACON_DEV_PREFIX}_{data['name']}" return data["device"] diff --git a/homeassistant/components/geonetnz_quakes/__init__.py b/homeassistant/components/geonetnz_quakes/__init__.py index 141d0506847..fae8841bee3 100644 --- a/homeassistant/components/geonetnz_quakes/__init__.py +++ b/homeassistant/components/geonetnz_quakes/__init__.py @@ -34,10 +34,6 @@ from .const import ( DOMAIN, FEED, PLATFORMS, - SIGNAL_DELETE_ENTITY, - SIGNAL_NEW_GEOLOCATION, - SIGNAL_STATUS, - SIGNAL_UPDATE_ENTITY, ) _LOGGER = logging.getLogger(__name__) @@ -200,7 +196,7 @@ class GeonetnzQuakesFeedEntityManager: @callback def async_event_new_entity(self): """Return manager specific event to signal new entity.""" - return SIGNAL_NEW_GEOLOCATION.format(self._config_entry_id) + return f"geonetnz_quakes_new_geolocation_{self._config_entry_id}" def get_entry(self, external_id): """Get feed entry by external id.""" @@ -222,14 +218,16 @@ class GeonetnzQuakesFeedEntityManager: async def _update_entity(self, external_id): """Update entity.""" - async_dispatcher_send(self._hass, SIGNAL_UPDATE_ENTITY.format(external_id)) + async_dispatcher_send(self._hass, f"geonetnz_quakes_update_{external_id}") async def _remove_entity(self, external_id): """Remove entity.""" - async_dispatcher_send(self._hass, SIGNAL_DELETE_ENTITY.format(external_id)) + async_dispatcher_send(self._hass, f"geonetnz_quakes_delete_{external_id}") async def _status_update(self, status_info): """Propagate status update.""" _LOGGER.debug("Status update received: %s", status_info) self._status_info = status_info - async_dispatcher_send(self._hass, SIGNAL_STATUS.format(self._config_entry_id)) + async_dispatcher_send( + self._hass, f"geonetnz_quakes_status_{self._config_entry_id}" + ) diff --git a/homeassistant/components/geonetnz_quakes/const.py b/homeassistant/components/geonetnz_quakes/const.py index d564d407f7c..43818b55f6f 100644 --- a/homeassistant/components/geonetnz_quakes/const.py +++ b/homeassistant/components/geonetnz_quakes/const.py @@ -15,9 +15,3 @@ DEFAULT_MINIMUM_MAGNITUDE = 0.0 DEFAULT_MMI = 3 DEFAULT_RADIUS = 50.0 DEFAULT_SCAN_INTERVAL = timedelta(minutes=5) - -SIGNAL_DELETE_ENTITY = "geonetnz_quakes_delete_{}" -SIGNAL_UPDATE_ENTITY = "geonetnz_quakes_update_{}" -SIGNAL_STATUS = "geonetnz_quakes_status_{}" - -SIGNAL_NEW_GEOLOCATION = "geonetnz_quakes_new_geolocation_{}" diff --git a/homeassistant/components/geonetnz_quakes/geo_location.py b/homeassistant/components/geonetnz_quakes/geo_location.py index ae8b8fef48d..d7fd91d3d5b 100644 --- a/homeassistant/components/geonetnz_quakes/geo_location.py +++ b/homeassistant/components/geonetnz_quakes/geo_location.py @@ -14,7 +14,7 @@ from homeassistant.core import callback from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.util.unit_system import IMPERIAL_SYSTEM -from .const import DOMAIN, FEED, SIGNAL_DELETE_ENTITY, SIGNAL_UPDATE_ENTITY +from .const import DOMAIN, FEED _LOGGER = logging.getLogger(__name__) @@ -75,12 +75,12 @@ class GeonetnzQuakesEvent(GeolocationEvent): """Call when entity is added to hass.""" self._remove_signal_delete = async_dispatcher_connect( self.hass, - SIGNAL_DELETE_ENTITY.format(self._external_id), + f"geonetnz_quakes_delete_{self._external_id}", self._delete_callback, ) self._remove_signal_update = async_dispatcher_connect( self.hass, - SIGNAL_UPDATE_ENTITY.format(self._external_id), + f"geonetnz_quakes_update_{self._external_id}", self._update_callback, ) diff --git a/homeassistant/components/geonetnz_quakes/sensor.py b/homeassistant/components/geonetnz_quakes/sensor.py index e0be94d1b26..f5360c76c45 100644 --- a/homeassistant/components/geonetnz_quakes/sensor.py +++ b/homeassistant/components/geonetnz_quakes/sensor.py @@ -7,7 +7,7 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity from homeassistant.util import dt -from .const import DOMAIN, FEED, SIGNAL_STATUS +from .const import DOMAIN, FEED _LOGGER = logging.getLogger(__name__) @@ -53,7 +53,7 @@ class GeonetnzQuakesSensor(Entity): """Call when entity is added to hass.""" self._remove_signal_status = async_dispatcher_connect( self.hass, - SIGNAL_STATUS.format(self._config_entry_id), + f"geonetnz_quakes_status_{self._config_entry_id}", self._update_status_callback, ) _LOGGER.debug("Waiting for updates %s", self._config_entry_id) diff --git a/homeassistant/components/geonetnz_volcano/__init__.py b/homeassistant/components/geonetnz_volcano/__init__.py index e24de7fdc5d..e2c6cb77083 100644 --- a/homeassistant/components/geonetnz_volcano/__init__.py +++ b/homeassistant/components/geonetnz_volcano/__init__.py @@ -24,14 +24,7 @@ from homeassistant.helpers.event import async_track_time_interval from homeassistant.util.unit_system import METRIC_SYSTEM from .config_flow import configured_instances -from .const import ( - DEFAULT_RADIUS, - DEFAULT_SCAN_INTERVAL, - DOMAIN, - FEED, - SIGNAL_NEW_SENSOR, - SIGNAL_UPDATE_ENTITY, -) +from .const import DEFAULT_RADIUS, DEFAULT_SCAN_INTERVAL, DOMAIN, FEED _LOGGER = logging.getLogger(__name__) @@ -173,7 +166,7 @@ class GeonetnzVolcanoFeedEntityManager: @callback def async_event_new_entity(self): """Return manager specific event to signal new entity.""" - return SIGNAL_NEW_SENSOR.format(self._config_entry_id) + return f"geonetnz_volcano_new_sensor_{self._config_entry_id}" def get_entry(self, external_id): """Get feed entry by external id.""" @@ -199,7 +192,7 @@ class GeonetnzVolcanoFeedEntityManager: async def _update_entity(self, external_id): """Update entity.""" - async_dispatcher_send(self._hass, SIGNAL_UPDATE_ENTITY.format(external_id)) + async_dispatcher_send(self._hass, f"geonetnz_volcano_update_{external_id}") async def _remove_entity(self, external_id): """Ignore removing entity.""" diff --git a/homeassistant/components/geonetnz_volcano/const.py b/homeassistant/components/geonetnz_volcano/const.py index 7bc15d3a6a1..d48e9775f19 100644 --- a/homeassistant/components/geonetnz_volcano/const.py +++ b/homeassistant/components/geonetnz_volcano/const.py @@ -14,6 +14,3 @@ ATTR_HAZARDS = "hazards" DEFAULT_ICON = "mdi:image-filter-hdr" DEFAULT_RADIUS = 50.0 DEFAULT_SCAN_INTERVAL = timedelta(minutes=5) - -SIGNAL_NEW_SENSOR = "geonetnz_volcano_new_sensor_{}" -SIGNAL_UPDATE_ENTITY = "geonetnz_volcano_update_{}" diff --git a/homeassistant/components/geonetnz_volcano/sensor.py b/homeassistant/components/geonetnz_volcano/sensor.py index f87ea88fc1c..3d5d0681f02 100644 --- a/homeassistant/components/geonetnz_volcano/sensor.py +++ b/homeassistant/components/geonetnz_volcano/sensor.py @@ -23,7 +23,6 @@ from .const import ( DEFAULT_ICON, DOMAIN, FEED, - SIGNAL_UPDATE_ENTITY, ) _LOGGER = logging.getLogger(__name__) @@ -79,7 +78,7 @@ class GeonetnzVolcanoSensor(Entity): """Call when entity is added to hass.""" self._remove_signal_update = async_dispatcher_connect( self.hass, - SIGNAL_UPDATE_ENTITY.format(self._external_id), + f"geonetnz_volcano_update_{self._external_id}", self._update_callback, ) diff --git a/homeassistant/components/gogogate2/cover.py b/homeassistant/components/gogogate2/cover.py index fcb0182ec0e..62aea62bf84 100644 --- a/homeassistant/components/gogogate2/cover.py +++ b/homeassistant/components/gogogate2/cover.py @@ -51,9 +51,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): except (TypeError, KeyError, NameError, ValueError) as ex: _LOGGER.error("%s", ex) hass.components.persistent_notification.create( - "Error: {}
" - "You will need to restart hass after fixing." - "".format(ex), + (f"Error: {ex}
You will need to restart hass after fixing."), title=NOTIFICATION_TITLE, notification_id=NOTIFICATION_ID, ) diff --git a/homeassistant/components/google/__init__.py b/homeassistant/components/google/__init__.py index 0e7ccd33b33..f3321416b1f 100644 --- a/homeassistant/components/google/__init__.py +++ b/homeassistant/components/google/__init__.py @@ -144,17 +144,17 @@ def do_authentication(hass, hass_config, config): dev_flow = oauth.step1_get_device_and_user_codes() except OAuth2DeviceCodeError as err: hass.components.persistent_notification.create( - "Error: {}
You will need to restart hass after fixing." "".format(err), + f"Error: {err}
You will need to restart hass after fixing." "", title=NOTIFICATION_TITLE, notification_id=NOTIFICATION_ID, ) return False hass.components.persistent_notification.create( - "In order to authorize Home-Assistant to view your calendars " - 'you must visit: {} and enter ' - "code: {}".format( - dev_flow.verification_url, dev_flow.verification_url, dev_flow.user_code + ( + f"In order to authorize Home-Assistant to view your calendars " + f'you must visit: {dev_flow.verification_url} and enter ' + f"code: {dev_flow.user_code}" ), title=NOTIFICATION_TITLE, notification_id=NOTIFICATION_ID, @@ -182,8 +182,10 @@ def do_authentication(hass, hass_config, config): do_setup(hass, hass_config, config) listener() hass.components.persistent_notification.create( - "We are all setup now. Check {} for calendars that have " - "been found".format(YAML_DEVICES), + ( + f"We are all setup now. Check {YAML_DEVICES} for calendars that have " + f"been found" + ), title=NOTIFICATION_TITLE, notification_id=NOTIFICATION_ID, ) diff --git a/homeassistant/components/google_assistant/http.py b/homeassistant/components/google_assistant/http.py index 60e4cdae6a5..4c16e230e92 100644 --- a/homeassistant/components/google_assistant/http.py +++ b/homeassistant/components/google_assistant/http.py @@ -53,7 +53,7 @@ def _get_homegraph_jwt(time, iss, key): async def _get_homegraph_token(hass, jwt_signed): headers = { - "Authorization": "Bearer {}".format(jwt_signed), + "Authorization": f"Bearer {jwt_signed}", "Content-Type": "application/x-www-form-urlencoded", } data = { @@ -185,7 +185,7 @@ class GoogleConfig(AbstractConfig): async def _call(): headers = { - "Authorization": "Bearer {}".format(self._access_token), + "Authorization": f"Bearer {self._access_token}", "X-GFE-SSL": "yes", } async with session.post(url, headers=headers, json=data) as res: diff --git a/homeassistant/components/google_assistant/trait.py b/homeassistant/components/google_assistant/trait.py index b4585ebde03..9da319226fa 100644 --- a/homeassistant/components/google_assistant/trait.py +++ b/homeassistant/components/google_assistant/trait.py @@ -392,9 +392,7 @@ class ColorSettingTrait(_Trait): if temp < min_temp or temp > max_temp: raise SmartHomeError( ERR_VALUE_OUT_OF_RANGE, - "Temperature should be between {} and {}".format( - min_temp, max_temp - ), + f"Temperature should be between {min_temp} and {max_temp}", ) await self.hass.services.async_call( @@ -407,7 +405,7 @@ class ColorSettingTrait(_Trait): elif "spectrumRGB" in params["color"]: # Convert integer to hex format and left pad with 0's till length 6 - hex_value = "{0:06x}".format(params["color"]["spectrumRGB"]) + hex_value = f"{params['color']['spectrumRGB']:06x}" color = color_util.color_RGB_to_hs( *color_util.rgb_hex_to_rgb_list(hex_value) ) @@ -746,9 +744,7 @@ class TemperatureSettingTrait(_Trait): if temp < min_temp or temp > max_temp: raise SmartHomeError( ERR_VALUE_OUT_OF_RANGE, - "Temperature should be between {} and {}".format( - min_temp, max_temp - ), + f"Temperature should be between {min_temp} and {max_temp}", ) await self.hass.services.async_call( @@ -769,8 +765,10 @@ class TemperatureSettingTrait(_Trait): if temp_high < min_temp or temp_high > max_temp: raise SmartHomeError( ERR_VALUE_OUT_OF_RANGE, - "Upper bound for temperature range should be between " - "{} and {}".format(min_temp, max_temp), + ( + f"Upper bound for temperature range should be between " + f"{min_temp} and {max_temp}" + ), ) temp_low = temp_util.convert( @@ -782,8 +780,10 @@ class TemperatureSettingTrait(_Trait): if temp_low < min_temp or temp_low > max_temp: raise SmartHomeError( ERR_VALUE_OUT_OF_RANGE, - "Lower bound for temperature range should be between " - "{} and {}".format(min_temp, max_temp), + ( + f"Lower bound for temperature range should be between " + f"{min_temp} and {max_temp}" + ), ) supported = self.state.attributes.get(ATTR_SUPPORTED_FEATURES) diff --git a/homeassistant/components/google_domains/__init__.py b/homeassistant/components/google_domains/__init__.py index d440567d9ad..ae6cb5c70d5 100644 --- a/homeassistant/components/google_domains/__init__.py +++ b/homeassistant/components/google_domains/__init__.py @@ -18,8 +18,6 @@ INTERVAL = timedelta(minutes=5) DEFAULT_TIMEOUT = 10 -UPDATE_URL = "https://{}:{}@domains.google.com/nic/update" - CONFIG_SCHEMA = vol.Schema( { DOMAIN: vol.Schema( @@ -62,7 +60,7 @@ async def async_setup(hass, config): async def _update_google_domains(hass, session, domain, user, password, timeout): """Update Google Domains.""" - url = UPDATE_URL.format(user, password) + url = f"https://{user}:{password}@domains.google.com/nic/update" params = {"hostname": domain} diff --git a/homeassistant/components/google_maps/device_tracker.py b/homeassistant/components/google_maps/device_tracker.py index 9e33ff5f715..7b48c12cc93 100644 --- a/homeassistant/components/google_maps/device_tracker.py +++ b/homeassistant/components/google_maps/device_tracker.py @@ -55,9 +55,7 @@ class GoogleMapsScanner: self.scan_interval = config.get(CONF_SCAN_INTERVAL) or timedelta(seconds=60) self._prev_seen = {} - credfile = "{}.{}".format( - hass.config.path(CREDENTIALS_FILE), slugify(self.username) - ) + credfile = f"{hass.config.path(CREDENTIALS_FILE)}.{slugify(self.username)}" try: self.service = Service(credfile, self.username) self._update_info() @@ -75,7 +73,7 @@ class GoogleMapsScanner: def _update_info(self, now=None): for person in self.service.get_all_people(): try: - dev_id = "google_maps_{0}".format(slugify(person.id)) + dev_id = f"google_maps_{slugify(person.id)}" except TypeError: _LOGGER.warning("No location(s) shared with this account") return diff --git a/homeassistant/components/google_travel_time/sensor.py b/homeassistant/components/google_travel_time/sensor.py index 7f106bc7e3e..213f773fb60 100644 --- a/homeassistant/components/google_travel_time/sensor.py +++ b/homeassistant/components/google_travel_time/sensor.py @@ -163,7 +163,7 @@ def setup_platform(hass, config, add_entities_callback, discovery_info=None): options[CONF_MODE] = travel_mode titled_mode = options.get(CONF_MODE).title() - formatted_name = "{} - {}".format(DEFAULT_NAME, titled_mode) + formatted_name = f"{DEFAULT_NAME} - {titled_mode}" name = config.get(CONF_NAME, formatted_name) api_key = config.get(CONF_API_KEY) origin = config.get(CONF_ORIGIN) diff --git a/homeassistant/components/greeneye_monitor/sensor.py b/homeassistant/components/greeneye_monitor/sensor.py index b88b2567750..1d53525ab37 100644 --- a/homeassistant/components/greeneye_monitor/sensor.py +++ b/homeassistant/components/greeneye_monitor/sensor.py @@ -107,11 +107,7 @@ class GEMSensor(Entity): @property def unique_id(self): """Return a unique ID for this sensor.""" - return "{serial}-{sensor_type}-{number}".format( - serial=self._monitor_serial_number, - sensor_type=self._sensor_type, - number=self._number, - ) + return f"{self._monitor_serial_number}-{self._sensor_type }-{self._number}" @property def name(self): @@ -249,9 +245,7 @@ class PulseCounter(GEMSensor): @property def unit_of_measurement(self): """Return the unit of measurement for this pulse counter.""" - return "{counted_quantity}/{time_unit}".format( - counted_quantity=self._counted_quantity, time_unit=self._time_unit - ) + return f"{self._counted_quantity}/{self._time_unit}" @property def device_state_attributes(self): diff --git a/homeassistant/components/group/__init__.py b/homeassistant/components/group/__init__.py index efd8dfdf0fa..f8a10017cab 100644 --- a/homeassistant/components/group/__init__.py +++ b/homeassistant/components/group/__init__.py @@ -74,7 +74,7 @@ GROUP_SCHEMA = vol.All( CONF_ICON: cv.icon, CONF_ALL: cv.boolean, } - ), + ) ) CONFIG_SCHEMA = vol.Schema( @@ -231,7 +231,7 @@ async def async_setup(hass, config): async def groups_service_handler(service): """Handle dynamic group service functions.""" object_id = service.data[ATTR_OBJECT_ID] - entity_id = ENTITY_ID_FORMAT.format(object_id) + entity_id = f"{DOMAIN}.{object_id}" group = component.get_entity(entity_id) # new group @@ -311,7 +311,7 @@ async def async_setup(hass, config): vol.Exclusive(ATTR_ENTITIES, "entities"): cv.entity_ids, vol.Exclusive(ATTR_ADD_ENTITIES, "entities"): cv.entity_ids, } - ), + ) ), ) @@ -336,7 +336,7 @@ async def _async_process_config(hass, config, component): # Don't create tasks and await them all. The order is important as # groups get a number based on creation order. await Group.async_create_group( - hass, name, entity_ids, icon=icon, object_id=object_id, mode=mode, + hass, name, entity_ids, icon=icon, object_id=object_id, mode=mode ) @@ -388,7 +388,7 @@ class Group(Entity): """Initialize a group.""" return asyncio.run_coroutine_threadsafe( Group.async_create_group( - hass, name, entity_ids, user_defined, icon, object_id, mode, + hass, name, entity_ids, user_defined, icon, object_id, mode ), hass.loop, ).result() diff --git a/homeassistant/components/gtfs/sensor.py b/homeassistant/components/gtfs/sensor.py index 07b450dd33e..2bd0ce1b09f 100644 --- a/homeassistant/components/gtfs/sensor.py +++ b/homeassistant/components/gtfs/sensor.py @@ -143,7 +143,7 @@ def get_next_departure( tomorrow_where = f"OR calendar.{tomorrow_name} = 1" tomorrow_order = f"calendar.{tomorrow_name} DESC," - sql_query = """ + sql_query = f""" SELECT trip.trip_id, trip.route_id, time(origin_stop_time.arrival_time) AS origin_arrival_time, time(origin_stop_time.departure_time) AS origin_depart_time, @@ -162,8 +162,8 @@ def get_next_departure( destination_stop_time.stop_headsign AS dest_stop_headsign, destination_stop_time.stop_sequence AS dest_stop_sequence, destination_stop_time.timepoint AS dest_stop_timepoint, - calendar.{yesterday_name} AS yesterday, - calendar.{today_name} AS today, + calendar.{yesterday.strftime("%A").lower()} AS yesterday, + calendar.{now.strftime("%A").lower()} AS today, {tomorrow_select} calendar.start_date AS start_date, calendar.end_date AS end_date @@ -178,8 +178,8 @@ def get_next_departure( ON trip.trip_id = destination_stop_time.trip_id INNER JOIN stops end_station ON destination_stop_time.stop_id = end_station.stop_id - WHERE (calendar.{yesterday_name} = 1 - OR calendar.{today_name} = 1 + WHERE (calendar.{yesterday.strftime("%A").lower()} = 1 + OR calendar.{now.strftime("%A").lower()} = 1 {tomorrow_where} ) AND start_station.stop_id = :origin_station_id @@ -187,18 +187,12 @@ def get_next_departure( AND origin_stop_sequence < dest_stop_sequence AND calendar.start_date <= :today AND calendar.end_date >= :today - ORDER BY calendar.{yesterday_name} DESC, - calendar.{today_name} DESC, + ORDER BY calendar.{yesterday.strftime("%A").lower()} DESC, + calendar.{now.strftime("%A").lower()} DESC, {tomorrow_order} origin_stop_time.departure_time LIMIT :limit - """.format( - yesterday_name=yesterday.strftime("%A").lower(), - today_name=now.strftime("%A").lower(), - tomorrow_select=tomorrow_select, - tomorrow_where=tomorrow_where, - tomorrow_order=tomorrow_order, - ) + """ result = schedule.engine.execute( text(sql_query), origin_station_id=start_station_id, @@ -220,7 +214,7 @@ def get_next_departure( if yesterday_start is None: yesterday_start = row["origin_depart_date"] if yesterday_start != row["origin_depart_date"]: - idx = "{} {}".format(now_date, row["origin_depart_time"]) + idx = f"{now_date} {row['origin_depart_time']}" timetable[idx] = {**row, **extras} yesterday_last = idx @@ -233,7 +227,7 @@ def get_next_departure( idx_prefix = now_date else: idx_prefix = tomorrow_date - idx = "{} {}".format(idx_prefix, row["origin_depart_time"]) + idx = f"{idx_prefix} {row['origin_depart_time']}" timetable[idx] = {**row, **extras} today_last = idx @@ -247,7 +241,7 @@ def get_next_departure( tomorrow_start = row["origin_depart_date"] extras["first"] = True if tomorrow_start == row["origin_depart_date"]: - idx = "{} {}".format(tomorrow_date, row["origin_depart_time"]) + idx = f"{tomorrow_date} {row['origin_depart_time']}" timetable[idx] = {**row, **extras} # Flag last departures. @@ -273,24 +267,27 @@ def get_next_departure( origin_arrival = now if item["origin_arrival_time"] > item["origin_depart_time"]: origin_arrival -= datetime.timedelta(days=1) - origin_arrival_time = "{} {}".format( - origin_arrival.strftime(dt_util.DATE_STR_FORMAT), item["origin_arrival_time"] + origin_arrival_time = ( + f"{origin_arrival.strftime(dt_util.DATE_STR_FORMAT)} " + f"{item['origin_arrival_time']}" ) - origin_depart_time = "{} {}".format(now_date, item["origin_depart_time"]) + origin_depart_time = f"{now_date} {item['origin_depart_time']}" dest_arrival = now if item["dest_arrival_time"] < item["origin_depart_time"]: dest_arrival += datetime.timedelta(days=1) - dest_arrival_time = "{} {}".format( - dest_arrival.strftime(dt_util.DATE_STR_FORMAT), item["dest_arrival_time"] + dest_arrival_time = ( + f"{dest_arrival.strftime(dt_util.DATE_STR_FORMAT)} " + f"{item['dest_arrival_time']}" ) dest_depart = dest_arrival if item["dest_depart_time"] < item["dest_arrival_time"]: dest_depart += datetime.timedelta(days=1) - dest_depart_time = "{} {}".format( - dest_depart.strftime(dt_util.DATE_STR_FORMAT), item["dest_depart_time"] + dest_depart_time = ( + f"{dest_depart.strftime(dt_util.DATE_STR_FORMAT)} " + f"{item['dest_depart_time']}" ) depart_time = dt_util.parse_datetime(origin_depart_time) @@ -511,15 +508,13 @@ class GTFSDepartureSensor(Entity): else: self._icon = ICON - name = "{agency} {origin} to {destination} next departure" - if not self._departure: - name = "{default}" - self._name = self._custom_name or name.format( - agency=getattr(self._agency, "agency_name", DEFAULT_NAME), - default=DEFAULT_NAME, - origin=self.origin, - destination=self.destination, + name = ( + f"{getattr(self._agency, 'agency_name', DEFAULT_NAME)} " + f"{self.origin} to {self.destination} next departure" ) + if not self._departure: + name = f"{DEFAULT_NAME}" + self._name = self._custom_name or name def update_attributes(self) -> None: """Update state attributes.""" diff --git a/tests/components/facebox/test_image_processing.py b/tests/components/facebox/test_image_processing.py index 6b248ba1c3c..8506cd2d817 100644 --- a/tests/components/facebox/test_image_processing.py +++ b/tests/components/facebox/test_image_processing.py @@ -119,7 +119,7 @@ def mock_open_file(): def test_check_box_health(caplog): """Test check box health.""" with requests_mock.Mocker() as mock_req: - url = "http://{}:{}/healthz".format(MOCK_IP, MOCK_PORT) + url = f"http://{MOCK_IP}:{MOCK_PORT}/healthz" mock_req.get(url, status_code=HTTP_OK, json=MOCK_HEALTH) assert fb.check_box_health(url, "user", "pass") == MOCK_BOX_ID @@ -184,7 +184,7 @@ async def test_process_image(hass, mock_healthybox, mock_image): hass.bus.async_listen("image_processing.detect_face", mock_face_event) with requests_mock.Mocker() as mock_req: - url = "http://{}:{}/facebox/check".format(MOCK_IP, MOCK_PORT) + url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/check" mock_req.post(url, json=MOCK_JSON) data = {ATTR_ENTITY_ID: VALID_ENTITY_ID} await hass.services.async_call(ip.DOMAIN, ip.SERVICE_SCAN, service_data=data) @@ -219,7 +219,7 @@ async def test_process_image_errors(hass, mock_healthybox, mock_image, caplog): # Test connection error. with requests_mock.Mocker() as mock_req: - url = "http://{}:{}/facebox/check".format(MOCK_IP, MOCK_PORT) + url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/check" mock_req.register_uri("POST", url, exc=requests.exceptions.ConnectTimeout) data = {ATTR_ENTITY_ID: VALID_ENTITY_ID} await hass.services.async_call(ip.DOMAIN, ip.SERVICE_SCAN, service_data=data) @@ -233,7 +233,7 @@ async def test_process_image_errors(hass, mock_healthybox, mock_image, caplog): # Now test with bad auth. with requests_mock.Mocker() as mock_req: - url = "http://{}:{}/facebox/check".format(MOCK_IP, MOCK_PORT) + url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/check" mock_req.register_uri("POST", url, status_code=HTTP_UNAUTHORIZED) data = {ATTR_ENTITY_ID: VALID_ENTITY_ID} await hass.services.async_call(ip.DOMAIN, ip.SERVICE_SCAN, service_data=data) @@ -253,7 +253,7 @@ async def test_teach_service( # Test successful teach. with requests_mock.Mocker() as mock_req: - url = "http://{}:{}/facebox/teach".format(MOCK_IP, MOCK_PORT) + url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/teach" mock_req.post(url, status_code=HTTP_OK) data = { ATTR_ENTITY_ID: VALID_ENTITY_ID, @@ -267,7 +267,7 @@ async def test_teach_service( # Now test with bad auth. with requests_mock.Mocker() as mock_req: - url = "http://{}:{}/facebox/teach".format(MOCK_IP, MOCK_PORT) + url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/teach" mock_req.post(url, status_code=HTTP_UNAUTHORIZED) data = { ATTR_ENTITY_ID: VALID_ENTITY_ID, @@ -282,7 +282,7 @@ async def test_teach_service( # Now test the failed teaching. with requests_mock.Mocker() as mock_req: - url = "http://{}:{}/facebox/teach".format(MOCK_IP, MOCK_PORT) + url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/teach" mock_req.post(url, status_code=HTTP_BAD_REQUEST, text=MOCK_ERROR_NO_FACE) data = { ATTR_ENTITY_ID: VALID_ENTITY_ID, @@ -297,7 +297,7 @@ async def test_teach_service( # Now test connection error. with requests_mock.Mocker() as mock_req: - url = "http://{}:{}/facebox/teach".format(MOCK_IP, MOCK_PORT) + url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/teach" mock_req.post(url, exc=requests.exceptions.ConnectTimeout) data = { ATTR_ENTITY_ID: VALID_ENTITY_ID, @@ -313,7 +313,7 @@ async def test_teach_service( async def test_setup_platform_with_name(hass, mock_healthybox): """Set up platform with one entity and a name.""" - named_entity_id = "image_processing.{}".format(MOCK_NAME) + named_entity_id = f"image_processing.{MOCK_NAME}" valid_config_named = VALID_CONFIG.copy() valid_config_named[ip.DOMAIN][ip.CONF_SOURCE][ip.CONF_NAME] = MOCK_NAME diff --git a/tests/components/fan/test_device_trigger.py b/tests/components/fan/test_device_trigger.py index b44ba22d8e5..c46b3a6fcec 100644 --- a/tests/components/fan/test_device_trigger.py +++ b/tests/components/fan/test_device_trigger.py @@ -119,14 +119,10 @@ async def test_if_fires_on_state_change(hass, calls): hass.states.async_set("fan.entity", STATE_ON) await hass.async_block_till_done() assert len(calls) == 1 - assert calls[0].data["some"] == "turn_on - device - {} - off - on - None".format( - "fan.entity" - ) + assert calls[0].data["some"] == "turn_on - device - fan.entity - off - on - None" # Fake that the entity is turning off. hass.states.async_set("fan.entity", STATE_OFF) await hass.async_block_till_done() assert len(calls) == 2 - assert calls[1].data["some"] == "turn_off - device - {} - on - off - None".format( - "fan.entity" - ) + assert calls[1].data["some"] == "turn_off - device - fan.entity - on - off - None" diff --git a/tests/components/feedreader/test_init.py b/tests/components/feedreader/test_init.py index 048be11e079..58a660fcb5d 100644 --- a/tests/components/feedreader/test_init.py +++ b/tests/components/feedreader/test_init.py @@ -39,7 +39,7 @@ class TestFeedreaderComponent(unittest.TestCase): """Initialize values for this testcase class.""" self.hass = get_test_home_assistant() # Delete any previously stored data - data_file = self.hass.config.path("{}.pickle".format("feedreader")) + data_file = self.hass.config.path(f"{feedreader.DOMAIN}.pickle") if exists(data_file): remove(data_file) @@ -85,7 +85,7 @@ class TestFeedreaderComponent(unittest.TestCase): # Loading raw data from fixture and plug in to data object as URL # works since the third-party feedparser library accepts a URL # as well as the actual data. - data_file = self.hass.config.path("{}.pickle".format(feedreader.DOMAIN)) + data_file = self.hass.config.path(f"{feedreader.DOMAIN}.pickle") storage = StoredData(data_file) with patch( "homeassistant.components.feedreader.track_time_interval" @@ -179,7 +179,7 @@ class TestFeedreaderComponent(unittest.TestCase): @mock.patch("feedparser.parse", return_value=None) def test_feed_parsing_failed(self, mock_parse): """Test feed where parsing fails.""" - data_file = self.hass.config.path("{}.pickle".format(feedreader.DOMAIN)) + data_file = self.hass.config.path(f"{feedreader.DOMAIN}.pickle") storage = StoredData(data_file) manager = FeedManager( "FEED DATA", DEFAULT_SCAN_INTERVAL, DEFAULT_MAX_ENTRIES, self.hass, storage diff --git a/tests/components/file/test_notify.py b/tests/components/file/test_notify.py index 52524d5b189..bd5ae68cb37 100644 --- a/tests/components/file/test_notify.py +++ b/tests/components/file/test_notify.py @@ -56,8 +56,9 @@ class TestNotifyFile(unittest.TestCase): ): mock_st.return_value.st_size = 0 - title = "{} notifications (Log started: {})\n{}\n".format( - ATTR_TITLE_DEFAULT, dt_util.utcnow().isoformat(), "-" * 80 + title = ( + f"{ATTR_TITLE_DEFAULT} notifications " + f"(Log started: {dt_util.utcnow().isoformat()})\n{'-' * 80}\n" ) self.hass.services.call( @@ -72,12 +73,12 @@ class TestNotifyFile(unittest.TestCase): if not timestamp: assert m_open.return_value.write.call_args_list == [ call(title), - call("{}\n".format(message)), + call(f"{message}\n"), ] else: assert m_open.return_value.write.call_args_list == [ call(title), - call("{} {}\n".format(dt_util.utcnow().isoformat(), message)), + call(f"{dt_util.utcnow().isoformat()} {message}\n"), ] def test_notify_file(self): diff --git a/tests/components/flux/test_switch.py b/tests/components/flux/test_switch.py index b3d0a008961..13824dff9c3 100644 --- a/tests/components/flux/test_switch.py +++ b/tests/components/flux/test_switch.py @@ -923,9 +923,9 @@ async def test_flux_with_multiple_lights(hass): def event_date(hass, event, now=None): if event == SUN_EVENT_SUNRISE: - print("sunrise {}".format(sunrise_time)) + print(f"sunrise {sunrise_time}") return sunrise_time - print("sunset {}".format(sunset_time)) + print(f"sunset {sunset_time}") return sunset_time with patch( diff --git a/tests/components/frontend/test_storage.py b/tests/components/frontend/test_storage.py index d907f69bbf9..d4cf1916c52 100644 --- a/tests/components/frontend/test_storage.py +++ b/tests/components/frontend/test_storage.py @@ -1,7 +1,7 @@ """The tests for frontend storage.""" import pytest -from homeassistant.components.frontend import storage +from homeassistant.components.frontend import DOMAIN from homeassistant.setup import async_setup_component @@ -26,7 +26,7 @@ async def test_get_user_data_empty(hass, hass_ws_client, hass_storage): async def test_get_user_data(hass, hass_ws_client, hass_admin_user, hass_storage): """Test get_user_data command.""" - storage_key = storage.STORAGE_KEY_USER_DATA.format(hass_admin_user.id) + storage_key = f"{DOMAIN}.user_data_{hass_admin_user.id}" hass_storage[storage_key] = { "key": storage_key, "version": 1, @@ -102,7 +102,7 @@ async def test_set_user_data_empty(hass, hass_ws_client, hass_storage): async def test_set_user_data(hass, hass_ws_client, hass_storage, hass_admin_user): """Test set_user_data command with initial data.""" - storage_key = storage.STORAGE_KEY_USER_DATA.format(hass_admin_user.id) + storage_key = f"{DOMAIN}.user_data_{hass_admin_user.id}" hass_storage[storage_key] = { "version": 1, "data": {"test-key": "test-value", "test-complex": "string"}, diff --git a/tests/components/geo_json_events/test_geo_location.py b/tests/components/geo_json_events/test_geo_location.py index 38c7200cce1..8bfbed52a11 100644 --- a/tests/components/geo_json_events/test_geo_location.py +++ b/tests/components/geo_json_events/test_geo_location.py @@ -5,8 +5,6 @@ from homeassistant.components import geo_location from homeassistant.components.geo_json_events.geo_location import ( ATTR_EXTERNAL_ID, SCAN_INTERVAL, - SIGNAL_DELETE_ENTITY, - SIGNAL_UPDATE_ENTITY, ) from homeassistant.components.geo_location import ATTR_SOURCE from homeassistant.const import ( @@ -190,8 +188,8 @@ async def test_setup_race_condition(hass): # Set up some mock feed entries for this test. mock_entry_1 = _generate_mock_feed_entry("1234", "Title 1", 15.5, (-31.0, 150.0)) - delete_signal = SIGNAL_DELETE_ENTITY.format("1234") - update_signal = SIGNAL_UPDATE_ENTITY.format("1234") + delete_signal = f"geo_json_events_delete_1234" + update_signal = f"geo_json_events_update_1234" # Patching 'utcnow' to gain more control over the timed update. utcnow = dt_util.utcnow() diff --git a/tests/components/geofency/test_init.py b/tests/components/geofency/test_init.py index 319a79966fd..b988d613d6c 100644 --- a/tests/components/geofency/test_init.py +++ b/tests/components/geofency/test_init.py @@ -163,7 +163,7 @@ async def webhook_id(hass, geofency_client): async def test_data_validation(geofency_client, webhook_id): """Test data validation.""" - url = "/api/webhook/{}".format(webhook_id) + url = f"/api/webhook/{webhook_id}" # No data req = await geofency_client.post(url) @@ -181,14 +181,14 @@ async def test_data_validation(geofency_client, webhook_id): async def test_gps_enter_and_exit_home(hass, geofency_client, webhook_id): """Test GPS based zone enter and exit.""" - url = "/api/webhook/{}".format(webhook_id) + url = f"/api/webhook/{webhook_id}" # Enter the Home zone req = await geofency_client.post(url, data=GPS_ENTER_HOME) await hass.async_block_till_done() assert req.status == HTTP_OK device_name = slugify(GPS_ENTER_HOME["device"]) - state_name = hass.states.get("{}.{}".format("device_tracker", device_name)).state + state_name = hass.states.get(f"device_tracker.{device_name}").state assert STATE_HOME == state_name # Exit the Home zone @@ -196,7 +196,7 @@ async def test_gps_enter_and_exit_home(hass, geofency_client, webhook_id): await hass.async_block_till_done() assert req.status == HTTP_OK device_name = slugify(GPS_EXIT_HOME["device"]) - state_name = hass.states.get("{}.{}".format("device_tracker", device_name)).state + state_name = hass.states.get(f"device_tracker.{device_name}").state assert STATE_NOT_HOME == state_name # Exit the Home zone with "Send Current Position" enabled @@ -208,13 +208,13 @@ async def test_gps_enter_and_exit_home(hass, geofency_client, webhook_id): await hass.async_block_till_done() assert req.status == HTTP_OK device_name = slugify(GPS_EXIT_HOME["device"]) - current_latitude = hass.states.get( - "{}.{}".format("device_tracker", device_name) - ).attributes["latitude"] + current_latitude = hass.states.get(f"device_tracker.{device_name}").attributes[ + "latitude" + ] assert NOT_HOME_LATITUDE == current_latitude - current_longitude = hass.states.get( - "{}.{}".format("device_tracker", device_name) - ).attributes["longitude"] + current_longitude = hass.states.get(f"device_tracker.{device_name}").attributes[ + "longitude" + ] assert NOT_HOME_LONGITUDE == current_longitude dev_reg = await hass.helpers.device_registry.async_get_registry() @@ -226,43 +226,43 @@ async def test_gps_enter_and_exit_home(hass, geofency_client, webhook_id): async def test_beacon_enter_and_exit_home(hass, geofency_client, webhook_id): """Test iBeacon based zone enter and exit - a.k.a stationary iBeacon.""" - url = "/api/webhook/{}".format(webhook_id) + url = f"/api/webhook/{webhook_id}" # Enter the Home zone req = await geofency_client.post(url, data=BEACON_ENTER_HOME) await hass.async_block_till_done() assert req.status == HTTP_OK - device_name = slugify("beacon_{}".format(BEACON_ENTER_HOME["name"])) - state_name = hass.states.get("{}.{}".format("device_tracker", device_name)).state + device_name = slugify(f"beacon_{BEACON_ENTER_HOME['name']}") + state_name = hass.states.get(f"device_tracker.{device_name}").state assert STATE_HOME == state_name # Exit the Home zone req = await geofency_client.post(url, data=BEACON_EXIT_HOME) await hass.async_block_till_done() assert req.status == HTTP_OK - device_name = slugify("beacon_{}".format(BEACON_ENTER_HOME["name"])) - state_name = hass.states.get("{}.{}".format("device_tracker", device_name)).state + device_name = slugify(f"beacon_{BEACON_ENTER_HOME['name']}") + state_name = hass.states.get(f"device_tracker.{device_name}").state assert STATE_NOT_HOME == state_name async def test_beacon_enter_and_exit_car(hass, geofency_client, webhook_id): """Test use of mobile iBeacon.""" - url = "/api/webhook/{}".format(webhook_id) + url = f"/api/webhook/{webhook_id}" # Enter the Car away from Home zone req = await geofency_client.post(url, data=BEACON_ENTER_CAR) await hass.async_block_till_done() assert req.status == HTTP_OK - device_name = slugify("beacon_{}".format(BEACON_ENTER_CAR["name"])) - state_name = hass.states.get("{}.{}".format("device_tracker", device_name)).state + device_name = slugify(f"beacon_{BEACON_ENTER_CAR['name']}") + state_name = hass.states.get(f"device_tracker.{device_name}").state assert STATE_NOT_HOME == state_name # Exit the Car away from Home zone req = await geofency_client.post(url, data=BEACON_EXIT_CAR) await hass.async_block_till_done() assert req.status == HTTP_OK - device_name = slugify("beacon_{}".format(BEACON_ENTER_CAR["name"])) - state_name = hass.states.get("{}.{}".format("device_tracker", device_name)).state + device_name = slugify(f"beacon_{BEACON_ENTER_CAR['name']}") + state_name = hass.states.get(f"device_tracker.{device_name}").state assert STATE_NOT_HOME == state_name # Enter the Car in the Home zone @@ -272,29 +272,29 @@ async def test_beacon_enter_and_exit_car(hass, geofency_client, webhook_id): req = await geofency_client.post(url, data=data) await hass.async_block_till_done() assert req.status == HTTP_OK - device_name = slugify("beacon_{}".format(data["name"])) - state_name = hass.states.get("{}.{}".format("device_tracker", device_name)).state + device_name = slugify(f"beacon_{data['name']}") + state_name = hass.states.get(f"device_tracker.{device_name}").state assert STATE_HOME == state_name # Exit the Car in the Home zone req = await geofency_client.post(url, data=data) await hass.async_block_till_done() assert req.status == HTTP_OK - device_name = slugify("beacon_{}".format(data["name"])) - state_name = hass.states.get("{}.{}".format("device_tracker", device_name)).state + device_name = slugify(f"beacon_{data['name']}") + state_name = hass.states.get(f"device_tracker.{device_name}").state assert STATE_HOME == state_name async def test_load_unload_entry(hass, geofency_client, webhook_id): """Test that the appropriate dispatch signals are added and removed.""" - url = "/api/webhook/{}".format(webhook_id) + url = f"/api/webhook/{webhook_id}" # Enter the Home zone req = await geofency_client.post(url, data=GPS_ENTER_HOME) await hass.async_block_till_done() assert req.status == HTTP_OK device_name = slugify(GPS_ENTER_HOME["device"]) - state_1 = hass.states.get("{}.{}".format("device_tracker", device_name)) + state_1 = hass.states.get(f"device_tracker.{device_name}") assert STATE_HOME == state_1.state assert len(hass.data[DOMAIN]["devices"]) == 1 @@ -307,7 +307,7 @@ async def test_load_unload_entry(hass, geofency_client, webhook_id): assert await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done() - state_2 = hass.states.get("{}.{}".format("device_tracker", device_name)) + state_2 = hass.states.get(f"device_tracker.{device_name}") assert state_2 is not None assert state_1 is not state_2 diff --git a/tests/components/google/test_calendar.py b/tests/components/google/test_calendar.py index 4aace6f5484..ad7b6b12001 100644 --- a/tests/components/google/test_calendar.py +++ b/tests/components/google/test_calendar.py @@ -218,7 +218,7 @@ async def test_offset_in_progress_event(hass, mock_next_event): event = copy.deepcopy(TEST_EVENT) event["start"]["dateTime"] = start event["end"]["dateTime"] = end - event["summary"] = "{} !!-15".format(event_summary) + event["summary"] = f"{event_summary} !!-15" mock_next_event.return_value.event = event assert await async_setup_component(hass, "google", {"google": GOOGLE_CONFIG}) @@ -250,7 +250,7 @@ async def test_all_day_offset_in_progress_event(hass, mock_next_event): event = copy.deepcopy(TEST_EVENT) event["start"]["date"] = start event["end"]["date"] = end - event["summary"] = "{} !!-25:0".format(event_summary) + event["summary"] = f"{event_summary} !!-25:0" mock_next_event.return_value.event = event assert await async_setup_component(hass, "google", {"google": GOOGLE_CONFIG}) @@ -282,7 +282,7 @@ async def test_all_day_offset_event(hass, mock_next_event): event = copy.deepcopy(TEST_EVENT) event["start"]["date"] = start event["end"]["date"] = end - event["summary"] = "{} !!-{}:0".format(event_summary, offset_hours) + event["summary"] = f"{event_summary} !!-{offset_hours}:0" mock_next_event.return_value.event = event assert await async_setup_component(hass, "google", {"google": GOOGLE_CONFIG}) diff --git a/tests/components/google_assistant/test_google_assistant.py b/tests/components/google_assistant/test_google_assistant.py index 3be97013e4d..f2f43b6dabd 100644 --- a/tests/components/google_assistant/test_google_assistant.py +++ b/tests/components/google_assistant/test_google_assistant.py @@ -31,7 +31,7 @@ ACCESS_TOKEN = "superdoublesecret" @pytest.fixture def auth_header(hass_access_token): """Generate an HTTP header with bearer token authorization.""" - return {AUTHORIZATION: "Bearer {}".format(hass_access_token)} + return {AUTHORIZATION: f"Bearer {hass_access_token}"} @pytest.fixture diff --git a/tests/components/google_assistant/test_http.py b/tests/components/google_assistant/test_http.py index f5e3e505a28..ff159e4e10c 100644 --- a/tests/components/google_assistant/test_http.py +++ b/tests/components/google_assistant/test_http.py @@ -27,7 +27,7 @@ MOCK_TOKEN = {"access_token": "dummtoken", "expires_in": 3600} MOCK_JSON = {"devices": {}} MOCK_URL = "https://dummy" MOCK_HEADER = { - "Authorization": "Bearer {}".format(MOCK_TOKEN["access_token"]), + "Authorization": f"Bearer {MOCK_TOKEN['access_token']}", "X-GFE-SSL": "yes", } @@ -57,7 +57,7 @@ async def test_get_access_token(hass, aioclient_mock): await _get_homegraph_token(hass, jwt) assert aioclient_mock.call_count == 1 assert aioclient_mock.mock_calls[0][3] == { - "Authorization": "Bearer {}".format(jwt), + "Authorization": f"Bearer {jwt}", "Content-Type": "application/x-www-form-urlencoded", } diff --git a/tests/components/google_domains/test_init.py b/tests/components/google_domains/test_init.py index 66e334d342f..1ebc5cfda80 100644 --- a/tests/components/google_domains/test_init.py +++ b/tests/components/google_domains/test_init.py @@ -13,7 +13,7 @@ DOMAIN = "test.example.com" USERNAME = "abc123" PASSWORD = "xyz789" -UPDATE_URL = google_domains.UPDATE_URL.format(USERNAME, PASSWORD) +UPDATE_URL = f"https://{USERNAME}:{PASSWORD}@domains.google.com/nic/update" @pytest.fixture diff --git a/tests/components/google_wifi/test_sensor.py b/tests/components/google_wifi/test_sensor.py index 8a529f93f72..bddee724966 100644 --- a/tests/components/google_wifi/test_sensor.py +++ b/tests/components/google_wifi/test_sensor.py @@ -48,9 +48,7 @@ class TestGoogleWifiSetup(unittest.TestCase): @requests_mock.Mocker() def test_setup_minimum(self, mock_req): """Test setup with minimum configuration.""" - resource = "{}{}{}".format( - "http://", google_wifi.DEFAULT_HOST, google_wifi.ENDPOINT - ) + resource = f"http://{google_wifi.DEFAULT_HOST}{google_wifi.ENDPOINT}" mock_req.get(resource, status_code=200) assert setup_component( self.hass, @@ -62,7 +60,7 @@ class TestGoogleWifiSetup(unittest.TestCase): @requests_mock.Mocker() def test_setup_get(self, mock_req): """Test setup with full configuration.""" - resource = "{}{}{}".format("http://", "localhost", google_wifi.ENDPOINT) + resource = f"http://localhost{google_wifi.ENDPOINT}" mock_req.get(resource, status_code=200) assert setup_component( self.hass, @@ -101,7 +99,7 @@ class TestGoogleWifiSensor(unittest.TestCase): def setup_api(self, data, mock_req): """Set up API with fake data.""" - resource = "{}{}{}".format("http://", "localhost", google_wifi.ENDPOINT) + resource = f"http://localhost{google_wifi.ENDPOINT}" now = datetime(1970, month=1, day=1) with patch("homeassistant.util.dt.now", return_value=now): mock_req.get(resource, text=data, status_code=200) @@ -111,7 +109,7 @@ class TestGoogleWifiSensor(unittest.TestCase): self.sensor_dict = dict() for condition, cond_list in google_wifi.MONITORED_CONDITIONS.items(): sensor = google_wifi.GoogleWifiSensor(self.api, self.name, condition) - name = "{}_{}".format(self.name, condition) + name = f"{self.name}_{condition}" units = cond_list[1] icon = cond_list[2] self.sensor_dict[condition] = { diff --git a/tests/components/gpslogger/test_init.py b/tests/components/gpslogger/test_init.py index f81ef45a648..9135f583d19 100644 --- a/tests/components/gpslogger/test_init.py +++ b/tests/components/gpslogger/test_init.py @@ -77,7 +77,7 @@ async def webhook_id(hass, gpslogger_client): async def test_missing_data(hass, gpslogger_client, webhook_id): """Test missing data.""" - url = "/api/webhook/{}".format(webhook_id) + url = f"/api/webhook/{webhook_id}" data = {"latitude": 1.0, "longitude": 1.1, "device": "123"} @@ -103,7 +103,7 @@ async def test_missing_data(hass, gpslogger_client, webhook_id): async def test_enter_and_exit(hass, gpslogger_client, webhook_id): """Test when there is a known zone.""" - url = "/api/webhook/{}".format(webhook_id) + url = f"/api/webhook/{webhook_id}" data = {"latitude": HOME_LATITUDE, "longitude": HOME_LONGITUDE, "device": "123"} @@ -111,18 +111,14 @@ async def test_enter_and_exit(hass, gpslogger_client, webhook_id): req = await gpslogger_client.post(url, data=data) await hass.async_block_till_done() assert req.status == HTTP_OK - state_name = hass.states.get( - "{}.{}".format(DEVICE_TRACKER_DOMAIN, data["device"]) - ).state + state_name = hass.states.get(f"{DEVICE_TRACKER_DOMAIN}.{data['device']}").state assert STATE_HOME == state_name # Enter Home again req = await gpslogger_client.post(url, data=data) await hass.async_block_till_done() assert req.status == HTTP_OK - state_name = hass.states.get( - "{}.{}".format(DEVICE_TRACKER_DOMAIN, data["device"]) - ).state + state_name = hass.states.get(f"{DEVICE_TRACKER_DOMAIN}.{data['device']}").state assert STATE_HOME == state_name data["longitude"] = 0 @@ -132,9 +128,7 @@ async def test_enter_and_exit(hass, gpslogger_client, webhook_id): req = await gpslogger_client.post(url, data=data) await hass.async_block_till_done() assert req.status == HTTP_OK - state_name = hass.states.get( - "{}.{}".format(DEVICE_TRACKER_DOMAIN, data["device"]) - ).state + state_name = hass.states.get(f"{DEVICE_TRACKER_DOMAIN}.{data['device']}").state assert STATE_NOT_HOME == state_name dev_reg = await hass.helpers.device_registry.async_get_registry() @@ -146,7 +140,7 @@ async def test_enter_and_exit(hass, gpslogger_client, webhook_id): async def test_enter_with_attrs(hass, gpslogger_client, webhook_id): """Test when additional attributes are present.""" - url = "/api/webhook/{}".format(webhook_id) + url = f"/api/webhook/{webhook_id}" data = { "latitude": 1.0, @@ -164,7 +158,7 @@ async def test_enter_with_attrs(hass, gpslogger_client, webhook_id): req = await gpslogger_client.post(url, data=data) await hass.async_block_till_done() assert req.status == HTTP_OK - state = hass.states.get("{}.{}".format(DEVICE_TRACKER_DOMAIN, data["device"])) + state = hass.states.get(f"{DEVICE_TRACKER_DOMAIN}.{data['device']}") assert state.state == STATE_NOT_HOME assert state.attributes["gps_accuracy"] == 10.5 assert state.attributes["battery_level"] == 10.0 @@ -190,7 +184,7 @@ async def test_enter_with_attrs(hass, gpslogger_client, webhook_id): req = await gpslogger_client.post(url, data=data) await hass.async_block_till_done() assert req.status == HTTP_OK - state = hass.states.get("{}.{}".format(DEVICE_TRACKER_DOMAIN, data["device"])) + state = hass.states.get(f"{DEVICE_TRACKER_DOMAIN}.{data['device']}") assert state.state == STATE_HOME assert state.attributes["gps_accuracy"] == 123 assert state.attributes["battery_level"] == 23 @@ -206,16 +200,14 @@ async def test_enter_with_attrs(hass, gpslogger_client, webhook_id): ) async def test_load_unload_entry(hass, gpslogger_client, webhook_id): """Test that the appropriate dispatch signals are added and removed.""" - url = "/api/webhook/{}".format(webhook_id) + url = f"/api/webhook/{webhook_id}" data = {"latitude": HOME_LATITUDE, "longitude": HOME_LONGITUDE, "device": "123"} # Enter the Home req = await gpslogger_client.post(url, data=data) await hass.async_block_till_done() assert req.status == HTTP_OK - state_name = hass.states.get( - "{}.{}".format(DEVICE_TRACKER_DOMAIN, data["device"]) - ).state + state_name = hass.states.get(f"{DEVICE_TRACKER_DOMAIN}.{data['device']}").state assert STATE_HOME == state_name assert len(hass.data[DATA_DISPATCHER][TRACKER_UPDATE]) == 1 diff --git a/tests/components/group/test_init.py b/tests/components/group/test_init.py index 9a45b0ec273..e8878b7cf4a 100644 --- a/tests/components/group/test_init.py +++ b/tests/components/group/test_init.py @@ -43,10 +43,7 @@ class TestComponentsGroup(unittest.TestCase): ) assert ( - STATE_ON - == self.hass.states.get( - group.ENTITY_ID_FORMAT.format("person_and_light") - ).state + STATE_ON == self.hass.states.get(f"{group.DOMAIN}.person_and_light").state ) def test_setup_group_with_a_non_existing_state(self): @@ -296,9 +293,7 @@ class TestComponentsGroup(unittest.TestCase): setup_component(self.hass, "group", {"group": group_conf}) - group_state = self.hass.states.get( - group.ENTITY_ID_FORMAT.format("second_group") - ) + group_state = self.hass.states.get(f"{group.DOMAIN}.second_group") assert STATE_ON == group_state.state assert set((test_group.entity_id, "light.bowl")) == set( group_state.attributes["entity_id"] @@ -307,7 +302,7 @@ class TestComponentsGroup(unittest.TestCase): assert "mdi:work" == group_state.attributes.get(ATTR_ICON) assert 1 == group_state.attributes.get(group.ATTR_ORDER) - group_state = self.hass.states.get(group.ENTITY_ID_FORMAT.format("test_group")) + group_state = self.hass.states.get(f"{group.DOMAIN}.test_group") assert STATE_UNKNOWN == group_state.state assert set(("sensor.happy", "hello.world")) == set( group_state.attributes["entity_id"] @@ -373,10 +368,7 @@ class TestComponentsGroup(unittest.TestCase): ) self.hass.states.set("device_tracker.Adam", "cool_state_not_home") self.hass.block_till_done() - assert ( - STATE_NOT_HOME - == self.hass.states.get(group.ENTITY_ID_FORMAT.format("peeps")).state - ) + assert STATE_NOT_HOME == self.hass.states.get(f"{group.DOMAIN}.peeps").state def test_reloading_groups(self): """Test reloading the group config.""" @@ -431,9 +423,7 @@ class TestComponentsGroup(unittest.TestCase): common.set_group(self.hass, "modify_group", icon="mdi:play") self.hass.block_till_done() - group_state = self.hass.states.get( - group.ENTITY_ID_FORMAT.format("modify_group") - ) + group_state = self.hass.states.get(f"{group.DOMAIN}.modify_group") assert self.hass.states.entity_ids() == ["group.modify_group"] assert group_state.attributes.get(ATTR_ICON) == "mdi:play" @@ -463,9 +453,7 @@ async def test_service_group_set_group_remove_group(hass): assert group_state.attributes[group.ATTR_AUTO] assert group_state.attributes["friendly_name"] == "Test" - common.async_set_group( - hass, "user_test_group", entity_ids=["test.entity_bla1"], - ) + common.async_set_group(hass, "user_test_group", entity_ids=["test.entity_bla1"]) await hass.async_block_till_done() group_state = hass.states.get("group.user_test_group")