gov-uk-dashboards 13.5.2__py3-none-any.whl → 14.0.0__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.
- gov_uk_dashboards/components/__init__.py +1 -1
- gov_uk_dashboards/components/dash/__init__.py +92 -0
- gov_uk_dashboards/components/{create_download_chart_button.py → dash/create_download_chart_button.py} +1 -1
- gov_uk_dashboards/components/{create_download_data_button.py → dash/create_download_data_button.py} +1 -1
- gov_uk_dashboards/components/{plotly → dash}/filter_panel.py +1 -1
- gov_uk_dashboards/components/{plotly → dash}/table.py +2 -2
- gov_uk_dashboards/components/helpers/__init__.py +0 -0
- gov_uk_dashboards/components/{display_chart_or_table_with_header.py → helpers/display_chart_or_table_with_header.py} +4 -4
- gov_uk_dashboards/{lib → components/helpers}/plotting_helper_functions.py +17 -0
- gov_uk_dashboards/components/plotly/__init__.py +0 -92
- gov_uk_dashboards/components/plotly/choropleth_map.py +1 -1
- gov_uk_dashboards/components/plotly/enums.py +34 -0
- gov_uk_dashboards/components/plotly/stacked_barchart.py +12 -36
- gov_uk_dashboards/components/plotly/time_series_chart.py +478 -0
- gov_uk_dashboards/constants.py +5 -0
- gov_uk_dashboards/lib/datetime_functions/__init__.py +0 -0
- gov_uk_dashboards/lib/datetime_functions/datetime_functions.py +345 -0
- {gov_uk_dashboards-13.5.2.dist-info → gov_uk_dashboards-14.0.0.dist-info}/METADATA +1 -1
- {gov_uk_dashboards-13.5.2.dist-info → gov_uk_dashboards-14.0.0.dist-info}/RECORD +53 -47
- {gov_uk_dashboards-13.5.2.dist-info → gov_uk_dashboards-14.0.0.dist-info}/WHEEL +1 -1
- /gov_uk_dashboards/components/{plotly → dash}/apply_and_reset_filters_buttons.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/banners.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/card.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/card_full_width.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/collapsible_panel.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/comparison_la_filter_button.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/context_banner.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/dashboard_container.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/details.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/download_button.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/footer.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/graph.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/header.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/heading.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/html_list.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/key_value_pair.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/main_content.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/navbar.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/no_data_message.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/notification_banner.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/paragraph.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/phase_banner.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/row_component.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/side_navbar.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/tooltip.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/tooltip_title.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/visualisation_commentary.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/visualisation_title.py +0 -0
- /gov_uk_dashboards/components/{plotly → dash}/warning_text.py +0 -0
- /gov_uk_dashboards/components/{plotly → helpers}/generate_dash_graph_from_figure.py +0 -0
- /gov_uk_dashboards/{lib → components/helpers}/update_layout_bgcolor_margin.py +0 -0
- {gov_uk_dashboards-13.5.2.dist-info → gov_uk_dashboards-14.0.0.dist-info}/licenses/LICENSE +0 -0
- {gov_uk_dashboards-13.5.2.dist-info → gov_uk_dashboards-14.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,345 @@
|
|
1
|
+
"""Functions to manipulate and format date strings"""
|
2
|
+
|
3
|
+
import calendar
|
4
|
+
import os
|
5
|
+
from datetime import datetime, date
|
6
|
+
import re
|
7
|
+
from typing import Optional
|
8
|
+
|
9
|
+
|
10
|
+
def convert_date_string_to_text_string(
|
11
|
+
date_str: str,
|
12
|
+
date_format: Optional[str] = "%Y-%m-%d",
|
13
|
+
include_day_of_month: Optional[bool] = True,
|
14
|
+
abbreviate_month: Optional[bool] = True,
|
15
|
+
include_year: Optional[bool] = True,
|
16
|
+
) -> str:
|
17
|
+
"""Converts date string in format passed in to text string, with format determined by
|
18
|
+
parameters.
|
19
|
+
Args:
|
20
|
+
date_str (str): The date string to format.
|
21
|
+
date_format (str, optional): The format of the "date" string. Defaults to "%Y-%m-%d".
|
22
|
+
include_day_of_month (bool, optional): Whether to include the date.
|
23
|
+
abbreviate_month (bool, optional): Whether to abbreviate the month eg. Mar over March.
|
24
|
+
Defaults to True.
|
25
|
+
include_year (bool, optional): Whether to include the year. Defaults to True.
|
26
|
+
Returns:
|
27
|
+
str: Formatted date string.
|
28
|
+
"""
|
29
|
+
dt_obj = datetime.strptime(date_str, date_format)
|
30
|
+
return convert_date_obj_to_text_string(
|
31
|
+
dt_obj, include_day_of_month, abbreviate_month, include_year
|
32
|
+
)
|
33
|
+
|
34
|
+
|
35
|
+
def convert_date_obj_to_text_string(
|
36
|
+
dt_obj: datetime,
|
37
|
+
include_day_of_month: Optional[bool] = True,
|
38
|
+
abbreviate_month: Optional[bool] = True,
|
39
|
+
include_year: Optional[bool] = True,
|
40
|
+
) -> str:
|
41
|
+
"""Converts date object to text string, with format determined by parameters. If month is June
|
42
|
+
or July, abbreviate_month is set to False.
|
43
|
+
Args:
|
44
|
+
dt_obj (datetime): The datetime object to format, in form YYYY-MM-DD.
|
45
|
+
include_day_of_month (bool, optional): Whether to include the date.
|
46
|
+
abbreviate_month (bool, optional): Whether to abbreviate the month eg. Mar over March.
|
47
|
+
Defaults to True.
|
48
|
+
include_year (bool, optional): Whether to include the year. Defaults to True.
|
49
|
+
Returns:
|
50
|
+
str: Formatted date string.
|
51
|
+
"""
|
52
|
+
if dt_obj.month in (6, 7):
|
53
|
+
abbreviate_month = False
|
54
|
+
if include_day_of_month:
|
55
|
+
text_string_format = "%e"
|
56
|
+
if abbreviate_month:
|
57
|
+
text_string_format += " %b"
|
58
|
+
else:
|
59
|
+
text_string_format += " %B"
|
60
|
+
else:
|
61
|
+
text_string_format = ""
|
62
|
+
if abbreviate_month:
|
63
|
+
text_string_format += "%b"
|
64
|
+
else:
|
65
|
+
text_string_format += "%B"
|
66
|
+
if include_year:
|
67
|
+
text_string_format += " %Y"
|
68
|
+
return dt_obj.strftime(text_string_format).strip()
|
69
|
+
|
70
|
+
|
71
|
+
def format_year_month_to_month_year(date_string: str):
|
72
|
+
"""
|
73
|
+
Converts a date string from 'YYYY-MM' format to 'Month YYYY' format.
|
74
|
+
Args:
|
75
|
+
date_string (str): A date string in the format 'YYYY-MM'.
|
76
|
+
Returns:
|
77
|
+
str: The formatted date string in 'Month YYYY' format.
|
78
|
+
"""
|
79
|
+
if not date_string:
|
80
|
+
raise ValueError("No date_string provided")
|
81
|
+
return datetime.strptime(date_string, "%Y-%m").strftime("%B %Y")
|
82
|
+
|
83
|
+
|
84
|
+
def convert_financial_year_to_date(
|
85
|
+
financial_year_str: str, use_start_date: bool = True
|
86
|
+
) -> datetime:
|
87
|
+
"""Converts a financial year string to a datetime object.
|
88
|
+
If `use_start_date` is True, the function will return April 1st of the
|
89
|
+
start year of the financial year. If `use_start_date` is False,
|
90
|
+
it will return March 31st of the end year of the financial year.
|
91
|
+
|
92
|
+
Args:
|
93
|
+
financial_year_str (str): Financial year string in format YYYY-YY
|
94
|
+
use_start_date (bool, optional): Whether to use start or end date. Defaults to True.
|
95
|
+
|
96
|
+
Returns:
|
97
|
+
datetime.datetime: A datetime object corresponding to the requested date
|
98
|
+
(either April 1st of the start year or March 31st of the end year).
|
99
|
+
"""
|
100
|
+
start_year = int(financial_year_str[:4])
|
101
|
+
end_year = start_year + 1
|
102
|
+
if use_start_date:
|
103
|
+
date_str = f"{start_year}-04-01"
|
104
|
+
else:
|
105
|
+
date_str = f"{end_year}-03-31"
|
106
|
+
return datetime.strptime(date_str, "%Y-%m-%d")
|
107
|
+
|
108
|
+
|
109
|
+
def convert_calendar_year_to_first_january_date(date_str: str):
|
110
|
+
"""Converts a string in format YYYY to datetime object on January 1st"""
|
111
|
+
date_str = f"{date_str}-01-01"
|
112
|
+
return datetime.strptime(date_str, "%Y-%m-%d")
|
113
|
+
|
114
|
+
|
115
|
+
def convert_to_dd_mm_yyyy(date_str: str, includes_time: bool = False) -> str:
|
116
|
+
"""Converts a date string to a string in the format DD-MM-YYYY
|
117
|
+
|
118
|
+
Args:
|
119
|
+
date_str (str): Date string, either in format YYYY-MM-DD OR YYYY-DD-HH HH:MM:SS.MsMsMs
|
120
|
+
includes_time (bool, optional): Whether the date_str contains time. Defaults to False.
|
121
|
+
|
122
|
+
Returns:
|
123
|
+
str: String in the format DD-MM-YYYY
|
124
|
+
"""
|
125
|
+
datetime_format = "%Y-%m-%d %H:%M:%S.%f" if includes_time else "%Y-%m-%d"
|
126
|
+
datetime_object = datetime.strptime(date_str, datetime_format)
|
127
|
+
return datetime_object.strftime("%d-%m-%Y")
|
128
|
+
|
129
|
+
|
130
|
+
def convert_to_financial_year(date_str: str, date_format: str = "%d-%m-%Y") -> str:
|
131
|
+
"""Convert a date string to financial year format (e.g., '01-04-2023' to '2023-24')"""
|
132
|
+
date_obj = datetime.strptime(date_str, date_format)
|
133
|
+
year = date_obj.year
|
134
|
+
if date_obj.month < 4:
|
135
|
+
financial_year = f"{year-1}-{str(year)[-2:]}"
|
136
|
+
else:
|
137
|
+
financial_year = f"{year}-{str(year+1)[-2:]}"
|
138
|
+
return financial_year
|
139
|
+
|
140
|
+
|
141
|
+
def convert_to_financial_year_ending(
|
142
|
+
date_str: str, date_format: str = "%d-%m-%Y"
|
143
|
+
) -> str:
|
144
|
+
"""Convert a date string to financial year ending format (e.g., '01-04-2023' to '2024')"""
|
145
|
+
date_obj = datetime.strptime(date_str, date_format)
|
146
|
+
year = date_obj.year
|
147
|
+
if date_obj.month < 4:
|
148
|
+
return f"{year}"
|
149
|
+
return f"{year + 1}"
|
150
|
+
|
151
|
+
|
152
|
+
def get_todays_date() -> str:
|
153
|
+
"""get a string of todays date fixing value for visual tests"""
|
154
|
+
if os.environ.get("STAGE") and os.environ.get("STAGE") == "testing":
|
155
|
+
return "2023-12-25"
|
156
|
+
return str(date.today())
|
157
|
+
|
158
|
+
|
159
|
+
def get_todays_date_for_downloaded_csv() -> str:
|
160
|
+
"""get a string of todays date for use in download csv, fixing value for testing"""
|
161
|
+
if os.environ.get("STAGE") and os.environ.get("STAGE") == "testing":
|
162
|
+
return "25/12/2023"
|
163
|
+
return str(datetime.today().strftime("%d/%m/%Y"))
|
164
|
+
|
165
|
+
|
166
|
+
def date_string_is_full_month_and_full_year_format(date_string: str):
|
167
|
+
"""checks if a date string is in the format $B $Y"""
|
168
|
+
try:
|
169
|
+
datetime.strptime(date_string, "%B %Y")
|
170
|
+
return True
|
171
|
+
except ValueError:
|
172
|
+
return False
|
173
|
+
|
174
|
+
|
175
|
+
def convert_to_date_range(date_str: str) -> str:
|
176
|
+
"""Convert a date string in the format "YYYY-MM-DD", to a date range from the previous year to
|
177
|
+
the current year for the month of the provided date. Abbreviates the month if it isn't June or
|
178
|
+
July.
|
179
|
+
|
180
|
+
Args:
|
181
|
+
date_str (str): A date string in the format "YYYY-MM-DD".
|
182
|
+
|
183
|
+
Returns:
|
184
|
+
str: Date range in the format "MMM YYYY to MMM YYYY", where MMM is the abbreviated month
|
185
|
+
name, if it isn't June or July. eg. Mar 2021 to Mar 2022
|
186
|
+
"""
|
187
|
+
date_object = datetime.strptime(date_str, "%Y-%m-%d").date()
|
188
|
+
|
189
|
+
if date_object.month in (6, 7):
|
190
|
+
current_month = date_object.strftime("%B")
|
191
|
+
else:
|
192
|
+
current_month = date_object.strftime("%b")
|
193
|
+
|
194
|
+
current_year = date_object.year
|
195
|
+
|
196
|
+
previous_year = current_year - 1
|
197
|
+
|
198
|
+
date_range = f"{current_month} {previous_year} to {current_month} {current_year}"
|
199
|
+
|
200
|
+
return date_range
|
201
|
+
|
202
|
+
|
203
|
+
def shorten_month_range(date_str: str) -> str:
|
204
|
+
"""Shortens months when given a range in the format Month to Month YYYY.
|
205
|
+
eg. January to February 2024 becomes Jan to Feb 2024.
|
206
|
+
Args:
|
207
|
+
date_str (str): String in format "Month to Month YYYY"
|
208
|
+
Returns:
|
209
|
+
str: String with abbreviated months
|
210
|
+
"""
|
211
|
+
parts = date_str.split()
|
212
|
+
start_month, end_month, year = parts[0], parts[2], parts[3]
|
213
|
+
|
214
|
+
start_month_short = calendar.month_abbr[
|
215
|
+
list(calendar.month_name).index(start_month)
|
216
|
+
]
|
217
|
+
end_month_short = calendar.month_abbr[list(calendar.month_name).index(end_month)]
|
218
|
+
|
219
|
+
return f"{start_month_short} to {end_month_short} {year}"
|
220
|
+
|
221
|
+
|
222
|
+
def date_string_is_month_to_month_year_range(date_str: str) -> bool:
|
223
|
+
"""Check if the input string is in the format "Month to Month Year".
|
224
|
+
This function uses a regular expression to verify whether the provided
|
225
|
+
string follows the specific format where the first and second words are
|
226
|
+
full month names, followed by "to" and a four-digit year.
|
227
|
+
Args:
|
228
|
+
date_str (str): A string representing a date range in the format "Month to Month Year".
|
229
|
+
Returns:
|
230
|
+
bool: True if the string matches the format; False otherwise.
|
231
|
+
"""
|
232
|
+
# Regex pattern to match "Month to Month Year"
|
233
|
+
pattern = r"^(January|February|March|April|May|June|July|August|September|October|November|December) to (January|February|March|April|May|June|July|August|September|October|November|December) \d{4}$" # pylint: disable=(line-too-long)
|
234
|
+
return bool(re.match(pattern, date_str))
|
235
|
+
|
236
|
+
|
237
|
+
def convert_april_date_string_to_fye(date_str: str):
|
238
|
+
"""Converts an april date to the year in which that financial year ends"""
|
239
|
+
year = str(int(date_str[:4]) + 1)
|
240
|
+
return year
|
241
|
+
|
242
|
+
|
243
|
+
def get_year_from_date_object(date_obj):
|
244
|
+
"""Returns a year from a date object"""
|
245
|
+
year = date_obj.year
|
246
|
+
return str(year)
|
247
|
+
|
248
|
+
|
249
|
+
def replace_jun_jul_month_abbreviations(month_year_list: list[str]) -> list[str]:
|
250
|
+
"""Replace abbreviated Jun and Jul month names in a list of "Month Year" or "Month" strings with
|
251
|
+
their full names. eg. Jun 2024 returns June 2024 and Jul returns July. Other parts of the
|
252
|
+
strings remain unchanged.
|
253
|
+
|
254
|
+
Args:
|
255
|
+
month_year_list (list[str]): A list of strings containing abbreviated month names followed
|
256
|
+
by a year or month alone (e.g., ["Jun 2023", "Jul 2024", "Jun"])
|
257
|
+
|
258
|
+
Returns:
|
259
|
+
list[str]: A list of strings with abbreviated Jun and Jul replaced by full month.
|
260
|
+
"""
|
261
|
+
month_map = {"Jun": "June", "Jul": "July"}
|
262
|
+
updated_list = [
|
263
|
+
" ".join([month_map.get(part, part) for part in item.split()])
|
264
|
+
for item in month_year_list
|
265
|
+
]
|
266
|
+
return updated_list
|
267
|
+
|
268
|
+
|
269
|
+
def format_date_with_custom_months(date_object: datetime.date, include_day=True) -> str:
|
270
|
+
"""Format a date object into a custom string, in format "day month year", where month is
|
271
|
+
abbreviated, unless month is June or July. eg. 10 Jan 2023, 14 June 2024.
|
272
|
+
|
273
|
+
Args:
|
274
|
+
date_object (datetime.date): A `datetime.date` object to format.
|
275
|
+
include_day (bool): Boolean to determine whether to include day of month in output
|
276
|
+
|
277
|
+
Returns:
|
278
|
+
str: The formatted date string with custom month formatting.
|
279
|
+
"""
|
280
|
+
if date_object.month in (6, 7):
|
281
|
+
month = date_object.strftime("%B")
|
282
|
+
else:
|
283
|
+
month = date_object.strftime("%b")
|
284
|
+
|
285
|
+
day = date_object.day
|
286
|
+
year = date_object.year
|
287
|
+
if include_day:
|
288
|
+
|
289
|
+
return f"{day} {month} {year}"
|
290
|
+
return f"{month} {year}"
|
291
|
+
|
292
|
+
|
293
|
+
def weeks_between_dates(date1: str, date2: str) -> float:
|
294
|
+
"""Calculate the unrounded number of weeks between two dates provided as strings in the format
|
295
|
+
'YYYY-MM-DD'.
|
296
|
+
|
297
|
+
Args:
|
298
|
+
date1 (str): The first date in 'YYYY-MM-DD' format.
|
299
|
+
date2 (str): The second date in 'YYYY-MM-DD' format.
|
300
|
+
|
301
|
+
Returns:
|
302
|
+
float: Number of weeks between the two dates.
|
303
|
+
"""
|
304
|
+
|
305
|
+
date_format = "%Y-%m-%d"
|
306
|
+
d1 = datetime.strptime(date1, date_format)
|
307
|
+
d2 = datetime.strptime(date2, date_format)
|
308
|
+
return abs((d2 - d1).days) / 7
|
309
|
+
|
310
|
+
|
311
|
+
def convert_date_to_financial_quarter(date_str: str):
|
312
|
+
"""Convert date string in the format yyyy-mm-dd to a financial quarter
|
313
|
+
|
314
|
+
Args:
|
315
|
+
date_str (str): yyyy-mm-dd
|
316
|
+
|
317
|
+
Returns:
|
318
|
+
integer with april-june being 1 and so on
|
319
|
+
"""
|
320
|
+
date_obj = datetime.strptime(date_str, "%Y-%m-%d")
|
321
|
+
if date_obj.month < 4:
|
322
|
+
return 4
|
323
|
+
if date_obj.month < 7:
|
324
|
+
return 1
|
325
|
+
if date_obj.month < 10:
|
326
|
+
return 2
|
327
|
+
return 3
|
328
|
+
|
329
|
+
|
330
|
+
def convert_financial_quarter_to_financial_quarter_text(quarter: int):
|
331
|
+
"""Convert quarter integer to financial quarter text including months
|
332
|
+
|
333
|
+
Args:
|
334
|
+
quarter (str): 1, 2, 3, 4 representing quarters with apr-june being 1
|
335
|
+
|
336
|
+
Returns:
|
337
|
+
integer with april-june being 1 and so on
|
338
|
+
"""
|
339
|
+
quarter_map = {
|
340
|
+
1: "Q1 (Apr-June)",
|
341
|
+
2: "Q2 (July-Sep)",
|
342
|
+
3: "Q3 (Oct-Dec)",
|
343
|
+
4: "Q4 (Jan-Mar)",
|
344
|
+
}
|
345
|
+
return quarter_map[quarter]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: gov_uk_dashboards
|
3
|
-
Version:
|
3
|
+
Version: 14.0.0
|
4
4
|
Summary: Provides access to functionality common to creating a data dashboard.
|
5
5
|
Author: Department for Levelling Up, Housing and Communities
|
6
6
|
Description-Content-Type: text/markdown
|
@@ -1,7 +1,7 @@
|
|
1
1
|
gov_uk_dashboards/__init__.py,sha256=4y4hozrL4hzRUna8b22UQwtkZcvvCgeXsAtA6AJww8g,1299
|
2
2
|
gov_uk_dashboards/axes.py,sha256=Oh8zyWzxwZWq8bQl-vJoXwTANZ7ACZiYPmIXlM62Fvk,712
|
3
3
|
gov_uk_dashboards/colours.py,sha256=MezFI_3hgEuZ7f8F5TdtgaQO00B3G7ylRTCVq3SlSF4,2371
|
4
|
-
gov_uk_dashboards/constants.py,sha256=
|
4
|
+
gov_uk_dashboards/constants.py,sha256=s4HzMHtIAu10n-uhqPL-jUi8rbffEb0tjF9COGM7Uls,479
|
5
5
|
gov_uk_dashboards/symbols.py,sha256=6_lq8yl1l7sGUlOY29wip_PXeUUoM53_fakKY1omVwY,424
|
6
6
|
gov_uk_dashboards/template.html,sha256=uFAki9bEpcei5dP_NZYP8dsxpxXpNIDQPn7ezsE7VXc,498
|
7
7
|
gov_uk_dashboards/template.py,sha256=WNVkAW3LCNoUHcxQ1kiUPkGCKIan5DgZQaAA_ZbE5WA,534
|
@@ -33,46 +33,52 @@ gov_uk_dashboards/assets/images/oflog/how_to_4_viewing_trends.png,sha256=VghyZ1c
|
|
33
33
|
gov_uk_dashboards/assets/images/oflog/how_to_5_viewing_tables.png,sha256=kC36T6TYzoh0ItqHv6jKzm6Qm5r_RAJzTi35XvMv6BA,939857
|
34
34
|
gov_uk_dashboards/assets/topojson/usa_110m.json,sha256=yX3AZ1tGULJmVFyWwMkb19WdZShJbvpa97uYvldMvTk,49104
|
35
35
|
gov_uk_dashboards/assets/topojson/world_110m.json,sha256=11kV6qMchw32uXLJ5buGkQGXgl8z3P73QPOy9oz_6EM,136642
|
36
|
-
gov_uk_dashboards/components/__init__.py,sha256=
|
37
|
-
gov_uk_dashboards/components/
|
38
|
-
gov_uk_dashboards/components/
|
39
|
-
gov_uk_dashboards/components/
|
40
|
-
gov_uk_dashboards/components/
|
41
|
-
gov_uk_dashboards/components/
|
42
|
-
gov_uk_dashboards/components/
|
36
|
+
gov_uk_dashboards/components/__init__.py,sha256=19fr4E5-FkG_rXAPwRc2Gh60ncgc7Ho1WdrMV5x9frw,187
|
37
|
+
gov_uk_dashboards/components/dash/__init__.py,sha256=4msokzkqoNze17TC5FM1GeyLSKNmgFyO6Yn744qEyxM,4885
|
38
|
+
gov_uk_dashboards/components/dash/apply_and_reset_filters_buttons.py,sha256=I7VoKOS_zIYdQvDP3SkAOntDMxZSQKCxnY80173EVz8,673
|
39
|
+
gov_uk_dashboards/components/dash/banners.py,sha256=TDHdJQSb7mCqtmM6ylSnVh_Qpd2Aec1jSR8RfsjqQoE,958
|
40
|
+
gov_uk_dashboards/components/dash/card.py,sha256=aErz9h536nYvpp9LZsFHo_Rn5rRXXfyGh358VcLksaE,420
|
41
|
+
gov_uk_dashboards/components/dash/card_full_width.py,sha256=ItwNgb5YQ1n6Fznvy_ngQ70gy0QqtgAmWFh8Dw3QmHQ,412
|
42
|
+
gov_uk_dashboards/components/dash/collapsible_panel.py,sha256=WrC5IFzM9mNavPfeSpBvMvYQfrmfhpTPCG1Ay70Jtw8,1191
|
43
|
+
gov_uk_dashboards/components/dash/comparison_la_filter_button.py,sha256=mhtmYVyToabuYzal00cB07YfKSx_wjDfjB8W-IKDXPc,670
|
44
|
+
gov_uk_dashboards/components/dash/context_banner.py,sha256=2o44AzS0pTYTY0r3OVbKW7dJg2lA1J8PW4RCeGQ15gg,1010
|
45
|
+
gov_uk_dashboards/components/dash/create_download_chart_button.py,sha256=yb3TbMHxQmC7XFojwnZMBMpwMal9NUcT4LNt9ZccU6Q,711
|
46
|
+
gov_uk_dashboards/components/dash/create_download_data_button.py,sha256=ng57WLkA5wyfrLTrO05VJ6LmC_gwgODQEYpMj-v-wO8,714
|
47
|
+
gov_uk_dashboards/components/dash/dashboard_container.py,sha256=KC2isR0NShxUYCl_pzDEAS4WK5pFrLMp4m2We3AqiwM,512
|
48
|
+
gov_uk_dashboards/components/dash/details.py,sha256=-Rgat95pCnU3fF4O0MkyymzMQPCZhRvuq0U0a5gHZBU,1106
|
49
|
+
gov_uk_dashboards/components/dash/download_button.py,sha256=8jGAadB3f_wVYWz5wIkObh0Q4NeFESM6kNRUYx0TIRs,1882
|
50
|
+
gov_uk_dashboards/components/dash/filter_panel.py,sha256=lQZYc5g7xUOpHfLWpPXiBKkIRKXoFb1p9NhJgS21tNo,1996
|
51
|
+
gov_uk_dashboards/components/dash/footer.py,sha256=RnJKN1YTP88GuJ4e7ci2T-jDqIe0-jDuHAQ8OhSCK50,3155
|
52
|
+
gov_uk_dashboards/components/dash/graph.py,sha256=bd49W5sVyhtWd4lNBfQST1RyLNlTLA0KRxS7jTgVMwE,886
|
53
|
+
gov_uk_dashboards/components/dash/header.py,sha256=ncwPcrGLLSpEL2E1NzSh6qtVW92B5JgAmA-qcTnNBhE,2886
|
54
|
+
gov_uk_dashboards/components/dash/heading.py,sha256=VjyBng591B_366vnan96PukpCDBTTj-2iJWuq0s0CLw,766
|
55
|
+
gov_uk_dashboards/components/dash/html_list.py,sha256=P3xkxxDp8oT81SSbK594IyX8l2PClufUG3cUTtlARrI,674
|
56
|
+
gov_uk_dashboards/components/dash/key_value_pair.py,sha256=L8mjdCfqpBxOdbcEqZWDC36ou4xISNQSTsmXIWteUxI,690
|
57
|
+
gov_uk_dashboards/components/dash/main_content.py,sha256=GBqVlNx_ambSiW1lsKpwB6-mFVZAvcTZq5oBYzHRza0,545
|
58
|
+
gov_uk_dashboards/components/dash/navbar.py,sha256=Y386FXzeOfa-b-7Zn44nWZ_lSD925YYE67N9KxS34kg,1096
|
59
|
+
gov_uk_dashboards/components/dash/no_data_message.py,sha256=17sCf_j3_p4PmU0EPMWEw55gSmGjgxcaF5DqSNVkroU,411
|
60
|
+
gov_uk_dashboards/components/dash/notification_banner.py,sha256=2Y1VMGfwt14c3e50cO0jDU1icBJzV-rnS4BnR5zYs2w,1233
|
61
|
+
gov_uk_dashboards/components/dash/paragraph.py,sha256=yoWa_B6RLiebBX2QaszY3lyZExi3fNMRnTu1hht1GR4,1051
|
62
|
+
gov_uk_dashboards/components/dash/phase_banner.py,sha256=7XIk_y-kStSaptXnk9yHVu8S0n-ypwWehDqOwjb5l-c,1787
|
63
|
+
gov_uk_dashboards/components/dash/row_component.py,sha256=SdmJqyFJA1Kngyzxy0ooZUegIOiN6Bz1wRq6jGigfII,687
|
64
|
+
gov_uk_dashboards/components/dash/side_navbar.py,sha256=pupA0FdjSbPbzdX9up6wEoIKWIuk3zGRun4opnBieCU,1332
|
65
|
+
gov_uk_dashboards/components/dash/table.py,sha256=uK-J8FALpuQP7dQc8k37WS-tgg48STMlk9GyS7N_Sr4,13749
|
66
|
+
gov_uk_dashboards/components/dash/tooltip.py,sha256=qTkRWQanhG535Yi4NiaLlEMJqqzjubgRdKJDIhxXzd4,978
|
67
|
+
gov_uk_dashboards/components/dash/tooltip_title.py,sha256=2exMYItzR17yOu3gTL77DyUU4Hi3CIB-ZPS8ftetqZg,874
|
68
|
+
gov_uk_dashboards/components/dash/visualisation_commentary.py,sha256=jBy8qy2DWYqodqDZ8QdDmgOO_USDSwn2Sj5CnL58VMM,648
|
69
|
+
gov_uk_dashboards/components/dash/visualisation_title.py,sha256=xXHsyVRIGkngBXCuhv8z0PmZLOeicjpMvmTbA5HhRvQ,561
|
70
|
+
gov_uk_dashboards/components/dash/warning_text.py,sha256=31XvPUINt2QsWIaaMnqEvn23G-MpzWbDvGnzYcXIyAY,1622
|
71
|
+
gov_uk_dashboards/components/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
72
|
+
gov_uk_dashboards/components/helpers/display_chart_or_table_with_header.py,sha256=7Z52uZGrs15Q31OJjztnF0iqA5VRUrfJB_nPy6aZMMc,3060
|
73
|
+
gov_uk_dashboards/components/helpers/generate_dash_graph_from_figure.py,sha256=sdhC6Mjfw6kqs1MDRDoMuOt8dNS9Bl1WEoJX9S5AssA,1813
|
74
|
+
gov_uk_dashboards/components/helpers/plotting_helper_functions.py,sha256=ZyO0hYcSJqhjuLnhEgSWpKT9v2uD0thAbSSUYe10_k8,1644
|
75
|
+
gov_uk_dashboards/components/helpers/update_layout_bgcolor_margin.py,sha256=i7Nwp0CxFpkyQeR8KfOBVMBkzctG7hMpWI2OzgxB2jY,740
|
76
|
+
gov_uk_dashboards/components/plotly/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
43
77
|
gov_uk_dashboards/components/plotly/captioned_figure.py,sha256=T0sbtGTiJ79FXxVdPb__hqISuyTc3Dl11cKhgcuW-5U,2804
|
44
|
-
gov_uk_dashboards/components/plotly/
|
45
|
-
gov_uk_dashboards/components/plotly/
|
46
|
-
gov_uk_dashboards/components/plotly/
|
47
|
-
gov_uk_dashboards/components/plotly/
|
48
|
-
gov_uk_dashboards/components/plotly/comparison_la_filter_button.py,sha256=mhtmYVyToabuYzal00cB07YfKSx_wjDfjB8W-IKDXPc,670
|
49
|
-
gov_uk_dashboards/components/plotly/context_banner.py,sha256=2o44AzS0pTYTY0r3OVbKW7dJg2lA1J8PW4RCeGQ15gg,1010
|
50
|
-
gov_uk_dashboards/components/plotly/dashboard_container.py,sha256=KC2isR0NShxUYCl_pzDEAS4WK5pFrLMp4m2We3AqiwM,512
|
51
|
-
gov_uk_dashboards/components/plotly/details.py,sha256=-Rgat95pCnU3fF4O0MkyymzMQPCZhRvuq0U0a5gHZBU,1106
|
52
|
-
gov_uk_dashboards/components/plotly/download_button.py,sha256=8jGAadB3f_wVYWz5wIkObh0Q4NeFESM6kNRUYx0TIRs,1882
|
53
|
-
gov_uk_dashboards/components/plotly/filter_panel.py,sha256=ejcDQK1bgEtNJSF_GG0iY9mQ_RwV-Ipvq6_z1abrZ_Q,1998
|
54
|
-
gov_uk_dashboards/components/plotly/footer.py,sha256=RnJKN1YTP88GuJ4e7ci2T-jDqIe0-jDuHAQ8OhSCK50,3155
|
55
|
-
gov_uk_dashboards/components/plotly/generate_dash_graph_from_figure.py,sha256=sdhC6Mjfw6kqs1MDRDoMuOt8dNS9Bl1WEoJX9S5AssA,1813
|
56
|
-
gov_uk_dashboards/components/plotly/graph.py,sha256=bd49W5sVyhtWd4lNBfQST1RyLNlTLA0KRxS7jTgVMwE,886
|
57
|
-
gov_uk_dashboards/components/plotly/header.py,sha256=ncwPcrGLLSpEL2E1NzSh6qtVW92B5JgAmA-qcTnNBhE,2886
|
58
|
-
gov_uk_dashboards/components/plotly/heading.py,sha256=VjyBng591B_366vnan96PukpCDBTTj-2iJWuq0s0CLw,766
|
59
|
-
gov_uk_dashboards/components/plotly/html_list.py,sha256=P3xkxxDp8oT81SSbK594IyX8l2PClufUG3cUTtlARrI,674
|
60
|
-
gov_uk_dashboards/components/plotly/key_value_pair.py,sha256=L8mjdCfqpBxOdbcEqZWDC36ou4xISNQSTsmXIWteUxI,690
|
61
|
-
gov_uk_dashboards/components/plotly/main_content.py,sha256=GBqVlNx_ambSiW1lsKpwB6-mFVZAvcTZq5oBYzHRza0,545
|
62
|
-
gov_uk_dashboards/components/plotly/navbar.py,sha256=Y386FXzeOfa-b-7Zn44nWZ_lSD925YYE67N9KxS34kg,1096
|
63
|
-
gov_uk_dashboards/components/plotly/no_data_message.py,sha256=17sCf_j3_p4PmU0EPMWEw55gSmGjgxcaF5DqSNVkroU,411
|
64
|
-
gov_uk_dashboards/components/plotly/notification_banner.py,sha256=2Y1VMGfwt14c3e50cO0jDU1icBJzV-rnS4BnR5zYs2w,1233
|
65
|
-
gov_uk_dashboards/components/plotly/paragraph.py,sha256=yoWa_B6RLiebBX2QaszY3lyZExi3fNMRnTu1hht1GR4,1051
|
66
|
-
gov_uk_dashboards/components/plotly/phase_banner.py,sha256=7XIk_y-kStSaptXnk9yHVu8S0n-ypwWehDqOwjb5l-c,1787
|
67
|
-
gov_uk_dashboards/components/plotly/row_component.py,sha256=SdmJqyFJA1Kngyzxy0ooZUegIOiN6Bz1wRq6jGigfII,687
|
68
|
-
gov_uk_dashboards/components/plotly/side_navbar.py,sha256=pupA0FdjSbPbzdX9up6wEoIKWIuk3zGRun4opnBieCU,1332
|
69
|
-
gov_uk_dashboards/components/plotly/stacked_barchart.py,sha256=n7jsrm7zPK6wugjXYh2ZJ2FXb0ULGI1tj0k4fcXreQw,12718
|
70
|
-
gov_uk_dashboards/components/plotly/table.py,sha256=JkrH51znqAKTy-b5p3gXhOzvPwFmc2LcCQiaKuKwMu4,13753
|
71
|
-
gov_uk_dashboards/components/plotly/tooltip.py,sha256=qTkRWQanhG535Yi4NiaLlEMJqqzjubgRdKJDIhxXzd4,978
|
72
|
-
gov_uk_dashboards/components/plotly/tooltip_title.py,sha256=2exMYItzR17yOu3gTL77DyUU4Hi3CIB-ZPS8ftetqZg,874
|
73
|
-
gov_uk_dashboards/components/plotly/visualisation_commentary.py,sha256=jBy8qy2DWYqodqDZ8QdDmgOO_USDSwn2Sj5CnL58VMM,648
|
74
|
-
gov_uk_dashboards/components/plotly/visualisation_title.py,sha256=xXHsyVRIGkngBXCuhv8z0PmZLOeicjpMvmTbA5HhRvQ,561
|
75
|
-
gov_uk_dashboards/components/plotly/warning_text.py,sha256=31XvPUINt2QsWIaaMnqEvn23G-MpzWbDvGnzYcXIyAY,1622
|
78
|
+
gov_uk_dashboards/components/plotly/choropleth_map.py,sha256=kX44qgxAL9i3w0bT7N2274iBcH5RiyeWF_lVWV1hju0,9292
|
79
|
+
gov_uk_dashboards/components/plotly/enums.py,sha256=0QnVyXwnBQRqP3p8YIgPsvGLPu-wClBj9F_722GDfYU,794
|
80
|
+
gov_uk_dashboards/components/plotly/stacked_barchart.py,sha256=y2XOf96tMfy5ythPb5RzqW5qGc2sKU3W508UbWO2iC0,12175
|
81
|
+
gov_uk_dashboards/components/plotly/time_series_chart.py,sha256=hZ99q1PeyPKKoFvXsUPQfbpjMamKLGy7iJZ2rjJOmDI,17862
|
76
82
|
gov_uk_dashboards/figures/__init__.py,sha256=_snQeNlM81nNKERl4gg9ScH2HYbtwaBjl8yQonccx34,712
|
77
83
|
gov_uk_dashboards/figures/chart_data.py,sha256=fEsNkQFzXKIQ0h7aLBWq3J1qAxHbxvJeKU23JrVodVc,757
|
78
84
|
gov_uk_dashboards/figures/line_chart.py,sha256=rEB51_z9cPl7BcT94iA6ZsZXzecnVCnGpQWW_9SNGUY,2813
|
@@ -88,13 +94,13 @@ gov_uk_dashboards/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
88
94
|
gov_uk_dashboards/lib/enable_basic_auth.py,sha256=Ul2tnopTJm6_UQ1ljKGwk-Ay3Z8KnPNKNjwiBOf1yd0,749
|
89
95
|
gov_uk_dashboards/lib/http_headers.py,sha256=Hur3R0_hAsWz8PntBhD66w4kgdW6EvwHNNugnA0DIJM,1592
|
90
96
|
gov_uk_dashboards/lib/logging.py,sha256=osLxh5KDsEgAsaGQSM05h8MBJgLG-RFy8gLtWSivEik,354
|
91
|
-
gov_uk_dashboards/lib/plotting_helper_functions.py,sha256=mRbDUp30Vn6U5vCGiEdRe4jk9U-sCR9TTJylzhQHfVs,1070
|
92
|
-
gov_uk_dashboards/lib/update_layout_bgcolor_margin.py,sha256=i7Nwp0CxFpkyQeR8KfOBVMBkzctG7hMpWI2OzgxB2jY,740
|
93
97
|
gov_uk_dashboards/lib/dap/__init__.py,sha256=bYga8kJuf9TGkfpnd16SInrD1FcN8iPn4SzcUSHAH48,76
|
94
98
|
gov_uk_dashboards/lib/dap/dap_deployment.py,sha256=ZXixeOAtRNjMsPdGKLwwLNamlo0miZLaKCckKtq8_iI,2313
|
95
99
|
gov_uk_dashboards/lib/dap/get_dataframe_from_cds.py,sha256=OiusRCgYnkBjK_GZgYLGzNrxOGizYt8CgThiWRCVKK0,3921
|
96
|
-
gov_uk_dashboards
|
97
|
-
gov_uk_dashboards
|
98
|
-
gov_uk_dashboards-
|
99
|
-
gov_uk_dashboards-
|
100
|
-
gov_uk_dashboards-
|
100
|
+
gov_uk_dashboards/lib/datetime_functions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
101
|
+
gov_uk_dashboards/lib/datetime_functions/datetime_functions.py,sha256=BQgr8I_vFNYwLi-fE4YC6jZ5PpbPea2rnD_2a_lw0YE,12209
|
102
|
+
gov_uk_dashboards-14.0.0.dist-info/licenses/LICENSE,sha256=GDiD7Y2Gx7JucPV1JfVySJeah-qiSyBPdpJ6RHCEHTc,1126
|
103
|
+
gov_uk_dashboards-14.0.0.dist-info/METADATA,sha256=qvuAm5o4ZXqvgFBrzuYmtkzWH9AHsG0PZhuT0Demiu0,5917
|
104
|
+
gov_uk_dashboards-14.0.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
105
|
+
gov_uk_dashboards-14.0.0.dist-info/top_level.txt,sha256=gPaN1P3-H3Rgi2me6tt-fX_cxo19CZfA4PjlZPjGRpo,18
|
106
|
+
gov_uk_dashboards-14.0.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|