weathergrabber 0.0.7a4__py3-none-any.whl → 0.0.8a2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- weathergrabber/__init__.py +1 -1
- weathergrabber/adapter/tty/console_tty.py +41 -10
- weathergrabber/adapter/tty/waybar_tty.py +38 -11
- weathergrabber/domain/city_location.py +39 -5
- weathergrabber/domain/moon_phase_enum.py +3 -3
- weathergrabber/domain/weather_icon_enum.py +1 -0
- weathergrabber/service/extract_current_conditions_service.py +28 -33
- {weathergrabber-0.0.7a4.dist-info → weathergrabber-0.0.8a2.dist-info}/METADATA +1 -1
- {weathergrabber-0.0.7a4.dist-info → weathergrabber-0.0.8a2.dist-info}/RECORD +13 -13
- {weathergrabber-0.0.7a4.dist-info → weathergrabber-0.0.8a2.dist-info}/WHEEL +0 -0
- {weathergrabber-0.0.7a4.dist-info → weathergrabber-0.0.8a2.dist-info}/entry_points.txt +0 -0
- {weathergrabber-0.0.7a4.dist-info → weathergrabber-0.0.8a2.dist-info}/licenses/LICENSE +0 -0
- {weathergrabber-0.0.7a4.dist-info → weathergrabber-0.0.8a2.dist-info}/top_level.txt +0 -0
weathergrabber/__init__.py
CHANGED
|
@@ -21,8 +21,7 @@ class ConsoleTTY:
|
|
|
21
21
|
|
|
22
22
|
rain_icon = WeatherIconEnum.RAIN.fa_icon if is_fa else WeatherIconEnum.RAIN.emoji_icon
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
state_province = forecast.current_conditions.location.state_province
|
|
24
|
+
city_location = forecast.current_conditions.location
|
|
26
25
|
icon = forecast.current_conditions.icon.fa_icon if is_fa else forecast.current_conditions.icon.emoji_icon
|
|
27
26
|
temperature = forecast.current_conditions.temperature
|
|
28
27
|
|
|
@@ -62,18 +61,48 @@ class ConsoleTTY:
|
|
|
62
61
|
aqi_acronym = forecast.air_quality_index.acronym
|
|
63
62
|
aqi_value = forecast.air_quality_index.value
|
|
64
63
|
|
|
64
|
+
hourly_predictions_format = [
|
|
65
|
+
{
|
|
66
|
+
'title': h.title if len(h.title) < 8 else h.title[:6] + '.',
|
|
67
|
+
'temperature' : h.temperature,
|
|
68
|
+
'icon': h.icon.fa_icon if is_fa else h.icon.emoji_icon,
|
|
69
|
+
'precipitation': f"{h.precipitation.percentage if h.precipitation.percentage else ''}"
|
|
70
|
+
} for h in forecast.hourly_predictions
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
daily_predictions_format = [
|
|
74
|
+
{
|
|
75
|
+
'title': d.title if len(d.title) < 8 else d.title[:6] + '.',
|
|
76
|
+
'high_low': f"{d.high_low}",
|
|
77
|
+
'icon': d.icon.fa_icon if is_fa else d.icon.emoji_icon,
|
|
78
|
+
'precipitation': f"{d.precipitation.percentage}"
|
|
79
|
+
} for d in forecast.daily_predictions
|
|
80
|
+
]
|
|
81
|
+
|
|
82
|
+
# Hourly predictions and daily predictions
|
|
65
83
|
hourly_predictions = [
|
|
66
|
-
|
|
67
|
-
|
|
84
|
+
f"{h['title']}"
|
|
85
|
+
f"{'\t' if len(h['title']) < 3 else ''}\t"
|
|
86
|
+
f"{h['temperature']}"
|
|
87
|
+
"\t"
|
|
88
|
+
f"{h['icon']}\t"
|
|
89
|
+
f"{rain_icon} {h['precipitation']}"
|
|
90
|
+
for h in hourly_predictions_format
|
|
68
91
|
]
|
|
92
|
+
|
|
69
93
|
daily_predictions = [
|
|
70
|
-
|
|
71
|
-
|
|
94
|
+
f"{d['title']}"
|
|
95
|
+
f"{'\t' if len(d['title']) < 3 else ''}\t"
|
|
96
|
+
f"{d['high_low']}"
|
|
97
|
+
f"\t"
|
|
98
|
+
f"{d['icon']}\t"
|
|
99
|
+
f"{rain_icon} {d['precipitation']}"
|
|
100
|
+
for d in daily_predictions_format
|
|
72
101
|
]
|
|
73
102
|
|
|
74
103
|
print_value = (
|
|
75
104
|
"\n"
|
|
76
|
-
f"{
|
|
105
|
+
f"{city_location}\n"
|
|
77
106
|
"\n"
|
|
78
107
|
f"{icon} {temperature}\n"
|
|
79
108
|
"\n"
|
|
@@ -84,9 +113,11 @@ class ConsoleTTY:
|
|
|
84
113
|
"\n"
|
|
85
114
|
f"{moon_icon} {moon_phase}\n"
|
|
86
115
|
"\n"
|
|
87
|
-
f"{wind_icon} {wind}\t
|
|
88
|
-
f"{humidity_icon} {humidity}\t\t
|
|
89
|
-
f"{visibility_icon} {visibility}
|
|
116
|
+
f"{wind_icon} {wind}\t{uv_index}\n"
|
|
117
|
+
f"{humidity_icon} {humidity}\t\t{pressure}\n"
|
|
118
|
+
f"{visibility_icon} {visibility}"
|
|
119
|
+
f"\t{'\t' if len(visibility) < 6 else ''}"
|
|
120
|
+
f"{aqi_acronym} {aqi_category} {aqi_value}\n"
|
|
90
121
|
"\n"
|
|
91
122
|
f"{'\n'.join(hourly_predictions)}\n"
|
|
92
123
|
"\n"
|
|
@@ -21,10 +21,11 @@ class WaybarTTY:
|
|
|
21
21
|
# Forecast icon and temperature
|
|
22
22
|
icon = forecast.current_conditions.icon.fa_icon if is_fa else forecast.current_conditions.icon.emoji_icon
|
|
23
23
|
temperature = forecast.current_conditions.temperature
|
|
24
|
+
rain_icon = WeatherIconEnum.RAIN.fa_icon if is_fa else WeatherIconEnum.RAIN.emoji_icon
|
|
25
|
+
|
|
24
26
|
|
|
25
27
|
# City and state/province
|
|
26
|
-
|
|
27
|
-
state_province = forecast.current_conditions.location.state_province
|
|
28
|
+
city_location = forecast.current_conditions.location
|
|
28
29
|
|
|
29
30
|
# Summary
|
|
30
31
|
summary = forecast.current_conditions.summary
|
|
@@ -65,19 +66,45 @@ class WaybarTTY:
|
|
|
65
66
|
aqi_acronym = forecast.air_quality_index.acronym
|
|
66
67
|
aqi_value = forecast.air_quality_index.value
|
|
67
68
|
|
|
69
|
+
hourly_predictions_format = [{
|
|
70
|
+
'title': h.title if len(h.title) < 10 else h.title[:9] + '.',
|
|
71
|
+
'temperature' : h.temperature,
|
|
72
|
+
'icon': h.icon.fa_icon if is_fa else h.icon.emoji_icon,
|
|
73
|
+
'precipitation': f"{h.precipitation.percentage if h.precipitation.percentage else ''}"
|
|
74
|
+
} for h in forecast.hourly_predictions]
|
|
75
|
+
|
|
76
|
+
daily_predictions_format = [
|
|
77
|
+
{
|
|
78
|
+
'title': d.title if len(d.title) < 10 else d.title[:9] + '.',
|
|
79
|
+
'high_low': f"{d.high_low.high}/<span size='small'>{d.high_low.low}</span>",
|
|
80
|
+
'icon': d.icon.fa_icon if is_fa else d.icon.emoji_icon,
|
|
81
|
+
'precipitation': f"{d.precipitation.percentage}"
|
|
82
|
+
} for d in forecast.daily_predictions
|
|
83
|
+
]
|
|
84
|
+
|
|
68
85
|
# Hourly predictions and daily predictions
|
|
69
|
-
rain_icon = WeatherIconEnum.RAIN.fa_icon if is_fa else WeatherIconEnum.RAIN.emoji_icon
|
|
70
86
|
hourly_predictions = [
|
|
71
|
-
|
|
72
|
-
|
|
87
|
+
f"{h['title']}"
|
|
88
|
+
f"{'\t\t' if len(h['title']) < 4 else '\t'}"
|
|
89
|
+
f"{h['temperature']}"
|
|
90
|
+
"\t\t"
|
|
91
|
+
f"{h['icon']}\t"
|
|
92
|
+
f"{rain_icon} {h['precipitation']}"
|
|
93
|
+
for h in hourly_predictions_format
|
|
73
94
|
]
|
|
95
|
+
|
|
74
96
|
daily_predictions = [
|
|
75
|
-
|
|
76
|
-
|
|
97
|
+
f"{d['title']}"
|
|
98
|
+
f"\t{'\t' if len(d['title']) < 6 else ' '}"
|
|
99
|
+
f"{d['high_low']}"
|
|
100
|
+
f"\t{'\t' if len(d['high_low']) < 6 else ''}"
|
|
101
|
+
f"{d['icon']}\t"
|
|
102
|
+
f"{rain_icon} {d['precipitation']}"
|
|
103
|
+
for d in daily_predictions_format
|
|
77
104
|
]
|
|
78
105
|
|
|
79
106
|
tooltip = (
|
|
80
|
-
f"{
|
|
107
|
+
f"{city_location}\n"
|
|
81
108
|
"\n"
|
|
82
109
|
f"<span size='xx-large'>{icon}\t\t{temperature}</span>\n"
|
|
83
110
|
"\n"
|
|
@@ -89,9 +116,9 @@ class WaybarTTY:
|
|
|
89
116
|
"\n"
|
|
90
117
|
f"{moon_icon} {moon_phase}\n"
|
|
91
118
|
"\n"
|
|
92
|
-
f"{wind_icon} {wind}\t
|
|
93
|
-
f"{humidity_icon} {humidity}\t\t
|
|
94
|
-
f"{visibility_icon} {visibility}\t
|
|
119
|
+
f"{wind_icon} {wind}\t\t{uv_index}\n"
|
|
120
|
+
f"{humidity_icon} {humidity}\t\t{pressure}\n"
|
|
121
|
+
f"{visibility_icon} {visibility}\t{aqi_acronym} {aqi_category} {aqi_value}\n"
|
|
95
122
|
"\n"
|
|
96
123
|
f"{'\n'.join(hourly_predictions)}\n"
|
|
97
124
|
"\n"
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
class CityLocation:
|
|
2
2
|
|
|
3
|
-
def __init__(self, city: str, state_province: str = None, country: str = None):
|
|
3
|
+
def __init__(self, city: str, state_province: str = None, country: str = None, location = None):
|
|
4
4
|
self._city = city
|
|
5
5
|
self._state_province = state_province
|
|
6
6
|
self._country = country
|
|
7
|
+
self._location = location
|
|
7
8
|
|
|
8
9
|
@property
|
|
9
10
|
def city(self) -> str:
|
|
@@ -17,16 +18,49 @@ class CityLocation:
|
|
|
17
18
|
def country(self) -> str:
|
|
18
19
|
return self._country
|
|
19
20
|
|
|
21
|
+
@property
|
|
22
|
+
def location(self):
|
|
23
|
+
return self._location
|
|
24
|
+
|
|
20
25
|
def __repr__(self):
|
|
21
|
-
return f"CityLocation(city={self.city}, state_province={self.state_province}, country={self.country})"
|
|
26
|
+
return f"CityLocation(city={self.city}, state_province={self.state_province}, country={self.country}, location={self.location})"
|
|
27
|
+
|
|
28
|
+
def __str__(self):
|
|
29
|
+
parts = []
|
|
30
|
+
if self.location:
|
|
31
|
+
parts.append(self.location)
|
|
32
|
+
if self.city:
|
|
33
|
+
parts.append(self.city)
|
|
34
|
+
if self.state_province:
|
|
35
|
+
parts.append(self.state_province)
|
|
36
|
+
if self.country:
|
|
37
|
+
parts.append(self.country)
|
|
38
|
+
return ", ".join(parts) if parts else "Unknown Location"
|
|
22
39
|
|
|
23
40
|
@classmethod
|
|
24
41
|
def from_string(cls, data: str) -> "CityLocation":
|
|
25
42
|
#'Nova Friburgo, Rio de Janeiro, Brazil'
|
|
43
|
+
#'Macuco, Santos, São Paulo, Brésil'
|
|
44
|
+
#'New York, NY, USA'
|
|
45
|
+
#'Tokyo, Tokyo Prefecture, Japan'
|
|
46
|
+
country, state_province, city, location = None, None, None, None
|
|
26
47
|
parts = data.split(", ")
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
48
|
+
|
|
49
|
+
if len(parts) > 2:
|
|
50
|
+
i = len(parts) - 1
|
|
51
|
+
while i > 0:
|
|
52
|
+
if not country:
|
|
53
|
+
country = parts[i]
|
|
54
|
+
elif not state_province:
|
|
55
|
+
state_province = parts[i]
|
|
56
|
+
elif not city:
|
|
57
|
+
city = parts[i]
|
|
58
|
+
i -= 1
|
|
59
|
+
# Location is the first registry. If it's different from city, use it.
|
|
60
|
+
if city != parts[0]:
|
|
61
|
+
location = parts[0]
|
|
62
|
+
return cls(city=city, state_province=state_province, country=country, location=location)
|
|
63
|
+
|
|
30
64
|
if len(parts) == 2:
|
|
31
65
|
city, state_province = parts
|
|
32
66
|
return cls(city=city, state_province=state_province)
|
|
@@ -18,12 +18,12 @@ class MoonPhaseEnum(Enum):
|
|
|
18
18
|
PHASE_10 = ("phase-10", "\uf186", "🌔")
|
|
19
19
|
PHASE_11 = ("phase-11", "\uf186", "🌔")
|
|
20
20
|
PHASE_12 = ("phase-12", "\uf186", "🌔")
|
|
21
|
-
PHASE_13 = ("phase-13", "\uf186", "
|
|
21
|
+
PHASE_13 = ("phase-13", "\uf186", "🌕")
|
|
22
22
|
# Full Moon
|
|
23
23
|
PHASE_14 = ("phase-14", "\uf186", "🌕")
|
|
24
24
|
# Waning Gibbous
|
|
25
|
-
PHASE_15 = ("phase-15", "\uf186", "
|
|
26
|
-
PHASE_16 = ("phase-16", "\uf186", "
|
|
25
|
+
PHASE_15 = ("phase-15", "\uf186", "🌕")
|
|
26
|
+
PHASE_16 = ("phase-16", "\uf186", "🌕")
|
|
27
27
|
PHASE_17 = ("phase-17", "\uf186", "🌖")
|
|
28
28
|
PHASE_18 = ("phase-18", "\uf186", "🌖")
|
|
29
29
|
PHASE_19 = ("phase-19", "\uf186", "🌖")
|
|
@@ -11,6 +11,7 @@ class WeatherIconEnum(Enum):
|
|
|
11
11
|
FEEL = ('feel', '\uf2c9', '🥵')
|
|
12
12
|
FOGGY = ('foggy', '\uf74e', '🌫️')
|
|
13
13
|
HUMIDITY = ('humidity', '\uf043', '💧')
|
|
14
|
+
ISOLATED_THUNDERSTORMS = ('isolated-thunderstorms', chr(0x26C8), '⛈️')
|
|
14
15
|
MOSTLY_CLEAR_DAY = ('mostly-clear-day', chr(0xF0599), '☀️')
|
|
15
16
|
MOSTLY_CLEAR_NIGHT = ('mostly-clear-night', chr(0xF0594), '🌙')
|
|
16
17
|
MOSTLY_CLOUDY_DAY = ('mostly-cloudy-day', chr(0xf013), '☁️')
|
|
@@ -12,36 +12,31 @@ class ExtractCurrentConditionsService:
|
|
|
12
12
|
pass
|
|
13
13
|
|
|
14
14
|
def execute(self, weather_data: PyQuery) -> dict:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return current_conditions
|
|
44
|
-
|
|
45
|
-
except Exception as e:
|
|
46
|
-
self.logger.error(f"Error extracting current conditions: {e}")
|
|
47
|
-
raise ValueError("Could not extract current conditions") from e
|
|
15
|
+
self.logger.debug("Extracting Current Conditions")
|
|
16
|
+
|
|
17
|
+
data = PyQuery(weather_data('div[data-testid="CurrentConditionsContainer"]'))
|
|
18
|
+
|
|
19
|
+
city_location_data = data.find('h1').text() #'Nova Friburgo, Rio de Janeiro, Brazil'
|
|
20
|
+
timestamp_data = data.find('span[class*="timestamp"]').text() # 'As of 8:01 pm GMT-03:00'
|
|
21
|
+
icon_data = data.find('svg[class*="wxIcon"]').attr('name') # 'partly-cloudy-night'
|
|
22
|
+
temp_day_night = data.find('div[class*="tempHiLoValue"]').text() #'Day\xa063°\xa0•\xa0Night\xa046°'
|
|
23
|
+
|
|
24
|
+
city_location = CityLocation.from_string(city_location_data)
|
|
25
|
+
timestamp = Timestamp.from_string(timestamp_data)
|
|
26
|
+
temperature = data.find('span[class*="tempValue"]').text() # '48°'
|
|
27
|
+
icon = WeatherIconEnum.from_name(icon_data)
|
|
28
|
+
phrase = data.find('div[data-testid*="wxPhrase"]').text() # 'Partly Cloudy'
|
|
29
|
+
day_night = DayNight.from_string(temp_day_night)
|
|
30
|
+
|
|
31
|
+
current_conditions = CurrentConditions(
|
|
32
|
+
location=city_location,
|
|
33
|
+
timestamp=timestamp,
|
|
34
|
+
temperature=temperature,
|
|
35
|
+
icon=icon,
|
|
36
|
+
summary=phrase,
|
|
37
|
+
day_night=day_night
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
self.logger.debug(f"Extracted current conditions: {current_conditions}")
|
|
41
|
+
|
|
42
|
+
return current_conditions
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
weathergrabber/__init__.py,sha256=
|
|
1
|
+
weathergrabber/__init__.py,sha256=OQyXRFDBQpeJV7yWqj7vvj7jeFkB7rJoWAIp6j-nvjE,175
|
|
2
2
|
weathergrabber/__main__.py,sha256=K10wQv3-LSRD_FRLHWphdSs3OAcuzIb4sQaKmj7Fql0,105
|
|
3
3
|
weathergrabber/cli.py,sha256=YOWoVLfwktgqK1bp89GUKkAEKyMM4DaNL4akBi6xVVk,1979
|
|
4
4
|
weathergrabber/core.py,sha256=TiZ2utmYKf9lkIXWv8YBfSdiHZXJZXuHS8B-dBDvevw,1138
|
|
5
5
|
weathergrabber/weathergrabber_application.py,sha256=2JfZAR94En3rmGrYKWRKxdRXmK_ikhJdgrGotFjtDys,3987
|
|
6
6
|
weathergrabber/adapter/client/weather_api.py,sha256=9S7JmXaAVvvPY60dz6rC3lx7X68BcqyvNzvSVM1-af8,963
|
|
7
7
|
weathergrabber/adapter/client/weather_search_api.py,sha256=1oy7JitHcmwkkhFlD0eIt5A7a4cGbf7LMNi26tR8z5o,1724
|
|
8
|
-
weathergrabber/adapter/tty/console_tty.py,sha256=
|
|
8
|
+
weathergrabber/adapter/tty/console_tty.py,sha256=7Ih0DwRyEfaYM4tfCMHhyHo-ti97u-OmZ36ANwEAu5I,5953
|
|
9
9
|
weathergrabber/adapter/tty/json_tty.py,sha256=ZRZSfVhFYsb8AXD1qjb1GBpaRMxHGNaMXW5VN8AvdaU,647
|
|
10
|
-
weathergrabber/adapter/tty/waybar_tty.py,sha256=
|
|
10
|
+
weathergrabber/adapter/tty/waybar_tty.py,sha256=Mx2zBLHRFaCKzdQBcsGz8wACbyWx2dLA8d1j0AfyLYY,6074
|
|
11
11
|
weathergrabber/domain/air_quality_index.py,sha256=eH1glUdedtbRCZMcw5_zB5ybJQUcyY-EBMxL8vVJ6zA,2791
|
|
12
|
-
weathergrabber/domain/city_location.py,sha256=
|
|
12
|
+
weathergrabber/domain/city_location.py,sha256=GHzFMvOhks7iQkWgR0mS-L21uAb_tlNycvfrdY-itzc,2362
|
|
13
13
|
weathergrabber/domain/color.py,sha256=dkWZnQ2BjXUV8qTfZnmNGng_cqKtKuDdekYw4R2NJ9U,1080
|
|
14
14
|
weathergrabber/domain/current_conditions.py,sha256=S14j2lL_gc2pds0wbl5M4_72PbVdubOuX8lnE_tZVTg,1477
|
|
15
15
|
weathergrabber/domain/daily_predictions.py,sha256=8pzmaU-yugS2Hx_6MBWAk24wlSISe1OQIRrCK_lfvbw,1618
|
|
@@ -19,7 +19,7 @@ weathergrabber/domain/health_activities.py,sha256=wCG82-lBfrnIwxptgnMZt-fXHJsBnI
|
|
|
19
19
|
weathergrabber/domain/hourly_predictions.py,sha256=PFiGuo7mBoQHLR-bDirV--R126YAOzkwIHgaeRGFQSA,2179
|
|
20
20
|
weathergrabber/domain/label_value.py,sha256=LvrvZbSrcEUUpxvKAmYkFnpDFWsa6LFmGA9O8i6HB84,446
|
|
21
21
|
weathergrabber/domain/moon_phase.py,sha256=sEHRi8yPIHTzaEcOkz556uNYsKLq4YmYa5qDncSX44c,587
|
|
22
|
-
weathergrabber/domain/moon_phase_enum.py,sha256=
|
|
22
|
+
weathergrabber/domain/moon_phase_enum.py,sha256=D6F-qoZFR29kYlgDEwg5TjaD7Hjadw4XFNVFWQ6V9qo,2091
|
|
23
23
|
weathergrabber/domain/precipitation.py,sha256=eXrpwMOsEJWGqV4bEBhN9niWYXalgdZRLG4-I39JZ2A,466
|
|
24
24
|
weathergrabber/domain/search.py,sha256=j3BzskyPl0hDWV02XTOC4tJonV5RHxr5Rop_rYMKUtA,387
|
|
25
25
|
weathergrabber/domain/sunrise_sunset.py,sha256=wNTk01NIuLbQ7gN_giAFv4f3FaRx9khul-mj19g57vE,1207
|
|
@@ -27,7 +27,7 @@ weathergrabber/domain/temperature_hight_low.py,sha256=PQOJ5uDtfMRBR5yMxXA46xuorJ
|
|
|
27
27
|
weathergrabber/domain/timestamp.py,sha256=Bk6f8Tx0-yNitYmEKIWHnqh_ALDwxEHrhoCRSrfvYTU,1222
|
|
28
28
|
weathergrabber/domain/today_details.py,sha256=EUlV7xerYw5QhEsBfvO5m6-9Ghm4nPkXJz9zCmSYTbA,2398
|
|
29
29
|
weathergrabber/domain/uv_index.py,sha256=lNdk38Jq-A9msuzOLjIKrZIHUc2C9J8V4MA7HU3s1ZM,1420
|
|
30
|
-
weathergrabber/domain/weather_icon_enum.py,sha256=
|
|
30
|
+
weathergrabber/domain/weather_icon_enum.py,sha256=TTnJKJgPwUM7OIDSWOCh7fanhEj7zm4X0bANqQLnU44,2775
|
|
31
31
|
weathergrabber/domain/wind.py,sha256=wTDz3X1rYsnw_eNoDi1miwaomxwhiJkY_q6xrdZtLak,789
|
|
32
32
|
weathergrabber/domain/adapter/icon_enum.py,sha256=YxGYS5vBRV2AiAfeuPOdqaQOHixAssiMbOzQnTmdSBg,84
|
|
33
33
|
weathergrabber/domain/adapter/output_enum.py,sha256=61iR10ppY8DNALPKV-vLnDQni5HxEzpoRNZbdBdRygk,117
|
|
@@ -53,7 +53,7 @@ weathergrabber/domain/adapter/mapper/uv_index_mapper.py,sha256=K3AdRnAPv1Yqudc3e
|
|
|
53
53
|
weathergrabber/domain/adapter/mapper/weather_icon_enum_mapper.py,sha256=YC7juvt38Ehtb3Y-iQFM77s1EQAv4qNHd6vGOqws6HI,249
|
|
54
54
|
weathergrabber/domain/adapter/mapper/wind_mapper.py,sha256=nXyYwqTvLLMyKtSey27GaGvBV8xVhB_Y3HU0sbmIe_E,149
|
|
55
55
|
weathergrabber/service/extract_aqi_service.py,sha256=IT3S9zZmThdqPtJDBF_G8LDUNlwUYoBh49z_WUlB-tk,1285
|
|
56
|
-
weathergrabber/service/extract_current_conditions_service.py,sha256=
|
|
56
|
+
weathergrabber/service/extract_current_conditions_service.py,sha256=R4rd-_53HOQ7YqhHdfI_gKrIy27scYkNEmLgqS23f40,1838
|
|
57
57
|
weathergrabber/service/extract_daily_forecast_oldstyle_service.py,sha256=DiKfaGbMnIIBnxI-IYG8HmfLHNAW5AGew5NjFSMqBk4,2190
|
|
58
58
|
weathergrabber/service/extract_daily_forecast_service.py,sha256=ZN61_neEAdn7RPedLvmmFKH7Pq1EQGhG9A9Dy8o09zM,2709
|
|
59
59
|
weathergrabber/service/extract_health_activities_service.py,sha256=2qJ4tEEz5uV6EwHUIFhWM8zol_BbDW3omEohf8kDg3M,1014
|
|
@@ -64,9 +64,9 @@ weathergrabber/service/extract_today_details_service.py,sha256=QAwF7EzVaL1STGNDy
|
|
|
64
64
|
weathergrabber/service/read_weather_service.py,sha256=7_B8E9IN1KCwOhpuS5PfWazI1sCrDyYrZhkV2R38bhc,649
|
|
65
65
|
weathergrabber/service/search_location_service.py,sha256=tZmVgO45hjwoa4cl5bKPjMBmYlGxJiH_I9Ymb5pwEwU,1422
|
|
66
66
|
weathergrabber/usecase/use_case.py,sha256=K2RBIEi7S0ixAM6oDKmCPYkuJ9azatxle8zAqX0xM1E,4635
|
|
67
|
-
weathergrabber-0.0.
|
|
68
|
-
weathergrabber-0.0.
|
|
69
|
-
weathergrabber-0.0.
|
|
70
|
-
weathergrabber-0.0.
|
|
71
|
-
weathergrabber-0.0.
|
|
72
|
-
weathergrabber-0.0.
|
|
67
|
+
weathergrabber-0.0.8a2.dist-info/licenses/LICENSE,sha256=X5JFljoqN43yFwpMLudQ9rtty4K_FeZfnz3v8Yhw23Q,1067
|
|
68
|
+
weathergrabber-0.0.8a2.dist-info/METADATA,sha256=543lEmwau2kcLeiIOCdRGjla0zcrux7ewKhOt7J7ruE,5796
|
|
69
|
+
weathergrabber-0.0.8a2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
70
|
+
weathergrabber-0.0.8a2.dist-info/entry_points.txt,sha256=m2P9a4mrJDTzuNaiTU438NA60GxCfaw7VKvruWw43N8,63
|
|
71
|
+
weathergrabber-0.0.8a2.dist-info/top_level.txt,sha256=P3NMDJJYRIvQujf994Vb4gZrobkKWkL2gh3NF_ajQWM,15
|
|
72
|
+
weathergrabber-0.0.8a2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|