uk_bin_collection 0.111.0__py3-none-any.whl → 0.112.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.
@@ -4,7 +4,6 @@ import pytest
4
4
  from uk_bin_collection.collect_data import UKBinCollectionApp, import_council_module
5
5
 
6
6
 
7
-
8
7
  # Test UKBinCollectionApp setup_arg_parser
9
8
  def test_setup_arg_parser():
10
9
  app = UKBinCollectionApp()
@@ -430,8 +430,10 @@ def test_string_with_whitespace_and_numbers():
430
430
  )
431
431
  def test_get_next_day_of_week(today_str, day_name, expected):
432
432
  mock_today = datetime.strptime(today_str, "%Y-%m-%d")
433
- with patch('uk_bin_collection.common.datetime') as mock_datetime: # replace 'your_module' with the actual module name
433
+ with patch(
434
+ "uk_bin_collection.common.datetime"
435
+ ) as mock_datetime: # replace 'your_module' with the actual module name
434
436
  mock_datetime.now.return_value = mock_today
435
437
  mock_datetime.side_effect = lambda *args, **kw: datetime(*args, **kw)
436
438
  result = get_next_day_of_week(day_name, date_format="%m/%d/%Y")
437
- assert result == expected
439
+ assert result == expected
@@ -2,26 +2,37 @@ import pytest
2
2
 
3
3
  # Test the command-line options
4
4
 
5
+
5
6
  def test_headless_mode(pytestconfig):
6
7
  # Simulate pytest command-line option
7
8
  headless_mode_value = pytestconfig.getoption("--headless")
8
9
  assert headless_mode_value == "True" # This should match the default value
9
10
 
11
+
10
12
  def test_local_browser(pytestconfig):
11
13
  local_browser_value = pytestconfig.getoption("--local_browser")
12
14
  assert local_browser_value == "False" # This should match the default value
13
15
 
16
+
14
17
  def test_selenium_url(pytestconfig):
15
18
  selenium_url_value = pytestconfig.getoption("--selenium_url")
16
- assert selenium_url_value == "http://localhost:4444" # This should match the default value
19
+ assert (
20
+ selenium_url_value == "http://localhost:4444"
21
+ ) # This should match the default value
22
+
17
23
 
18
24
  # Test the fixtures
19
25
 
26
+
20
27
  def test_headless_mode_fixture(headless_mode):
21
28
  assert headless_mode == "True" # This should match the default value
22
29
 
30
+
23
31
  def test_local_browser_fixture(local_browser):
24
32
  assert local_browser == "False" # This should match the default value
25
33
 
34
+
26
35
  def test_selenium_url_fixture(selenium_url):
27
- assert selenium_url == "http://localhost:4444" # This should match the default value
36
+ assert (
37
+ selenium_url == "http://localhost:4444"
38
+ ) # This should match the default value
@@ -105,8 +105,10 @@ def test_output_json():
105
105
  assert type(output) == str
106
106
  assert output == '{\n "bin": ""\n}'
107
107
 
108
+
108
109
  class ConcreteGetBinDataClass(agbdc):
109
110
  """Concrete implementation of the abstract class to test abstract methods."""
111
+
110
112
  def parse_data(self, page: str, **kwargs) -> dict:
111
113
  return {"mock_key": "mock_value"}
112
114
 
@@ -114,33 +116,46 @@ class ConcreteGetBinDataClass(agbdc):
114
116
  # You can implement the method or delegate it to the abstract class's method
115
117
  super().update_dev_mode_data(council_module_str, this_url, **kwargs)
116
118
 
119
+
117
120
  @pytest.fixture
118
121
  def concrete_class_instance():
119
122
  return ConcreteGetBinDataClass()
120
123
 
124
+
121
125
  def test_get_and_parse_data_no_skip_get_url(concrete_class_instance):
122
126
  mock_page = "mocked page content"
123
127
  mock_parsed_data = {"mock_key": "mock_value"}
124
128
 
125
- with mock.patch.object(concrete_class_instance, 'get_data', return_value=mock_page) as mock_get_data, \
126
- mock.patch.object(concrete_class_instance, 'parse_data', return_value=mock_parsed_data) as mock_parse_data:
127
-
129
+ with mock.patch.object(
130
+ concrete_class_instance, "get_data", return_value=mock_page
131
+ ) as mock_get_data, mock.patch.object(
132
+ concrete_class_instance, "parse_data", return_value=mock_parsed_data
133
+ ) as mock_parse_data:
134
+
128
135
  result = concrete_class_instance.get_and_parse_data("http://example.com")
129
136
 
130
137
  mock_get_data.assert_called_once_with("http://example.com")
131
138
  mock_parse_data.assert_called_once_with(mock_page, url="http://example.com")
132
139
  assert result == mock_parsed_data
133
140
 
141
+
134
142
  def test_get_and_parse_data_skip_get_url(concrete_class_instance):
135
143
  mock_parsed_data = {"mock_key": "mock_value"}
136
144
 
137
- with mock.patch.object(concrete_class_instance, 'parse_data', return_value=mock_parsed_data) as mock_parse_data:
138
-
139
- result = concrete_class_instance.get_and_parse_data("http://example.com", skip_get_url=True)
145
+ with mock.patch.object(
146
+ concrete_class_instance, "parse_data", return_value=mock_parsed_data
147
+ ) as mock_parse_data:
148
+
149
+ result = concrete_class_instance.get_and_parse_data(
150
+ "http://example.com", skip_get_url=True
151
+ )
140
152
 
141
- mock_parse_data.assert_called_once_with("", url="http://example.com", skip_get_url=True)
153
+ mock_parse_data.assert_called_once_with(
154
+ "", url="http://example.com", skip_get_url=True
155
+ )
142
156
  assert result == mock_parsed_data
143
-
157
+
158
+
144
159
  @pytest.fixture
145
160
  def setup_test_update_dev_mode_data():
146
161
  """Fixture to set up and tear down the environment for test_update_dev_mode_data"""
@@ -148,7 +163,7 @@ def setup_test_update_dev_mode_data():
148
163
  test_dir = tempfile.TemporaryDirectory()
149
164
 
150
165
  # Patch os.getcwd() to return the temporary directory
151
- cwd_patch = patch('os.getcwd', return_value=test_dir.name)
166
+ cwd_patch = patch("os.getcwd", return_value=test_dir.name)
152
167
  mock_getcwd = cwd_patch.start()
153
168
 
154
169
  # Ensure the nested directory structure exists
@@ -171,15 +186,15 @@ def test_update_dev_mode_data(setup_test_update_dev_mode_data):
171
186
  obj = ConcreteGetBinDataClass()
172
187
 
173
188
  # Define input arguments for the method
174
- council_module_str = 'test_council_module'
175
- this_url = 'https://example.com'
189
+ council_module_str = "test_council_module"
190
+ this_url = "https://example.com"
176
191
  kwargs = {
177
- 'postcode': '12345',
178
- 'paon': '1A',
179
- 'uprn': '100012345',
180
- 'usrn': '200012345',
181
- 'web_driver': 'mocked_web_driver',
182
- 'skip_get_url': True,
192
+ "postcode": "12345",
193
+ "paon": "1A",
194
+ "uprn": "100012345",
195
+ "usrn": "200012345",
196
+ "web_driver": "mocked_web_driver",
197
+ "skip_get_url": True,
183
198
  }
184
199
 
185
200
  # Call the method being tested on the instance
@@ -190,8 +205,8 @@ def test_update_dev_mode_data(setup_test_update_dev_mode_data):
190
205
  assert os.path.exists(input_file_path)
191
206
 
192
207
  # Read the contents of the file and make necessary assertions
193
- with open(input_file_path, 'r') as f:
208
+ with open(input_file_path, "r") as f:
194
209
  file_content = f.read()
195
210
 
196
211
  # Example assertion - check if certain values exist in the file content (based on your actual file format)
197
- assert '100012345' in file_content # Checking UPRN as an example
212
+ assert "100012345" in file_content # Checking UPRN as an example
@@ -106,6 +106,7 @@ def get_date_with_ordinal(date_number: int) -> str:
106
106
  else {1: "st", 2: "nd", 3: "rd"}.get(date_number % 10, "th")
107
107
  )
108
108
 
109
+
109
110
  def has_numbers(inputString: str) -> bool:
110
111
  """
111
112
 
@@ -27,13 +27,14 @@ def parse_bin_text(bin_type_str: str, bin_date_str: str) -> List[Dict[str, str]]
27
27
  bin_date = datetime.strptime(bin_date_str, "%A, %B %d, %Y")
28
28
 
29
29
  for bin_type in bin_type_str.split(", "):
30
- bins.append({
31
- "type": bin_type.strip() + " bin",
32
- "collectionDate": bin_date.strftime(date_format)
33
- })
30
+ bins.append(
31
+ {
32
+ "type": bin_type.strip() + " bin",
33
+ "collectionDate": bin_date.strftime(date_format),
34
+ }
35
+ )
34
36
 
35
37
  return bins
36
-
37
38
 
38
39
  class CouncilClass(AbstractGetBinDataClass):
39
40
  """
@@ -1,7 +1,10 @@
1
1
  import requests
2
2
  import json
3
3
  from datetime import datetime
4
- from uk_bin_collection.uk_bin_collection.common import check_uprn, date_format as DATE_FORMAT
4
+ from uk_bin_collection.uk_bin_collection.common import (
5
+ check_uprn,
6
+ date_format as DATE_FORMAT,
7
+ )
5
8
  from uk_bin_collection.uk_bin_collection.get_bin_data import AbstractGetBinDataClass
6
9
 
7
10
 
@@ -11,15 +14,15 @@ class CouncilClass(AbstractGetBinDataClass):
11
14
  """
12
15
 
13
16
  def parse_data(self, page: str, **kwargs) -> dict:
14
- url_base = "https://basildonportal.azurewebsites.net/api/getPropertyRefuseInformation"
17
+ url_base = (
18
+ "https://basildonportal.azurewebsites.net/api/getPropertyRefuseInformation"
19
+ )
15
20
 
16
21
  uprn = kwargs.get("uprn")
17
22
  # Check the UPRN is valid
18
23
  check_uprn(uprn)
19
24
 
20
- payload = {
21
- "uprn": uprn
22
- }
25
+ payload = {"uprn": uprn}
23
26
 
24
27
  headers = {"Content-Type": "application/json"}
25
28
 
@@ -36,7 +39,9 @@ class CouncilClass(AbstractGetBinDataClass):
36
39
  bins.append(
37
40
  {
38
41
  "type": service_name,
39
- "collectionDate": collection_data.get("current_collection_date"),
42
+ "collectionDate": collection_data.get(
43
+ "current_collection_date"
44
+ ),
40
45
  }
41
46
  )
42
47
 
@@ -15,6 +15,7 @@ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
15
15
 
16
16
  _LOGGER = logging.getLogger(__name__)
17
17
 
18
+
18
19
  class CouncilClass(AbstractGetBinDataClass):
19
20
  """
20
21
  Implementation for Chesterfield Borough Council waste collection data retrieval.
@@ -56,7 +57,9 @@ class CouncilClass(AbstractGetBinDataClass):
56
57
  session.get(API_URLS["session"], headers=HEADERS, verify=False)
57
58
 
58
59
  # Step 2: Get fwuid
59
- fwuid_response = session.get(API_URLS["fwuid"], headers=HEADERS, verify=False)
60
+ fwuid_response = session.get(
61
+ API_URLS["fwuid"], headers=HEADERS, verify=False
62
+ )
60
63
  fwuid_data = fwuid_response.json()
61
64
  fwuid = fwuid_data.get("auraConfig", {}).get("context", {}).get("fwuid")
62
65
 
@@ -66,50 +69,58 @@ class CouncilClass(AbstractGetBinDataClass):
66
69
 
67
70
  # Step 3: Prepare payload for UPRN search
68
71
  payload = {
69
- "message": json.dumps({
70
- "actions": [{
71
- "id": "4;a",
72
- "descriptor": "aura://ApexActionController/ACTION$execute",
73
- "callingDescriptor": "UNKNOWN",
74
- "params": {
75
- "namespace": "",
76
- "classname": "CBC_VE_CollectionDays",
77
- "method": "getServicesByUPRN",
78
- "params": {
79
- "propertyUprn": user_uprn,
80
- "executedFrom": "Main Website"
81
- },
82
- "cacheable": False,
83
- "isContinuation": False
84
- }
85
- }]
86
- }),
87
- "aura.context": json.dumps({
88
- "mode": "PROD",
89
- "fwuid": fwuid,
90
- "app": "c:cbc_VE_CollectionDaysLO",
91
- "loaded": {
92
- "APPLICATION@markup://c:cbc_VE_CollectionDaysLO": "pqeNg7kPWCbx1pO8sIjdLA"
93
- },
94
- "dn": [],
95
- "globals": {},
96
- "uad": True
97
- }),
72
+ "message": json.dumps(
73
+ {
74
+ "actions": [
75
+ {
76
+ "id": "4;a",
77
+ "descriptor": "aura://ApexActionController/ACTION$execute",
78
+ "callingDescriptor": "UNKNOWN",
79
+ "params": {
80
+ "namespace": "",
81
+ "classname": "CBC_VE_CollectionDays",
82
+ "method": "getServicesByUPRN",
83
+ "params": {
84
+ "propertyUprn": user_uprn,
85
+ "executedFrom": "Main Website",
86
+ },
87
+ "cacheable": False,
88
+ "isContinuation": False,
89
+ },
90
+ }
91
+ ]
92
+ }
93
+ ),
94
+ "aura.context": json.dumps(
95
+ {
96
+ "mode": "PROD",
97
+ "fwuid": fwuid,
98
+ "app": "c:cbc_VE_CollectionDaysLO",
99
+ "loaded": {
100
+ "APPLICATION@markup://c:cbc_VE_CollectionDaysLO": "pqeNg7kPWCbx1pO8sIjdLA"
101
+ },
102
+ "dn": [],
103
+ "globals": {},
104
+ "uad": True,
105
+ }
106
+ ),
98
107
  "aura.pageURI": "/bins-and-recycling/bin-collections/check-bin-collections.aspx",
99
108
  "aura.token": "null",
100
109
  }
101
110
 
102
111
  # Step 4: Make POST request to fetch collection data
103
112
  search_response = session.post(
104
- API_URLS["search"],
105
- data=payload,
106
- headers=HEADERS,
107
- verify=False
113
+ API_URLS["search"], data=payload, headers=HEADERS, verify=False
108
114
  )
109
115
  search_data = search_response.json()
110
116
 
111
117
  # Step 5: Extract service units
112
- service_units = search_data.get("actions", [])[0].get("returnValue", {}).get("returnValue", {}).get("serviceUnits", [])
118
+ service_units = (
119
+ search_data.get("actions", [])[0]
120
+ .get("returnValue", {})
121
+ .get("returnValue", {})
122
+ .get("serviceUnits", [])
123
+ )
113
124
 
114
125
  if not service_units:
115
126
  _LOGGER.warning("No service units found for the given UPRN.")
@@ -141,7 +152,9 @@ class CouncilClass(AbstractGetBinDataClass):
141
152
 
142
153
  # Extract the next scheduled date
143
154
  try:
144
- dt_zulu = item["serviceTasks"][0]["serviceTaskSchedules"][0]["nextInstance"]["currentScheduledDate"]
155
+ dt_zulu = item["serviceTasks"][0]["serviceTaskSchedules"][0][
156
+ "nextInstance"
157
+ ]["currentScheduledDate"]
145
158
  dt_utc = datetime.strptime(dt_zulu, "%Y-%m-%dT%H:%M:%S.%f%z")
146
159
  dt_local = dt_utc.astimezone(None)
147
160
  collection_date = dt_local.date()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: uk_bin_collection
3
- Version: 0.111.0
3
+ Version: 0.112.0
4
4
  Summary: Python Lib to collect UK Bin Data
5
5
  Author: Robert Bradley
6
6
  Author-email: robbrad182@gmail.com
@@ -2,16 +2,16 @@ uk_bin_collection/README.rst,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
2
2
  uk_bin_collection/tests/council_feature_input_parity.py,sha256=DO6Mk4ImYgM5ZCZ-cutwz5RoYYWZRLYx2tr6zIs_9Rc,3843
3
3
  uk_bin_collection/tests/features/environment.py,sha256=VQZjJdJI_kZn08M0j5cUgvKT4k3iTw8icJge1DGOkoA,127
4
4
  uk_bin_collection/tests/features/validate_council_outputs.feature,sha256=SJK-Vc737hrf03tssxxbeg_JIvAH-ddB8f6gU1LTbuQ,251
5
- uk_bin_collection/tests/input.json,sha256=MN87Jdtb1koa8moUh7SW2eJi800CEp-JiwT8G2wV6A8,81028
5
+ uk_bin_collection/tests/input.json,sha256=MzVqGem8V4TCIPWSIDQy5r8er_SRhBQcxGoBEzmETHY,98036
6
6
  uk_bin_collection/tests/output.schema,sha256=ZwKQBwYyTDEM4G2hJwfLUVM-5v1vKRvRK9W9SS1sd18,1086
7
7
  uk_bin_collection/tests/step_defs/step_helpers/file_handler.py,sha256=Ygzi4V0S1MIHqbdstUlIqtRIwnynvhu4UtpweJ6-5N8,1474
8
8
  uk_bin_collection/tests/step_defs/test_validate_council.py,sha256=VZ0a81sioJULD7syAYHjvK_-nT_Rd36tUyzPetSA0gk,3475
9
- uk_bin_collection/tests/test_collect_data.py,sha256=xit4lopMGXb5g2faCK9VrOjHl81QDV9sZAu7vBdr2Uw,2253
10
- uk_bin_collection/tests/test_common_functions.py,sha256=WRm7AYI9qaDqW0dNROTFh-KZRdNFhhYHvjrFZUN4IPs,14084
11
- uk_bin_collection/tests/test_conftest.py,sha256=GWqP6-fCv5A2VUYiyXqUO-Dm0hlUOwbFgfi6CkdGqvQ,1061
12
- uk_bin_collection/tests/test_get_data.py,sha256=tQGyuTR8pZvnwzVsDqFhUrFtBeMP11eRnWD4Xq-mF-U,7181
9
+ uk_bin_collection/tests/test_collect_data.py,sha256=zmj15cb3BWc_ehPqkfzBSa6GZr0txvWumgbAk3Lyyf0,2252
10
+ uk_bin_collection/tests/test_common_functions.py,sha256=xvG9_ZihGSwHHAqfXZ6aKSEnoQXhjef7evhcPkBlHeI,14099
11
+ uk_bin_collection/tests/test_conftest.py,sha256=qI_zgGjNOnwE9gmZUiuirL1SYz3TFw5yfGFgT4T3aG4,1100
12
+ uk_bin_collection/tests/test_get_data.py,sha256=sFJz_Fd6o-1r2gdmzY52JGwVi0Of_mDzvYSoc7a3RUw,7239
13
13
  uk_bin_collection/uk_bin_collection/collect_data.py,sha256=dB7wWXsJX4fm5bIf84lexkvHIcO54CZ3JPxqmS-60YY,4654
14
- uk_bin_collection/uk_bin_collection/common.py,sha256=oZQW8CYRGfbhNSyq7t7jEhrFl1tjb4H157xSx8QHWSY,10106
14
+ uk_bin_collection/uk_bin_collection/common.py,sha256=fJG9ruqsCYOaYm-fzRb_l5kTeeB7i9k7qphWt3t7kks,10107
15
15
  uk_bin_collection/uk_bin_collection/councils/AberdeenshireCouncil.py,sha256=aO1CSdyqa8oAD0fB79y1Q9bikAWCP_JFa7CsyTa2j9s,1655
16
16
  uk_bin_collection/uk_bin_collection/councils/AdurAndWorthingCouncils.py,sha256=ppbrmm-MzB1wOulK--CU_0j4P-djNf3ozMhHnmQFqLo,1511
17
17
  uk_bin_collection/uk_bin_collection/councils/ArdsAndNorthDownCouncil.py,sha256=iMBldxNErgi-ok1o6xpqdNgMvR6qapaNqoTWDTqMeGo,3824
@@ -21,8 +21,8 @@ uk_bin_collection/uk_bin_collection/councils/AshfordBoroughCouncil.py,sha256=yC-
21
21
  uk_bin_collection/uk_bin_collection/councils/AylesburyValeCouncil.py,sha256=LouqjspEMt1TkOGqWHs2zkxwOETIy3n7p64uKIlAgUg,2401
22
22
  uk_bin_collection/uk_bin_collection/councils/BCPCouncil.py,sha256=W7QBx6Mgso8RYosuXsaYo3GGNAu-tiyBSmuYxr1JSOU,1707
23
23
  uk_bin_collection/uk_bin_collection/councils/BarnetCouncil.py,sha256=Sd4-pbv0QZsR7soxvXYqsfdOUIqZqS6notyoZthG77s,9182
24
- uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py,sha256=jHLSfRU9lPDUn249mUgNPc23UElU9SKmDon917S6ct0,4733
25
- uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py,sha256=UBHINX8WknQfnHU43Wp5kXAqmHl00aWM0Fh8NQdWBZA,3244
24
+ uk_bin_collection/uk_bin_collection/councils/BarnsleyMBCouncil.py,sha256=RKuH8HzGc3Q0WtLg-g_xVMn9hUYqdENgfcvvR4Bx5PI,4763
25
+ uk_bin_collection/uk_bin_collection/councils/BasildonCouncil.py,sha256=NymPmq5pud0PJ8ePcc2r1SKED4EHQ0EY2l71O-Metxc,3313
26
26
  uk_bin_collection/uk_bin_collection/councils/BasingstokeCouncil.py,sha256=VPWGljnH4C3q8qs5ZmCtqjNjgWQvviALzjk00q3EZeQ,2632
27
27
  uk_bin_collection/uk_bin_collection/councils/BathAndNorthEastSomersetCouncil.py,sha256=N_TPiIv8VBzN3rY0p3JtLlxSEru-6k1wW4UNIhN5X1M,3709
28
28
  uk_bin_collection/uk_bin_collection/councils/BedfordBoroughCouncil.py,sha256=CvGB7w9HMn7XyEtwfd9MWZE_HlZ75pDcaKMsQJz0xhk,1669
@@ -53,7 +53,7 @@ uk_bin_collection/uk_bin_collection/councils/CharnwoodBoroughCouncil.py,sha256=t
53
53
  uk_bin_collection/uk_bin_collection/councils/ChelmsfordCityCouncil.py,sha256=EB88D0MNJwuDZ2GX1ENc5maGYx17mnHTCtNl6s-v11E,5090
54
54
  uk_bin_collection/uk_bin_collection/councils/CheshireEastCouncil.py,sha256=aMqT5sy1Z1gklFO5Xl893OgeBmpf19OwpizWEKWQ3hg,1680
55
55
  uk_bin_collection/uk_bin_collection/councils/CheshireWestAndChesterCouncil.py,sha256=xsJcx-Dcds0ZcX2vZ-xHVkCg-faQRvbhrJzRDY6Lguw,4779
56
- uk_bin_collection/uk_bin_collection/councils/ChesterfieldBoroughCouncil.py,sha256=KtMasJBLed5qw15uzZ9bZ2ndy-ofCyu3MwCya6i9oig,6784
56
+ uk_bin_collection/uk_bin_collection/councils/ChesterfieldBoroughCouncil.py,sha256=mZiM8Ugm_OP0JkC5pLaQmi4i79mAp4SNNrcIdsREjHw,7198
57
57
  uk_bin_collection/uk_bin_collection/councils/ChichesterDistrictCouncil.py,sha256=HxrLcJves7ZsE8FbooymeecTUmScY4R7Oi71vwCePPo,4118
58
58
  uk_bin_collection/uk_bin_collection/councils/ChorleyCouncil.py,sha256=M7HjuUaFq8aSnOf_9m1QS4MmPPMmPhF3mLHSrfDPtV0,5194
59
59
  uk_bin_collection/uk_bin_collection/councils/ColchesterCityCouncil.py,sha256=Mny-q2rQkWe2Tj1gINwEM1L4AkqQl1EDMAaKY0-deD4,3968
@@ -246,8 +246,8 @@ uk_bin_collection/uk_bin_collection/councils/YorkCouncil.py,sha256=I2kBYMlsD4bId
246
246
  uk_bin_collection/uk_bin_collection/councils/council_class_template/councilclasstemplate.py,sha256=EQWRhZ2pEejlvm0fPyOTsOHKvUZmPnxEYO_OWRGKTjs,1158
247
247
  uk_bin_collection/uk_bin_collection/create_new_council.py,sha256=m-IhmWmeWQlFsTZC4OxuFvtw5ZtB8EAJHxJTH4O59lQ,1536
248
248
  uk_bin_collection/uk_bin_collection/get_bin_data.py,sha256=YvmHfZqanwrJ8ToGch34x-L-7yPe31nB_x77_Mgl_vo,4545
249
- uk_bin_collection-0.111.0.dist-info/LICENSE,sha256=vABBUOzcrgfaTKpzeo-si9YVEun6juDkndqA8RKdKGs,1071
250
- uk_bin_collection-0.111.0.dist-info/METADATA,sha256=post7eciEA6fFebAgkqrkux5HHCUNhh-R4t8n0Z3IpU,17574
251
- uk_bin_collection-0.111.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
252
- uk_bin_collection-0.111.0.dist-info/entry_points.txt,sha256=36WCSGMWSc916S3Hi1ZkazzDKHaJ6CD-4fCEFm5MIao,90
253
- uk_bin_collection-0.111.0.dist-info/RECORD,,
249
+ uk_bin_collection-0.112.0.dist-info/LICENSE,sha256=vABBUOzcrgfaTKpzeo-si9YVEun6juDkndqA8RKdKGs,1071
250
+ uk_bin_collection-0.112.0.dist-info/METADATA,sha256=At6TmeZOHQNeiAMHiLqAzbHou791eqks5d1WNk-B0wQ,17574
251
+ uk_bin_collection-0.112.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
252
+ uk_bin_collection-0.112.0.dist-info/entry_points.txt,sha256=36WCSGMWSc916S3Hi1ZkazzDKHaJ6CD-4fCEFm5MIao,90
253
+ uk_bin_collection-0.112.0.dist-info/RECORD,,