Improve formatting in component files (#135261)

* Improve formatting in component files

* Apply suggestions from code review
This commit is contained in:
epenet 2025-01-10 11:46:15 +01:00 committed by GitHub
parent eba090c9ef
commit 24c70caf33
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
63 changed files with 96 additions and 101 deletions

View File

@ -66,7 +66,7 @@ class AdvantageAirZoneMotion(AdvantageAirZoneEntity, BinarySensorEntity):
def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
"""Initialize an Advantage Air Zone Motion sensor."""
super().__init__(instance, ac_key, zone_key)
self._attr_name = f'{self._zone["name"]} motion'
self._attr_name = f"{self._zone['name']} motion"
self._attr_unique_id += "-motion"
@property
@ -84,7 +84,7 @@ class AdvantageAirZoneMyZone(AdvantageAirZoneEntity, BinarySensorEntity):
def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
"""Initialize an Advantage Air Zone MyZone sensor."""
super().__init__(instance, ac_key, zone_key)
self._attr_name = f'{self._zone["name"]} myZone'
self._attr_name = f"{self._zone['name']} myZone"
self._attr_unique_id += "-myzone"
@property

View File

@ -103,7 +103,7 @@ class AdvantageAirZoneVent(AdvantageAirZoneEntity, SensorEntity):
def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
"""Initialize an Advantage Air Zone Vent Sensor."""
super().__init__(instance, ac_key, zone_key=zone_key)
self._attr_name = f'{self._zone["name"]} vent'
self._attr_name = f"{self._zone['name']} vent"
self._attr_unique_id += "-vent"
@property
@ -131,7 +131,7 @@ class AdvantageAirZoneSignal(AdvantageAirZoneEntity, SensorEntity):
def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
"""Initialize an Advantage Air Zone wireless signal sensor."""
super().__init__(instance, ac_key, zone_key)
self._attr_name = f'{self._zone["name"]} signal'
self._attr_name = f"{self._zone['name']} signal"
self._attr_unique_id += "-signal"
@property
@ -165,7 +165,7 @@ class AdvantageAirZoneTemp(AdvantageAirZoneEntity, SensorEntity):
def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
"""Initialize an Advantage Air Zone Temp Sensor."""
super().__init__(instance, ac_key, zone_key)
self._attr_name = f'{self._zone["name"]} temperature'
self._attr_name = f"{self._zone['name']} temperature"
self._attr_unique_id += "-temp"
@property

View File

@ -155,8 +155,7 @@ class AirthingsHeaterEnergySensor(
self._id = airthings_device.device_id
self._attr_device_info = DeviceInfo(
configuration_url=(
"https://dashboard.airthings.com/devices/"
f"{airthings_device.device_id}"
f"https://dashboard.airthings.com/devices/{airthings_device.device_id}"
),
identifiers={(DOMAIN, airthings_device.device_id)},
name=airthings_device.name,

View File

@ -50,7 +50,7 @@ SENSOR_DESCRIPTIONS = (
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda settings, status, measurements, history: int(
history.get(
f'Outdoor {"AQI(US)" if settings["is_aqi_usa"] else "AQI(CN)"}', -1
f"Outdoor {'AQI(US)' if settings['is_aqi_usa'] else 'AQI(CN)'}", -1
)
),
translation_key="outdoor_air_quality_index",

View File

@ -636,9 +636,9 @@ class AutomationEntity(BaseAutomationEntity, RestoreEntity):
alias = ""
if "trigger" in run_variables:
if "description" in run_variables["trigger"]:
reason = f' by {run_variables["trigger"]["description"]}'
reason = f" by {run_variables['trigger']['description']}"
if "alias" in run_variables["trigger"]:
alias = f' trigger \'{run_variables["trigger"]["alias"]}\''
alias = f" trigger '{run_variables['trigger']['alias']}'"
self._logger.debug("Automation%s triggered%s", alias, reason)
# Create a new context referring to the old context.

View File

@ -20,7 +20,7 @@ class BalboaEntity(Entity):
"""Initialize the control."""
mac = client.mac_address
model = client.model
self._attr_unique_id = f'{model}-{key}-{mac.replace(":","")[-6:]}'
self._attr_unique_id = f"{model}-{key}-{mac.replace(':', '')[-6:]}"
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, mac)},
name=model,

View File

@ -136,7 +136,7 @@ def _extract_blueprint_from_community_topic(
)
return ImportedBlueprint(
f'{post["username"]}/{topic["slug"]}', block_content, blueprint
f"{post['username']}/{topic['slug']}", block_content, blueprint
)

View File

@ -26,7 +26,7 @@ def async_describe_events(
"""Describe bthome logbook event."""
data = event.data
device = dev_reg.async_get(data["device_id"])
name = device and device.name or f'BTHome {data["address"]}'
name = device and device.name or f"BTHome {data['address']}"
if properties := data["event_properties"]:
message = f"{data['event_class']} {data['event_type']}: {properties}"
else:

View File

@ -42,7 +42,7 @@ def datapoints_greater_than_degree(value: dict) -> dict:
if len(value[CONF_DATAPOINTS]) <= value[CONF_DEGREE]:
raise vol.Invalid(
f"{CONF_DATAPOINTS} must have at least"
f" {value[CONF_DEGREE]+1} {CONF_DATAPOINTS}"
f" {value[CONF_DEGREE] + 1} {CONF_DATAPOINTS}"
)
return value

View File

@ -266,7 +266,7 @@ class Doods(ImageProcessingEntity):
# Draw detected objects
for instance in values:
box_label = f'{label} {instance["score"]:.1f}%'
box_label = f"{label} {instance['score']:.1f}%"
# Already scaled, use 1 for width and height
draw_box(
draw,

View File

@ -85,7 +85,7 @@ class DukeEnergyCoordinator(DataUpdateCoordinator[None]):
)
continue
id_prefix = f"{meter["serviceType"].lower()}_{serial_number}"
id_prefix = f"{meter['serviceType'].lower()}_{serial_number}"
consumption_statistic_id = f"{DOMAIN}:{id_prefix}_energy_consumption"
self._statistic_ids.add(consumption_statistic_id)
_LOGGER.debug(
@ -136,7 +136,7 @@ class DukeEnergyCoordinator(DataUpdateCoordinator[None]):
)
name_prefix = (
f"Duke Energy " f"{meter["serviceType"].capitalize()} {serial_number}"
f"Duke Energy {meter['serviceType'].capitalize()} {serial_number}"
)
consumption_metadata = StatisticMetaData(
has_mean=False,

View File

@ -603,7 +603,7 @@ class Thermostat(ClimateEntity):
"""Return the remote sensor device name_by_user or name for the thermostat."""
return sorted(
[
f'{item["name_by_user"]} ({item["id"]})'
f"{item['name_by_user']} ({item['id']})"
for item in self.remote_sensor_ids_names
]
)
@ -873,7 +873,7 @@ class Thermostat(ClimateEntity):
translation_placeholders={
"options": ", ".join(
[
f'{item["name_by_user"]} ({item["id"]})'
f"{item['name_by_user']} ({item['id']})"
for item in self.remote_sensor_ids_names
]
)

View File

@ -34,7 +34,7 @@ class EcobeeNotifyEntity(EcobeeBaseEntity, NotifyEntity):
"""Initialize the thermostat."""
super().__init__(data, thermostat_index)
self._attr_unique_id = (
f"{self.thermostat["identifier"]}_notify_{thermostat_index}"
f"{self.thermostat['identifier']}_notify_{thermostat_index}"
)
def send_message(self, message: str, title: str | None = None) -> None:

View File

@ -133,7 +133,7 @@ async def _async_migrate_unique_ids(hass: HomeAssistant, entry: ConfigEntry) ->
and mac_matches_by_one(entity_mac, unique_id)
):
# Old format {dhcp_mac}....., New format {discovery_mac}....
new_unique_id = f"{unique_id}{entity_unique_id[len(unique_id):]}"
new_unique_id = f"{unique_id}{entity_unique_id[len(unique_id) :]}"
else:
return None
_LOGGER.debug(

View File

@ -794,7 +794,7 @@ class LoggerSensor(_FroniusSensorEntity):
"unit"
)
self._attr_unique_id = (
f'{logger_data["unique_identifier"]["value"]}-{description.key}'
f"{logger_data['unique_identifier']['value']}-{description.key}"
)
@ -815,7 +815,7 @@ class MeterSensor(_FroniusSensorEntity):
if (meter_uid := meter_data["serial"]["value"]) == "n.a.":
meter_uid = (
f"{coordinator.solar_net.solar_net_device_id}:"
f'{meter_data["model"]["value"]}'
f"{meter_data['model']['value']}"
)
self._attr_device_info = DeviceInfo(
@ -849,7 +849,7 @@ class OhmpilotSensor(_FroniusSensorEntity):
sw_version=device_data["software"]["value"],
via_device=(DOMAIN, coordinator.solar_net.solar_net_device_id),
)
self._attr_unique_id = f'{device_data["serial"]["value"]}-{description.key}'
self._attr_unique_id = f"{device_data['serial']['value']}-{description.key}"
class PowerFlowSensor(_FroniusSensorEntity):
@ -883,7 +883,7 @@ class StorageSensor(_FroniusSensorEntity):
super().__init__(coordinator, description, solar_net_id)
storage_data = self._device_data()
self._attr_unique_id = f'{storage_data["serial"]["value"]}-{description.key}'
self._attr_unique_id = f"{storage_data['serial']['value']}-{description.key}"
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, storage_data["serial"]["value"])},
manufacturer=storage_data["manufacturer"]["value"],

View File

@ -124,8 +124,7 @@ class HarmonyData(HarmonySubscriberMixin):
except (ValueError, AttributeError) as err:
await self._client.close()
raise ConfigEntryNotReady(
f"{self.name}: Error {err} while connected HUB at:"
f" {self._address}:8088"
f"{self.name}: Error {err} while connected HUB at: {self._address}:8088"
) from err
if not connected:
await self._client.close()

View File

@ -195,7 +195,7 @@ class ClimateAehW4a1(ClimateEntity):
fan_mode = status["wind_status"]
self._attr_fan_mode = AC_TO_HA_FAN_MODES[fan_mode]
swing_mode = f'{status["up_down"]}{status["left_right"]}'
swing_mode = f"{status['up_down']}{status['left_right']}"
self._attr_swing_mode = AC_TO_HA_SWING[swing_mode]
if self._attr_hvac_mode in (HVACMode.COOL, HVACMode.HEAT):

View File

@ -21,7 +21,7 @@ class HiveEntity(Entity):
self.hive = hive
self.device = hive_device
self._attr_name = self.device["haName"]
self._attr_unique_id = f'{self.device["hiveID"]}-{self.device["hiveType"]}'
self._attr_unique_id = f"{self.device['hiveID']}-{self.device['hiveType']}"
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, self.device["device_id"])},
model=self.device["deviceData"]["model"],

View File

@ -102,8 +102,8 @@ class AccessoryIIDStorage:
char_hap_type: str | None = uuid_to_hap_type(char_uuid) if char_uuid else None
# Allocation key must be a string since we are saving it to JSON
allocation_key = (
f'{service_hap_type}_{service_unique_id or ""}_'
f'{char_hap_type or ""}_{char_unique_id or ""}'
f"{service_hap_type}_{service_unique_id or ''}_"
f"{char_hap_type or ''}_{char_unique_id or ''}"
)
# AID must be a string since JSON keys cannot be int
aid_str = str(aid)

View File

@ -48,7 +48,7 @@ class DeviceTriggerAccessory(HomeAccessory):
for idx, trigger in enumerate(device_triggers):
type_: str = trigger["type"]
subtype: str | None = trigger.get("subtype")
unique_id = f'{type_}-{subtype or ""}'
unique_id = f"{type_}-{subtype or ''}"
entity_id: str | None = None
if (entity_id_or_uuid := trigger.get("entity_id")) and (
entry := ent_reg.async_get(entity_id_or_uuid)
@ -122,7 +122,7 @@ class DeviceTriggerAccessory(HomeAccessory):
"""
reason = ""
if "trigger" in run_variables and "description" in run_variables["trigger"]:
reason = f' by {run_variables["trigger"]["description"]}'
reason = f" by {run_variables['trigger']['description']}"
_LOGGER.debug("Button triggered%s - %s", reason, run_variables)
idx = int(run_variables["trigger"]["idx"])
self.triggers[idx].set_value(0)

View File

@ -323,8 +323,7 @@ class HKDevice:
self.hass,
self.async_update_available_state,
timedelta(seconds=BLE_AVAILABILITY_CHECK_INTERVAL),
name=f"HomeKit Device {self.unique_id} BLE availability "
"check poll",
name=f"HomeKit Device {self.unique_id} BLE availability check poll",
)
)
# BLE devices always get an RSSI sensor as well

View File

@ -43,7 +43,7 @@ class IHCEntity(Entity):
self.suggested_area = product.get("group")
if "id" in product:
product_id = product["id"]
self.device_id = f"{controller_id}_{product_id }"
self.device_id = f"{controller_id}_{product_id}"
# this will name the device the same way as the IHC visual application: Product name + position
self.device_name = product["name"]
if self.ihc_position:

View File

@ -66,7 +66,7 @@ class IstaConfigFlow(ConfigFlow, domain=DOMAIN):
else:
if TYPE_CHECKING:
assert info
title = f"{info["firstName"]} {info["lastName"]}".strip()
title = f"{info['firstName']} {info['lastName']}".strip()
await self.async_set_unique_id(info["activeConsumptionUnit"])
self._abort_if_unique_id_configured()
return self.async_create_entry(

View File

@ -45,7 +45,7 @@ from .models import IsyData
def time_string(i: int) -> str:
"""Return a formatted ramp rate time string."""
if i >= 60:
return f"{(float(i)/60):.1f} {UnitOfTime.MINUTES}"
return f"{(float(i) / 60):.1f} {UnitOfTime.MINUTES}"
return f"{i} {UnitOfTime.SECONDS}"

View File

@ -34,7 +34,7 @@ def short_address(address: str) -> str:
def name_from_discovery(discovery: MicroBotAdvertisement) -> str:
"""Get the name from a discovery."""
return f'{discovery.data["local_name"]} {short_address(discovery.address)}'
return f"{discovery.data['local_name']} {short_address(discovery.address)}"
class MicroBotConfigFlow(ConfigFlow, domain=DOMAIN):

View File

@ -88,7 +88,7 @@ class KNXExposeSensor:
self._remove_listener: Callable[[], None] | None = None
self.device: ExposeSensor = ExposeSensor(
xknx=self.xknx,
name=f"{self.entity_id}__{self.expose_attribute or "state"}",
name=f"{self.entity_id}__{self.expose_attribute or 'state'}",
group_address=config[KNX_ADDRESS],
respond_to_read=config[CONF_RESPOND_TO_READ],
value_type=self.expose_type,

View File

@ -101,8 +101,8 @@ class Plenticore:
model=f"{prod1} {prod2}",
name=settings["scb:network"][hostname_id],
sw_version=(
f'IOC: {device_local["Properties:VersionIOC"]}'
f' MC: {device_local["Properties:VersionMC"]}'
f"IOC: {device_local['Properties:VersionIOC']}"
f" MC: {device_local['Properties:VersionMC']}"
),
)

View File

@ -40,7 +40,7 @@ async def validate_input(hass: HomeAssistant, data: dict[str, Any]) -> list[Loca
raise InvalidAuth from error
if not locations:
raise NoLocations(f'No locations found for account {data["username"]}')
raise NoLocations(f"No locations found for account {data['username']}")
return locations

View File

@ -90,9 +90,9 @@ def get_resource(domain_name: str, domain_data: ConfigType) -> str:
if domain_name == "cover":
return cast(str, domain_data["motor"])
if domain_name == "climate":
return f'{domain_data["source"]}.{domain_data["setpoint"]}'
return f"{domain_data['source']}.{domain_data['setpoint']}"
if domain_name == "scene":
return f'{domain_data["register"]}.{domain_data["scene"]}'
return f"{domain_data['register']}.{domain_data['scene']}"
raise ValueError("Unknown domain")

View File

@ -116,7 +116,7 @@ class LektricoFlowHandler(ConfigFlow, domain=DOMAIN):
self._serial_number = str(settings["serial_number"])
self._device_type = settings["type"]
self._board_revision = settings["board_revision"]
self._name = f"{settings["type"]}_{self._serial_number}"
self._name = f"{settings['type']}_{self._serial_number}"
# Check if already configured
# Set unique id

View File

@ -168,7 +168,7 @@ class ThinQMQTT:
async def async_handle_device_event(self, message: dict) -> None:
"""Handle received mqtt message."""
unique_id = (
f"{message["deviceId"]}_{list(message["report"].keys())[0]}"
f"{message['deviceId']}_{list(message['report'].keys())[0]}"
if message["deviceType"] == DeviceType.WASHTOWER
else message["deviceId"]
)

View File

@ -101,7 +101,7 @@ async def async_browse_media(
BrowseMedia(
title=view["title"],
media_class=MediaClass.APP,
media_content_id=f'{info["url_path"]}/{view["path"]}',
media_content_id=f"{info['url_path']}/{view['path']}",
media_content_type=DOMAIN,
thumbnail="https://brands.home-assistant.io/_/lovelace/logo.png",
can_play=True,

View File

@ -53,7 +53,7 @@ async def async_setup_entry(
# Append the child device name to the end of the parent keypad
# name to create the entity name
full_name = f'{parent_device_info.get("name")} {device_name}'
full_name = f"{parent_device_info.get('name')} {device_name}"
# Set the device_info to the same as the Parent Keypad
# The entities will be nested inside the keypad device
entities.append(

View File

@ -44,7 +44,7 @@ class LutronCasetaLight(LutronCasetaUpdatableEntity, SwitchEntity):
parent_keypad = keypads[device["parent_device"]]
parent_device_info = parent_keypad["device_info"]
# Append the child device name to the end of the parent keypad name to create the entity name
self._attr_name = f'{parent_device_info["name"]} {device["device_name"]}'
self._attr_name = f"{parent_device_info['name']} {device['device_name']}"
# Set the device_info to the same as the Parent Keypad
# The entities will be nested inside the keypad device
self._attr_device_info = parent_device_info

View File

@ -67,8 +67,8 @@ async def validate_input(hass: HomeAssistant, data):
# Return the validation result
address = (
f'{user_data["address"]["street"]} {user_data["address"]["house_number"]}'
f'{user_data["address"]["house_number_ext"]}'
f"{user_data['address']['street']} {user_data['address']['house_number']}"
f"{user_data['address']['house_number_ext']}"
)
return auth_token, {
"title": address,

View File

@ -17,7 +17,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up ProgettiHWSW Automation from a config entry."""
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = ProgettiHWSWAPI(
f'{entry.data["host"]}:{entry.data["port"]}'
f"{entry.data['host']}:{entry.data['port']}"
)
# Check board validation again to load new values to API.

View File

@ -19,7 +19,7 @@ DATA_SCHEMA = vol.Schema(
async def validate_input(hass: HomeAssistant, data):
"""Validate the user host input."""
api_instance = ProgettiHWSWAPI(f'{data["host"]}:{data["port"]}')
api_instance = ProgettiHWSWAPI(f"{data['host']}:{data['port']}")
is_valid = await api_instance.check_board()
if not is_valid:

View File

@ -32,7 +32,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: PyLoadConfigEntry) -> bo
"""Set up pyLoad from a config entry."""
url = (
f"{"https" if entry.data[CONF_SSL] else "http"}://"
f"{'https' if entry.data[CONF_SSL] else 'http'}://"
f"{entry.data[CONF_HOST]}:{entry.data[CONF_PORT]}/"
)

View File

@ -83,7 +83,7 @@ async def validate_input(hass: HomeAssistant, user_input: dict[str, Any]) -> Non
)
url = (
f"{"https" if user_input[CONF_SSL] else "http"}://"
f"{'https' if user_input[CONF_SSL] else 'http'}://"
f"{user_input[CONF_HOST]}:{user_input[CONF_PORT]}/"
)
pyload = PyLoadAPI(

View File

@ -40,7 +40,7 @@ def _get_db_stats(instance: Recorder, database_name: str) -> dict[str, Any]:
and (get_size := DIALECT_TO_GET_SIZE.get(dialect_name))
and (db_bytes := get_size(session, database_name))
):
db_stats["estimated_db_size"] = f"{db_bytes/1024/1024:.2f} MiB"
db_stats["estimated_db_size"] = f"{db_bytes / 1024 / 1024:.2f} MiB"
return db_stats

View File

@ -361,7 +361,7 @@ def migrate_entity_ids(
if host.api.supported(None, "UID") and not entity.unique_id.startswith(
host.unique_id
):
new_id = f"{host.unique_id}_{entity.unique_id.split("_", 1)[1]}"
new_id = f"{host.unique_id}_{entity.unique_id.split('_', 1)[1]}"
entity_reg.async_update_entity(entity.entity_id, new_unique_id=new_id)
if entity.device_id in ch_device_ids:

View File

@ -57,7 +57,7 @@ def _rssi_convert(value: int | None) -> str | None:
"""Rssi is given as dBm value."""
if value is None:
return None
return f"{value*8-120}"
return f"{value * 8 - 120}"
@dataclass(frozen=True)

View File

@ -12,7 +12,7 @@ from .coordinator import SenseCoordinator
def sense_to_mdi(sense_icon: str) -> str:
"""Convert sense icon to mdi icon."""
return f"mdi:{MDI_ICONS.get(sense_icon, "power-plug")}"
return f"mdi:{MDI_ICONS.get(sense_icon, 'power-plug')}"
class SenseEntity(CoordinatorEntity[SenseCoordinator]):

View File

@ -557,7 +557,7 @@ class RpcBluTrvClimate(ShellyRpcEntity, ClimateEntity):
self._config = coordinator.device.config[f"{BLU_TRV_IDENTIFIER}:{id_}"]
ble_addr: str = self._config["addr"]
self._attr_unique_id = f"{ble_addr}-{self.key}"
name = self._config["name"] or f"shellyblutrv-{ble_addr.replace(":", "")}"
name = self._config["name"] or f"shellyblutrv-{ble_addr.replace(':', '')}"
model_id = self._config.get("local_name")
self._attr_device_info = DeviceInfo(
connections={(CONNECTION_BLUETOOTH, ble_addr)},

View File

@ -42,7 +42,7 @@ def async_describe_events(
if click_type in RPC_INPUTS_EVENTS_TYPES:
rpc_coordinator = get_rpc_coordinator_by_device_id(hass, device_id)
if rpc_coordinator and rpc_coordinator.device.initialized:
key = f"input:{channel-1}"
key = f"input:{channel - 1}"
input_name = get_rpc_entity_name(rpc_coordinator.device, key)
elif click_type in BLOCK_INPUTS_EVENTS_TYPES:

View File

@ -137,7 +137,7 @@ def get_block_channel_name(device: BlockDevice, block: Block | None) -> str:
else:
base = ord("1")
return f"{entity_name} channel {chr(int(block.channel)+base)}"
return f"{entity_name} channel {chr(int(block.channel) + base)}"
def is_block_momentary_input(
@ -200,7 +200,7 @@ def get_block_input_triggers(
subtype = "button"
else:
assert block.channel
subtype = f"button{int(block.channel)+1}"
subtype = f"button{int(block.channel) + 1}"
if device.settings["device"]["type"] in SHBTN_MODELS:
trigger_types = SHBTN_INPUTS_EVENTS_TYPES
@ -409,7 +409,7 @@ def get_rpc_input_triggers(device: RpcDevice) -> list[tuple[str, str]]:
continue
for trigger_type in RPC_INPUTS_EVENTS_TYPES:
subtype = f"button{id_+1}"
subtype = f"button{id_ + 1}"
triggers.append((trigger_type, subtype))
return triggers

View File

@ -44,7 +44,7 @@ class SlideButton(SlideEntity, ButtonEntity):
def __init__(self, coordinator: SlideCoordinator) -> None:
"""Initialize the slide button."""
super().__init__(coordinator)
self._attr_unique_id = f"{coordinator.data["mac"]}-calibrate"
self._attr_unique_id = f"{coordinator.data['mac']}-calibrate"
async def async_press(self) -> None:
"""Send out a calibrate command."""

View File

@ -47,7 +47,7 @@ class SlideSwitch(SlideEntity, SwitchEntity):
def __init__(self, coordinator: SlideCoordinator) -> None:
"""Initialize the slide switch."""
super().__init__(coordinator)
self._attr_unique_id = f"{coordinator.data["mac"]}-touchgo"
self._attr_unique_id = f"{coordinator.data['mac']}-touchgo"
@property
def is_on(self) -> bool:

View File

@ -76,7 +76,7 @@ class SomaTilt(SomaEntity, CoverEntity):
response = self.api.set_shade_position(self.device["mac"], 100)
if not is_api_response_success(response):
raise HomeAssistantError(
f'Error while closing the cover ({self.name}): {response["msg"]}'
f"Error while closing the cover ({self.name}): {response['msg']}"
)
self.set_position(0)
@ -85,7 +85,7 @@ class SomaTilt(SomaEntity, CoverEntity):
response = self.api.set_shade_position(self.device["mac"], -100)
if not is_api_response_success(response):
raise HomeAssistantError(
f'Error while opening the cover ({self.name}): {response["msg"]}'
f"Error while opening the cover ({self.name}): {response['msg']}"
)
self.set_position(100)
@ -94,7 +94,7 @@ class SomaTilt(SomaEntity, CoverEntity):
response = self.api.stop_shade(self.device["mac"])
if not is_api_response_success(response):
raise HomeAssistantError(
f'Error while stopping the cover ({self.name}): {response["msg"]}'
f"Error while stopping the cover ({self.name}): {response['msg']}"
)
# Set cover position to some value where up/down are both enabled
self.set_position(50)
@ -109,7 +109,7 @@ class SomaTilt(SomaEntity, CoverEntity):
if not is_api_response_success(response):
raise HomeAssistantError(
f"Error while setting the cover position ({self.name}):"
f' {response["msg"]}'
f" {response['msg']}"
)
self.set_position(kwargs[ATTR_TILT_POSITION])
@ -152,7 +152,7 @@ class SomaShade(SomaEntity, CoverEntity):
response = self.api.set_shade_position(self.device["mac"], 100)
if not is_api_response_success(response):
raise HomeAssistantError(
f'Error while closing the cover ({self.name}): {response["msg"]}'
f"Error while closing the cover ({self.name}): {response['msg']}"
)
def open_cover(self, **kwargs: Any) -> None:
@ -160,7 +160,7 @@ class SomaShade(SomaEntity, CoverEntity):
response = self.api.set_shade_position(self.device["mac"], 0)
if not is_api_response_success(response):
raise HomeAssistantError(
f'Error while opening the cover ({self.name}): {response["msg"]}'
f"Error while opening the cover ({self.name}): {response['msg']}"
)
def stop_cover(self, **kwargs: Any) -> None:
@ -168,7 +168,7 @@ class SomaShade(SomaEntity, CoverEntity):
response = self.api.stop_shade(self.device["mac"])
if not is_api_response_success(response):
raise HomeAssistantError(
f'Error while stopping the cover ({self.name}): {response["msg"]}'
f"Error while stopping the cover ({self.name}): {response['msg']}"
)
# Set cover position to some value where up/down are both enabled
self.set_position(50)
@ -182,7 +182,7 @@ class SomaShade(SomaEntity, CoverEntity):
if not is_api_response_success(response):
raise HomeAssistantError(
f"Error while setting the cover position ({self.name}):"
f' {response["msg"]}'
f" {response['msg']}"
)
async def async_update(self) -> None:

View File

@ -166,7 +166,7 @@ class Segment:
self.hls_playlist_parts.append(
f"#EXT-X-PART:DURATION={part.duration:.3f},URI="
f'"./segment/{self.sequence}.{part_num}.m4s"'
f'{",INDEPENDENT=YES" if part.has_keyframe else ""}'
f"{',INDEPENDENT=YES' if part.has_keyframe else ''}"
)
if self.complete:
# Construct the final playlist_template. The placeholder will share a

View File

@ -460,7 +460,7 @@ class TimestampValidator:
if packet.dts is None:
if self._missing_dts >= MAX_MISSING_DTS: # type: ignore[unreachable]
raise StreamWorkerError(
f"No dts in {MAX_MISSING_DTS+1} consecutive packets"
f"No dts in {MAX_MISSING_DTS + 1} consecutive packets"
)
self._missing_dts += 1
return False

View File

@ -135,8 +135,8 @@ class DeviceConnectivity(SurePetcareBinarySensor):
self._attr_is_on = bool(state)
if state:
self._attr_extra_state_attributes = {
"device_rssi": f'{state["signal"]["device_rssi"]:.2f}',
"hub_rssi": f'{state["signal"]["hub_rssi"]:.2f}',
"device_rssi": f"{state['signal']['device_rssi']:.2f}",
"hub_rssi": f"{state['signal']['hub_rssi']:.2f}",
}
else:
self._attr_extra_state_attributes = {}

View File

@ -114,7 +114,7 @@ async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) ->
if match := re.match(
rf"(?:{old_unique_id})-(?P<id>\d+)", entity_entry.unique_id
):
entity_new_unique_id = f'{new_unique_id}-{match.group("id")}'
entity_new_unique_id = f"{new_unique_id}-{match.group('id')}"
_LOGGER.debug(
"Migrating entity %s from %s to new id %s",
entity_entry.entity_id,

View File

@ -67,7 +67,7 @@ def short_address(address: str) -> str:
def name_from_discovery(discovery: SwitchBotAdvertisement) -> str:
"""Get the name from a discovery."""
return f'{discovery.data["modelFriendlyName"]} {short_address(discovery.address)}'
return f"{discovery.data['modelFriendlyName']} {short_address(discovery.address)}"
class SwitchbotConfigFlow(ConfigFlow, domain=DOMAIN):

View File

@ -58,7 +58,7 @@ class TailwindDoorEntity(CoordinatorEntity[TailwindDataUpdateCoordinator]):
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, f"{coordinator.data.device_id}-{door_id}")},
via_device=(DOMAIN, coordinator.data.device_id),
name=f"Door {coordinator.data.doors[door_id].index+1}",
name=f"Door {coordinator.data.doors[door_id].index + 1}",
manufacturer="Tailwind",
model=coordinator.data.product,
sw_version=coordinator.data.firmware_version,

View File

@ -93,7 +93,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
continue
if isinstance(entry.options[key], str):
raise ConfigEntryError(
f"The '{entry.options.get(CONF_NAME) or ""}' number template needs to "
f"The '{entry.options.get(CONF_NAME) or ''}' number template needs to "
f"be reconfigured, {key} must be a number, got '{entry.options[key]}'"
)

View File

@ -35,7 +35,7 @@ class TwinklyModeSelect(TwinklyEntity, SelectEntity):
def __init__(self, coordinator: TwinklyCoordinator) -> None:
"""Initialize TwinklyModeSelect."""
super().__init__(coordinator)
self._attr_unique_id = f"{coordinator.data.device_info["mac"]}_mode"
self._attr_unique_id = f"{coordinator.data.device_info['mac']}_mode"
self.client = coordinator.client
@property

View File

@ -97,14 +97,16 @@ def async_generate_url(
) -> str:
"""Generate the full URL for a webhook_id."""
return (
f"{get_url(
hass,
allow_internal=allow_internal,
allow_external=allow_external,
allow_cloud=False,
allow_ip=allow_ip,
prefer_external=prefer_external,
)}"
f"{
get_url(
hass,
allow_internal=allow_internal,
allow_external=allow_external,
allow_cloud=False,
allow_ip=allow_ip,
prefer_external=prefer_external,
)
}"
f"{async_generate_path(webhook_id)}"
)

View File

@ -86,7 +86,7 @@ class FlowHandler(ConfigFlow, domain=DOMAIN):
data = {CONF_HOST: self._host, CONF_CLIENT_SECRET: client.client_key}
if not self._name:
self._name = f"{DEFAULT_NAME} {client.system_info["modelName"]}"
self._name = f"{DEFAULT_NAME} {client.system_info['modelName']}"
return self.async_create_entry(title=self._name, data=data)
return self.async_show_form(step_id="pairing", errors=errors)

View File

@ -63,7 +63,7 @@ class WebSocketAdapter(logging.LoggerAdapter):
def process(self, msg: str, kwargs: Any) -> tuple[str, Any]:
"""Add connid to websocket log messages."""
assert self.extra is not None
return f'[{self.extra["connid"]}] {msg}', kwargs
return f"[{self.extra['connid']}] {msg}", kwargs
class WebSocketHandler:

View File

@ -86,7 +86,7 @@ class YaleDoorBatterySensor(YaleEntity, BinarySensorEntity):
) -> None:
"""Initiate Yale door battery Sensor."""
super().__init__(coordinator, data)
self._attr_unique_id = f"{data["address"]}-battery"
self._attr_unique_id = f"{data['address']}-battery"
@property
def is_on(self) -> bool:

View File

@ -84,7 +84,7 @@ class YaleDataUpdateCoordinator(DataUpdateCoordinator[dict[str, Any]]):
contact["address"]: contact["_state"] for contact in door_windows
}
_sensor_battery_map = {
f"{contact["address"]}-battery": contact["_battery"]
f"{contact['address']}-battery": contact["_battery"]
for contact in door_windows
}
_temp_map = {temp["address"]: temp["status_temp"] for temp in temp_sensors}

View File

@ -163,11 +163,7 @@ class ZHAFirmwareUpdateEntity(
"""
if self.entity_data.device_proxy.device.is_mains_powered:
header = (
"<ha-alert alert-type='info'>"
f"{OTA_MESSAGE_RELIABILITY}"
"</ha-alert>"
)
header = f"<ha-alert alert-type='info'>{OTA_MESSAGE_RELIABILITY}</ha-alert>"
else:
header = (
"<ha-alert alert-type='info'>"