gov-uk-dashboards 13.5.2__py3-none-any.whl → 15.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.
Files changed (53) hide show
  1. gov_uk_dashboards/components/__init__.py +1 -1
  2. gov_uk_dashboards/components/dash/__init__.py +92 -0
  3. gov_uk_dashboards/components/{create_download_chart_button.py → dash/create_download_chart_button.py} +1 -1
  4. gov_uk_dashboards/components/{create_download_data_button.py → dash/create_download_data_button.py} +1 -1
  5. gov_uk_dashboards/components/{plotly → dash}/filter_panel.py +1 -1
  6. gov_uk_dashboards/components/{plotly → dash}/table.py +2 -2
  7. gov_uk_dashboards/components/helpers/__init__.py +0 -0
  8. gov_uk_dashboards/components/{display_chart_or_table_with_header.py → helpers/display_chart_or_table_with_header.py} +4 -4
  9. gov_uk_dashboards/{lib → components/helpers}/plotting_helper_functions.py +17 -0
  10. gov_uk_dashboards/components/plotly/__init__.py +0 -92
  11. gov_uk_dashboards/components/plotly/choropleth_map.py +1 -1
  12. gov_uk_dashboards/components/plotly/enums.py +34 -0
  13. gov_uk_dashboards/components/plotly/stacked_barchart.py +12 -36
  14. gov_uk_dashboards/components/plotly/time_series_chart.py +477 -0
  15. gov_uk_dashboards/constants.py +5 -0
  16. gov_uk_dashboards/lib/datetime_functions/__init__.py +0 -0
  17. gov_uk_dashboards/lib/datetime_functions/datetime_functions.py +345 -0
  18. {gov_uk_dashboards-13.5.2.dist-info → gov_uk_dashboards-15.0.0.dist-info}/METADATA +1 -1
  19. {gov_uk_dashboards-13.5.2.dist-info → gov_uk_dashboards-15.0.0.dist-info}/RECORD +53 -47
  20. {gov_uk_dashboards-13.5.2.dist-info → gov_uk_dashboards-15.0.0.dist-info}/WHEEL +1 -1
  21. /gov_uk_dashboards/components/{plotly → dash}/apply_and_reset_filters_buttons.py +0 -0
  22. /gov_uk_dashboards/components/{plotly → dash}/banners.py +0 -0
  23. /gov_uk_dashboards/components/{plotly → dash}/card.py +0 -0
  24. /gov_uk_dashboards/components/{plotly → dash}/card_full_width.py +0 -0
  25. /gov_uk_dashboards/components/{plotly → dash}/collapsible_panel.py +0 -0
  26. /gov_uk_dashboards/components/{plotly → dash}/comparison_la_filter_button.py +0 -0
  27. /gov_uk_dashboards/components/{plotly → dash}/context_banner.py +0 -0
  28. /gov_uk_dashboards/components/{plotly → dash}/dashboard_container.py +0 -0
  29. /gov_uk_dashboards/components/{plotly → dash}/details.py +0 -0
  30. /gov_uk_dashboards/components/{plotly → dash}/download_button.py +0 -0
  31. /gov_uk_dashboards/components/{plotly → dash}/footer.py +0 -0
  32. /gov_uk_dashboards/components/{plotly → dash}/graph.py +0 -0
  33. /gov_uk_dashboards/components/{plotly → dash}/header.py +0 -0
  34. /gov_uk_dashboards/components/{plotly → dash}/heading.py +0 -0
  35. /gov_uk_dashboards/components/{plotly → dash}/html_list.py +0 -0
  36. /gov_uk_dashboards/components/{plotly → dash}/key_value_pair.py +0 -0
  37. /gov_uk_dashboards/components/{plotly → dash}/main_content.py +0 -0
  38. /gov_uk_dashboards/components/{plotly → dash}/navbar.py +0 -0
  39. /gov_uk_dashboards/components/{plotly → dash}/no_data_message.py +0 -0
  40. /gov_uk_dashboards/components/{plotly → dash}/notification_banner.py +0 -0
  41. /gov_uk_dashboards/components/{plotly → dash}/paragraph.py +0 -0
  42. /gov_uk_dashboards/components/{plotly → dash}/phase_banner.py +0 -0
  43. /gov_uk_dashboards/components/{plotly → dash}/row_component.py +0 -0
  44. /gov_uk_dashboards/components/{plotly → dash}/side_navbar.py +0 -0
  45. /gov_uk_dashboards/components/{plotly → dash}/tooltip.py +0 -0
  46. /gov_uk_dashboards/components/{plotly → dash}/tooltip_title.py +0 -0
  47. /gov_uk_dashboards/components/{plotly → dash}/visualisation_commentary.py +0 -0
  48. /gov_uk_dashboards/components/{plotly → dash}/visualisation_title.py +0 -0
  49. /gov_uk_dashboards/components/{plotly → dash}/warning_text.py +0 -0
  50. /gov_uk_dashboards/components/{plotly → helpers}/generate_dash_graph_from_figure.py +0 -0
  51. /gov_uk_dashboards/{lib → components/helpers}/update_layout_bgcolor_margin.py +0 -0
  52. {gov_uk_dashboards-13.5.2.dist-info → gov_uk_dashboards-15.0.0.dist-info}/licenses/LICENSE +0 -0
  53. {gov_uk_dashboards-13.5.2.dist-info → gov_uk_dashboards-15.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: 13.5.2
3
+ Version: 15.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=eLMf7iiq6WjnOb9GstEOwe1rrbJKH8NDXUdzeuHtz-E,342
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=HqafuP-L726Wmu71invZTYIOISazrS0QLnnyIowni8k,189
37
- gov_uk_dashboards/components/create_download_chart_button.py,sha256=OXe2Ye1N6DfWWuB0-6wwV5nSveAN_DP6QwZRxLqNULA,713
38
- gov_uk_dashboards/components/create_download_data_button.py,sha256=SJfLmNUAkPpws4G8gSyIDbQn_xTV_iSTi60NozNioyk,716
39
- gov_uk_dashboards/components/display_chart_or_table_with_header.py,sha256=gDQMhvII22eo1LvhnyLudtuc_7yYD9cqqo9N0Lf90Zs,3052
40
- gov_uk_dashboards/components/plotly/__init__.py,sha256=Dhe3y0Ng5FSHxz2BX_RHieOmHsyODNXwrAuMJIq8dIo,4884
41
- gov_uk_dashboards/components/plotly/apply_and_reset_filters_buttons.py,sha256=I7VoKOS_zIYdQvDP3SkAOntDMxZSQKCxnY80173EVz8,673
42
- gov_uk_dashboards/components/plotly/banners.py,sha256=TDHdJQSb7mCqtmM6ylSnVh_Qpd2Aec1jSR8RfsjqQoE,958
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/card.py,sha256=aErz9h536nYvpp9LZsFHo_Rn5rRXXfyGh358VcLksaE,420
45
- gov_uk_dashboards/components/plotly/card_full_width.py,sha256=ItwNgb5YQ1n6Fznvy_ngQ70gy0QqtgAmWFh8Dw3QmHQ,412
46
- gov_uk_dashboards/components/plotly/choropleth_map.py,sha256=VVJevn6OI_NHRWiT8Uyop2lOJgMLn4-HLk58AhZCv2E,9284
47
- gov_uk_dashboards/components/plotly/collapsible_panel.py,sha256=WrC5IFzM9mNavPfeSpBvMvYQfrmfhpTPCG1Ay70Jtw8,1191
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=wqwKuWraywzUK7KvRCpG9qo87NCnMizedM8yq2EkBMU,17867
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-13.5.2.dist-info/licenses/LICENSE,sha256=GDiD7Y2Gx7JucPV1JfVySJeah-qiSyBPdpJ6RHCEHTc,1126
97
- gov_uk_dashboards-13.5.2.dist-info/METADATA,sha256=K6ZWQ-yzMDJ255X4P5nSQwPqt1dhS5MEa2CaNIOj6i0,5917
98
- gov_uk_dashboards-13.5.2.dist-info/WHEEL,sha256=DK49LOLCYiurdXXOXwGJm6U4DkHkg4lcxjhqwRa0CP4,91
99
- gov_uk_dashboards-13.5.2.dist-info/top_level.txt,sha256=gPaN1P3-H3Rgi2me6tt-fX_cxo19CZfA4PjlZPjGRpo,18
100
- gov_uk_dashboards-13.5.2.dist-info/RECORD,,
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-15.0.0.dist-info/licenses/LICENSE,sha256=GDiD7Y2Gx7JucPV1JfVySJeah-qiSyBPdpJ6RHCEHTc,1126
103
+ gov_uk_dashboards-15.0.0.dist-info/METADATA,sha256=aobvZ1ocYpZqhcH7bgJ472CKN0ShgS0Hn_z400-NTaQ,5917
104
+ gov_uk_dashboards-15.0.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
105
+ gov_uk_dashboards-15.0.0.dist-info/top_level.txt,sha256=gPaN1P3-H3Rgi2me6tt-fX_cxo19CZfA4PjlZPjGRpo,18
106
+ gov_uk_dashboards-15.0.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.0.2)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
File without changes
File without changes
File without changes
File without changes
File without changes