Skip to content

Commit 84f7801

Browse files
author
tsunglung
committed
Add github workflows
1 parent 27403b2 commit 84f7801

13 files changed

Lines changed: 206 additions & 108 deletions

File tree

.github/workflows/validate.yml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
name: Validate
2+
3+
on:
4+
push:
5+
pull_request:
6+
7+
jobs:
8+
spellcheck_lint:
9+
name: ShellCheck
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: 📦 Checkout the repository
13+
uses: actions/checkout@v2
14+
15+
- name: ✅ Run PySpelling as a GitHub action
16+
continue-on-error: true
17+
uses: rojopolis/spellcheck-github-actions@0.14.0
18+
with:
19+
config_path: spellcheck.yml
20+
21+
python_linting:
22+
name: Python linting
23+
runs-on: ubuntu-latest
24+
steps:
25+
- name: 📦 Check out source repository
26+
uses: actions/checkout@v2
27+
- name: 📦 Set up Python environment
28+
uses: actions/setup-python@v1
29+
with:
30+
python-version: "3.8"
31+
- name: ✅ flake8 Lint
32+
continue-on-error: true
33+
uses: py-actions/flake8@v1
34+
35+
validate:
36+
runs-on: "ubuntu-latest"
37+
steps:
38+
- uses: "actions/checkout@v2"
39+
- name: HACS validation
40+
continue-on-error: true
41+
uses: "hacs/action@main"
42+
with:
43+
category: "integration"

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2021 osk2
3+
Copyright (c) 2021 tsunglung
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

custom_components/opencwb/__init__.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@
1818
from .const import (
1919
CONF_LANGUAGE,
2020
CONF_LOCATION_NAME,
21-
CONFIG_FLOW_VERSION,
21+
# CONFIG_FLOW_VERSION,
2222
DEFAULT_FORECAST_MODE,
2323
DEFAULT_LANGUAGE,
2424
DOMAIN,
2525
ENTRY_NAME,
2626
ENTRY_WEATHER_COORDINATOR,
27-
FORECAST_MODE_FREE_DAILY,
28-
FORECAST_MODE_ONECALL_DAILY,
27+
# FORECAST_MODE_FREE_DAILY,
28+
# FORECAST_MODE_ONECALL_DAILY,
2929
PLATFORMS,
3030
UPDATE_LISTENER,
3131
)
@@ -47,7 +47,8 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry):
4747
location_name = config_entry.data.get(CONF_LOCATION_NAME, None)
4848
latitude = config_entry.data.get(CONF_LATITUDE, hass.config.latitude)
4949
longitude = config_entry.data.get(CONF_LONGITUDE, hass.config.longitude)
50-
forecast_mode = _get_config_value(config_entry, CONF_MODE, DEFAULT_FORECAST_MODE)
50+
forecast_mode = _get_config_value(
51+
config_entry, CONF_MODE, DEFAULT_FORECAST_MODE)
5152
language = _get_config_value(config_entry, CONF_LANGUAGE, DEFAULT_LANGUAGE)
5253

5354
config_dict = _get_ocwb_config(language)
@@ -67,7 +68,8 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry):
6768

6869
for platform in PLATFORMS:
6970
hass.async_create_task(
70-
hass.config_entries.async_forward_entry_setup(config_entry, platform)
71+
hass.config_entries.async_forward_entry_setup(
72+
config_entry, platform)
7173
)
7274

7375
update_listener = config_entry.add_update_listener(async_update_options)
@@ -86,13 +88,15 @@ async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry):
8688
unload_ok = all(
8789
await asyncio.gather(
8890
*[
89-
hass.config_entries.async_forward_entry_unload(config_entry, platform)
91+
hass.config_entries.async_forward_entry_unload(
92+
config_entry, platform)
9093
for platform in PLATFORMS
9194
]
9295
)
9396
)
9497
if unload_ok:
95-
update_listener = hass.data[DOMAIN][config_entry.entry_id][UPDATE_LISTENER]
98+
update_listener = hass.data[
99+
DOMAIN][config_entry.entry_id][UPDATE_LISTENER]
96100
update_listener()
97101
hass.data[DOMAIN].pop(config_entry.entry_id)
98102

custom_components/opencwb/abstract_ocwb_sensor.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ def device_info(self):
4949
"""Return the device info."""
5050
split_unique_id = self._unique_id.split("-")
5151
return {
52-
"identifiers": {(DOMAIN, f"{split_unique_id[0]}-{split_unique_id[1]}")},
52+
"identifiers": {
53+
(DOMAIN, f"{split_unique_id[0]}-{split_unique_id[1]}")},
5354
"name": DEFAULT_NAME,
5455
"manufacturer": MANUFACTURER,
5556
"entry_type": "service",

custom_components/opencwb/config_flow.py

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,16 @@
1313
CONF_NAME,
1414
)
1515
from homeassistant.core import callback
16-
import homeassistant.helpers.config_validation as cv
1716

1817
from .const import (
19-
CONF_LANGUAGE,
2018
CONF_LOCATION_NAME,
2119
CONFIG_FLOW_VERSION,
2220
DEFAULT_FORECAST_MODE,
23-
DEFAULT_LANGUAGE,
2421
DEFAULT_NAME,
2522
DOMAIN,
2623
FORECAST_MODES,
2724
FORECAST_MODE_ONECALL_HOURLY,
28-
FORECAST_MODE_ONECALL_DAILY,
29-
LANGUAGES,
25+
FORECAST_MODE_ONECALL_DAILY
3026
)
3127
from .core.weatherapi12.uris import ONE_CALL_URI
3228

@@ -48,16 +44,20 @@ async def async_step_user(self, user_input=None):
4844
errors = {}
4945

5046
if user_input is not None:
51-
latitude = user_input.get(CONF_LATITUDE, self.hass.config.latitude)
52-
longitude = user_input.get(CONF_LONGITUDE, self.hass.config.longitude)
47+
latitude = user_input.get(
48+
CONF_LATITUDE, self.hass.config.latitude)
49+
longitude = user_input.get(
50+
CONF_LONGITUDE, self.hass.config.longitude)
5351
location_name = user_input.get(CONF_LOCATION_NAME, None)
54-
location_id = _is_supported_city(user_input[CONF_API_KEY], location_name)
52+
location_id = _is_supported_city(
53+
user_input[CONF_API_KEY], location_name)
5554

5655
if location_name and location_id is None:
5756
errors["base"] = "invalid_location_name"
5857
else:
5958
await self.async_set_unique_id(
60-
urllib.parse.quote_plus(location_name) + "-" + user_input[CONF_MODE])
59+
urllib.parse.quote_plus(
60+
location_name) + "-" + user_input[CONF_MODE])
6161
self._abort_if_unique_id_configured()
6262

6363
if (location_id != ONE_CALL_URI and
@@ -66,7 +66,11 @@ async def async_step_user(self, user_input=None):
6666

6767
try:
6868
api_online = await _is_ocwb_api_online(
69-
self.hass, user_input[CONF_API_KEY], latitude, longitude, location_name
69+
self.hass,
70+
user_input[CONF_API_KEY],
71+
latitude,
72+
longitude,
73+
location_name
7074
)
7175
if not api_online:
7276
errors["base"] = "invalid_api_key"
@@ -85,22 +89,23 @@ async def async_step_user(self, user_input=None):
8589
vol.Required(CONF_API_KEY): str,
8690
vol.Optional(CONF_NAME, default=DEFAULT_NAME): str,
8791
vol.Required(CONF_LOCATION_NAME): str,
88-
# vol.Optional(
89-
# CONF_LATITUDE, default=self.hass.config.latitude
90-
# ): cv.latitude,
91-
# vol.Optional(
92-
# CONF_LONGITUDE, default=self.hass.config.longitude
93-
# ): cv.longitude,
92+
# vol.Optional(
93+
# CONF_LATITUDE, default=self.hass.config.latitude
94+
# ): cv.latitude,
95+
# vol.Optional(
96+
# CONF_LONGITUDE, default=self.hass.config.longitude
97+
# ): cv.longitude,
9498
vol.Optional(CONF_MODE, default=DEFAULT_FORECAST_MODE): vol.In(
9599
FORECAST_MODES
96100
),
97-
# vol.Optional(CONF_LANGUAGE, default=DEFAULT_LANGUAGE): vol.In(
98-
# LANGUAGES
99-
# ),
101+
# vol.Optional(CONF_LANGUAGE, default=DEFAULT_LANGUAGE): vol.In(
102+
# LANGUAGES
103+
# ),
100104
}
101105
)
102106

103-
return self.async_show_form(step_id="user", data_schema=schema, errors=errors)
107+
return self.async_show_form(
108+
step_id="user", data_schema=schema, errors=errors)
104109

105110

106111
class OpenCWBOptionsFlow(config_entries.OptionsFlow):
@@ -136,12 +141,12 @@ def _get_options_schema(self):
136141
CONF_MODE, DEFAULT_FORECAST_MODE
137142
),
138143
): vol.In(FORECAST_MODES),
139-
# vol.Optional(
140-
# CONF_LANGUAGE,
141-
# default=self.config_entry.options.get(
142-
# CONF_LANGUAGE, DEFAULT_LANGUAGE
143-
# ),
144-
# ): vol.In(LANGUAGES),
144+
# vol.Optional(
145+
# CONF_LANGUAGE,
146+
# default=self.config_entry.options.get(
147+
# ONF_LANGUAGE, DEFAULT_LANGUAGE
148+
# ),
149+
# ): vol.In(LANGUAGES),
145150
}
146151
)
147152

@@ -150,6 +155,7 @@ async def _is_ocwb_api_online(hass, api_key, lat, lon, loc):
150155
ocwb = OCWB(api_key).weather_manager()
151156
return await hass.async_add_executor_job(ocwb.one_call, lat, lon, loc)
152157

158+
153159
def _is_supported_city(api_key, loc):
154160
ocwb = OCWB(api_key).weather_manager()
155161
return ocwb.supported_city(loc)

custom_components/opencwb/const.py

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
"""Consts for the OpenCWB."""
2+
# pylint: disable=line too long
23
from homeassistant.components.weather import (
34
ATTR_CONDITION_CLOUDY,
45
ATTR_CONDITION_EXCEPTIONAL,
@@ -17,22 +18,22 @@
1718
ATTR_FORECAST_CONDITION,
1819
ATTR_FORECAST_PRECIPITATION,
1920
ATTR_FORECAST_PRECIPITATION_PROBABILITY,
20-
ATTR_FORECAST_PRESSURE,
21+
# ATTR_FORECAST_PRESSURE,
2122
ATTR_FORECAST_TEMP,
22-
ATTR_FORECAST_TEMP_LOW,
23+
# ATTR_FORECAST_TEMP_LOW,
2324
ATTR_FORECAST_TIME,
2425
ATTR_FORECAST_WIND_BEARING,
2526
ATTR_FORECAST_WIND_SPEED,
2627
)
2728
from homeassistant.const import (
2829
DEGREE,
2930
DEVICE_CLASS_HUMIDITY,
30-
DEVICE_CLASS_PRESSURE,
31+
# DEVICE_CLASS_PRESSURE,
3132
DEVICE_CLASS_TEMPERATURE,
3233
DEVICE_CLASS_TIMESTAMP,
3334
LENGTH_MILLIMETERS,
3435
PERCENTAGE,
35-
PRESSURE_HPA,
36+
# PRESSURE_HPA,
3637
SPEED_METERS_PER_SECOND,
3738
TEMP_CELSIUS,
3839
UV_INDEX,
@@ -93,11 +94,11 @@
9394
ATTR_API_WIND_SPEED,
9495
ATTR_API_WIND_BEARING,
9596
ATTR_API_HUMIDITY,
96-
# ATTR_API_PRESSURE,
97+
# ATTR_API_PRESSURE,
9798
ATTR_API_CLOUDS,
98-
# ATTR_API_RAIN,
99-
# ATTR_API_SNOW,
100-
# ATTR_API_PRECIPITATION_KIND,
99+
# ATTR_API_RAIN,
100+
# ATTR_API_SNOW,
101+
# ATTR_API_PRECIPITATION_KIND,
101102
ATTR_API_UV_INDEX,
102103
ATTR_API_CONDITION,
103104
ATTR_API_WEATHER_CODE,
@@ -106,9 +107,9 @@
106107
ATTR_FORECAST_CONDITION,
107108
ATTR_FORECAST_PRECIPITATION,
108109
ATTR_FORECAST_PRECIPITATION_PROBABILITY,
109-
# ATTR_FORECAST_PRESSURE,
110+
# ATTR_FORECAST_PRESSURE,
110111
ATTR_FORECAST_TEMP,
111-
# ATTR_FORECAST_TEMP_LOW,
112+
# ATTR_FORECAST_TEMP_LOW,
112113
ATTR_FORECAST_TIME,
113114
ATTR_FORECAST_WIND_BEARING,
114115
ATTR_FORECAST_WIND_SPEED,
@@ -119,14 +120,16 @@
119120
]
120121
WEATHER_CODE_SUNNY_OR_CLEAR_NIGHT = 0
121122
CONDITION_CLASSES = {
122-
ATTR_CONDITION_CLOUDY: [ 7],
123-
ATTR_CONDITION_FOG: [24, 25, 26, 27, 28, 31, 32, 33, 34, 35, 36, 38, 39, 41],
123+
ATTR_CONDITION_CLOUDY: [7],
124+
ATTR_CONDITION_FOG: [
125+
24, 25, 26, 27, 28, 31, 32, 33, 34, 35, 36, 38, 39, 41],
124126
ATTR_CONDITION_HAIL: [42],
125127
ATTR_CONDITION_LIGHTNING: [15, 16, 17],
126128
ATTR_CONDITION_LIGHTNING_RAINY: [18],
127129
ATTR_CONDITION_PARTLYCLOUDY: [4, 5, 6],
128130
ATTR_CONDITION_POURING: [18],
129-
ATTR_CONDITION_RAINY: [8, 9, 10, 11, 12, 13, 14, 19, 20, 21, 22, 29, 30, 31],
131+
ATTR_CONDITION_RAINY: [
132+
8, 9, 10, 11, 12, 13, 14, 19, 20, 21, 22, 29, 30, 31],
130133
ATTR_CONDITION_SNOWY: [42],
131134
ATTR_CONDITION_SNOWY_RAINY: [23, 37],
132135
ATTR_CONDITION_SUNNY: [1],
@@ -163,15 +166,15 @@
163166
SENSOR_UNIT: PERCENTAGE,
164167
SENSOR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY,
165168
},
166-
# ATTR_API_PRESSURE: {
167-
# SENSOR_NAME: "Pressure",
168-
# SENSOR_UNIT: PRESSURE_HPA,
169-
# SENSOR_DEVICE_CLASS: DEVICE_CLASS_PRESSURE,
170-
# },
169+
# ATTR_API_PRESSURE: {
170+
# SENSOR_NAME: "Pressure",
171+
# SENSOR_UNIT: PRESSURE_HPA,
172+
# SENSOR_DEVICE_CLASS: DEVICE_CLASS_PRESSURE,
173+
# },
171174
ATTR_API_CLOUDS: {SENSOR_NAME: "Cloud coverage", SENSOR_UNIT: PERCENTAGE},
172-
# ATTR_API_RAIN: {SENSOR_NAME: "Rain", SENSOR_UNIT: LENGTH_MILLIMETERS},
173-
# ATTR_API_SNOW: {SENSOR_NAME: "Snow", SENSOR_UNIT: LENGTH_MILLIMETERS},
174-
# ATTR_API_PRECIPITATION_KIND: {SENSOR_NAME: "Precipitation kind"},
175+
# ATTR_API_RAIN: {SENSOR_NAME: "Rain", SENSOR_UNIT: LENGTH_MILLIMETERS},
176+
# ATTR_API_SNOW: {SENSOR_NAME: "Snow", SENSOR_UNIT: LENGTH_MILLIMETERS},
177+
# ATTR_API_PRECIPITATION_KIND: {SENSOR_NAME: "Precipitation kind"},
175178
ATTR_API_UV_INDEX: {
176179
SENSOR_NAME: "UV Index",
177180
SENSOR_UNIT: UV_INDEX,
@@ -189,21 +192,21 @@
189192
SENSOR_NAME: "Precipitation probability",
190193
SENSOR_UNIT: PERCENTAGE,
191194
},
192-
# ATTR_FORECAST_PRESSURE: {
193-
# SENSOR_NAME: "Pressure",
194-
# SENSOR_UNIT: PRESSURE_HPA,
195-
# SENSOR_DEVICE_CLASS: DEVICE_CLASS_PRESSURE,
196-
# },
195+
# ATTR_FORECAST_PRESSURE: {
196+
# SENSOR_NAME: "Pressure",
197+
# SENSOR_UNIT: PRESSURE_HPA,
198+
# SENSOR_DEVICE_CLASS: DEVICE_CLASS_PRESSURE,
199+
# },
197200
ATTR_FORECAST_TEMP: {
198201
SENSOR_NAME: "Temperature",
199202
SENSOR_UNIT: TEMP_CELSIUS,
200203
SENSOR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
201204
},
202-
# ATTR_FORECAST_TEMP_LOW: {
203-
# SENSOR_NAME: "Temperature Low",
204-
# SENSOR_UNIT: TEMP_CELSIUS,
205-
# SENSOR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
206-
# },
205+
# ATTR_FORECAST_TEMP_LOW: {
206+
# SENSOR_NAME: "Temperature Low",
207+
# SENSOR_UNIT: TEMP_CELSIUS,
208+
# SENSOR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
209+
# },
207210
ATTR_FORECAST_TIME: {
208211
SENSOR_NAME: "Time",
209212
SENSOR_DEVICE_CLASS: DEVICE_CLASS_TIMESTAMP,

0 commit comments

Comments
 (0)