uk_bin_collection 0.111.0__py3-none-any.whl → 0.112.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,,