@camstack/addon-waste-collections 0.0.0-stage → 0.1.1

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 (1027) hide show
  1. package/THIRD_PARTY.md +9 -0
  2. package/assets/icon.svg +7 -0
  3. package/dist/index.js +13 -0
  4. package/dist/index.mjs +2 -0
  5. package/dist/waste-collections.addon.js +53077 -0
  6. package/dist/waste-collections.addon.mjs +53064 -0
  7. package/package.json +71 -4
  8. package/python/fetch_source.py +92 -0
  9. package/python/requirements.txt +10 -0
  10. package/python/vendor/LICENSE +23 -0
  11. package/python/vendor/README-sources.md +4094 -0
  12. package/python/vendor/waste_collection_schedule/__init__.py +4 -0
  13. package/python/vendor/waste_collection_schedule/collection.py +162 -0
  14. package/python/vendor/waste_collection_schedule/collection_aggregator.py +128 -0
  15. package/python/vendor/waste_collection_schedule/exceptions.py +208 -0
  16. package/python/vendor/waste_collection_schedule/icons.py +107 -0
  17. package/python/vendor/waste_collection_schedule/service/A_region_ch.py +230 -0
  18. package/python/vendor/waste_collection_schedule/service/AbfallIO.py +212 -0
  19. package/python/vendor/waste_collection_schedule/service/AbfallIOGraphQL.py +58 -0
  20. package/python/vendor/waste_collection_schedule/service/AbfallnaviDe.py +405 -0
  21. package/python/vendor/waste_collection_schedule/service/AchieveForms.py +177 -0
  22. package/python/vendor/waste_collection_schedule/service/AppAbfallplusDe.py +1240 -0
  23. package/python/vendor/waste_collection_schedule/service/ArcGis.py +176 -0
  24. package/python/vendor/waste_collection_schedule/service/CMCityMedia.py +271 -0
  25. package/python/vendor/waste_collection_schedule/service/CitiesAppsCom.py +2074 -0
  26. package/python/vendor/waste_collection_schedule/service/DeviceKeyStore.py +77 -0
  27. package/python/vendor/waste_collection_schedule/service/EcoHarmonogramPL.py +288 -0
  28. package/python/vendor/waste_collection_schedule/service/FirmstepSelfService.py +106 -0
  29. package/python/vendor/waste_collection_schedule/service/ICS.py +270 -0
  30. package/python/vendor/waste_collection_schedule/service/InsertITDe.py +39 -0
  31. package/python/vendor/waste_collection_schedule/service/IntraMaps.py +516 -0
  32. package/python/vendor/waste_collection_schedule/service/MuellmaxDe.py +73 -0
  33. package/python/vendor/waste_collection_schedule/service/OpenCities.py +431 -0
  34. package/python/vendor/waste_collection_schedule/service/Pozi.py +194 -0
  35. package/python/vendor/waste_collection_schedule/service/RiSKommunalAT.py +420 -0
  36. package/python/vendor/waste_collection_schedule/service/SSLError.py +31 -0
  37. package/python/vendor/waste_collection_schedule/service/Samiljo_se_wastetype_searcher.py +224 -0
  38. package/python/vendor/waste_collection_schedule/service/Sepan.py +334 -0
  39. package/python/vendor/waste_collection_schedule/service/SiteparkIES.py +231 -0
  40. package/python/vendor/waste_collection_schedule/service/WasteInfo.py +83 -0
  41. package/python/vendor/waste_collection_schedule/service/WhatBinDay.py +339 -0
  42. package/python/vendor/waste_collection_schedule/service/WhitespaceWRP.py +136 -0
  43. package/python/vendor/waste_collection_schedule/service/__init__.py +0 -0
  44. package/python/vendor/waste_collection_schedule/service/generate_ukbcd_json.py +31 -0
  45. package/python/vendor/waste_collection_schedule/service/junker_app.py +146 -0
  46. package/python/vendor/waste_collection_schedule/service/uk_cloud9_apps.py +414 -0
  47. package/python/vendor/waste_collection_schedule/source/123abfallkalender_de.py +197 -0
  48. package/python/vendor/waste_collection_schedule/source/1coast_com_au.py +189 -0
  49. package/python/vendor/waste_collection_schedule/source/a_region_ch.py +110 -0
  50. package/python/vendor/waste_collection_schedule/source/aarberg_ch.py +123 -0
  51. package/python/vendor/waste_collection_schedule/source/ab_peine_de.py +68 -0
  52. package/python/vendor/waste_collection_schedule/source/aberdeencity_gov_uk.py +232 -0
  53. package/python/vendor/waste_collection_schedule/source/aberdeenshire_gov_uk.py +56 -0
  54. package/python/vendor/waste_collection_schedule/source/abfall_havelland_de.py +52 -0
  55. package/python/vendor/waste_collection_schedule/source/abfall_io.py +233 -0
  56. package/python/vendor/waste_collection_schedule/source/abfall_io_graphql.py +176 -0
  57. package/python/vendor/waste_collection_schedule/source/abfall_kyffhaeuser_de.py +166 -0
  58. package/python/vendor/waste_collection_schedule/source/abfall_lro_de.py +229 -0
  59. package/python/vendor/waste_collection_schedule/source/abfall_neunkirchen_siegerland_de.py +63 -0
  60. package/python/vendor/waste_collection_schedule/source/abfall_wiener_neustadt_at.py +394 -0
  61. package/python/vendor/waste_collection_schedule/source/abfallkalender_prezero_network.py +147 -0
  62. package/python/vendor/waste_collection_schedule/source/abfallnavi_de.py +106 -0
  63. package/python/vendor/waste_collection_schedule/source/abfalltermine_forchheim_de.py +37 -0
  64. package/python/vendor/waste_collection_schedule/source/abfalltransport_li.py +181 -0
  65. package/python/vendor/waste_collection_schedule/source/abfallwirtschaft_fuerth_eu.py +51 -0
  66. package/python/vendor/waste_collection_schedule/source/abfallwirtschaft_germersheim_de.py +70 -0
  67. package/python/vendor/waste_collection_schedule/source/abfallwirtschaft_pforzheim_de.py +130 -0
  68. package/python/vendor/waste_collection_schedule/source/abfallwirtschaft_vechta_de.py +125 -0
  69. package/python/vendor/waste_collection_schedule/source/abfuhrplan_landkreis_neumarkt_de.py +126 -0
  70. package/python/vendor/waste_collection_schedule/source/abfuhrplan_schwabach_de.py +118 -0
  71. package/python/vendor/waste_collection_schedule/source/abilene_tx_us.py +163 -0
  72. package/python/vendor/waste_collection_schedule/source/abki_de.py +123 -0
  73. package/python/vendor/waste_collection_schedule/source/act_gov_au.py +82 -0
  74. package/python/vendor/waste_collection_schedule/source/adur_worthing_gov_uk.py +157 -0
  75. package/python/vendor/waste_collection_schedule/source/aen_minasidor_se.py +209 -0
  76. package/python/vendor/waste_collection_schedule/source/affaldonline_dk.py +373 -0
  77. package/python/vendor/waste_collection_schedule/source/affarsverken_se.py +67 -0
  78. package/python/vendor/waste_collection_schedule/source/afvalstoffendienst_nl.py +128 -0
  79. package/python/vendor/waste_collection_schedule/source/aha_region_de.py +160 -0
  80. package/python/vendor/waste_collection_schedule/source/ahe_de.py +64 -0
  81. package/python/vendor/waste_collection_schedule/source/ahk_heidekreis_de.py +213 -0
  82. package/python/vendor/waste_collection_schedule/source/airdrie_ca.py +156 -0
  83. package/python/vendor/waste_collection_schedule/source/ajl_mbh_de.py +198 -0
  84. package/python/vendor/waste_collection_schedule/source/alba_com_pl.py +90 -0
  85. package/python/vendor/waste_collection_schedule/source/albany_wa_gov_au.py +122 -0
  86. package/python/vendor/waste_collection_schedule/source/alchenstorf_ch.py +87 -0
  87. package/python/vendor/waste_collection_schedule/source/alexandria_va_us.py +144 -0
  88. package/python/vendor/waste_collection_schedule/source/aliaserviziambientali_it.py +220 -0
  89. package/python/vendor/waste_collection_schedule/source/allerdale_gov_uk.py +59 -0
  90. package/python/vendor/waste_collection_schedule/source/alvsbyns_energi_se.py +144 -0
  91. package/python/vendor/waste_collection_schedule/source/amberg_de.py +243 -0
  92. package/python/vendor/waste_collection_schedule/source/ambervalley_gov_uk.py +91 -0
  93. package/python/vendor/waste_collection_schedule/source/amsa_it.py +284 -0
  94. package/python/vendor/waste_collection_schedule/source/angern_gv_at.py +29 -0
  95. package/python/vendor/waste_collection_schedule/source/angus_gov_uk.py +157 -0
  96. package/python/vendor/waste_collection_schedule/source/antrimandnewtownabbey_gov_uk.py +212 -0
  97. package/python/vendor/waste_collection_schedule/source/api_golemio_cz.py +198 -0
  98. package/python/vendor/waste_collection_schedule/source/api_hubert_schmid_de.py +53 -0
  99. package/python/vendor/waste_collection_schedule/source/app_abfallplus_de.py +200 -0
  100. package/python/vendor/waste_collection_schedule/source/app_my_local_services_au.py +209 -0
  101. package/python/vendor/waste_collection_schedule/source/apps_ci_minneapolis_mn_us.py +122 -0
  102. package/python/vendor/waste_collection_schedule/source/apps_imactivate_com.py +178 -0
  103. package/python/vendor/waste_collection_schedule/source/apricaspa_it.py +300 -0
  104. package/python/vendor/waste_collection_schedule/source/araccolta_it.py +95 -0
  105. package/python/vendor/waste_collection_schedule/source/ardsandnorthdown_gov_uk.py +110 -0
  106. package/python/vendor/waste_collection_schedule/source/armadale_wa_gov_au.py +108 -0
  107. package/python/vendor/waste_collection_schedule/source/armaghbanbridgecraigavon_gov_uk.py +104 -0
  108. package/python/vendor/waste_collection_schedule/source/art_trier_de.py +90 -0
  109. package/python/vendor/waste_collection_schedule/source/arun_gov_uk.py +66 -0
  110. package/python/vendor/waste_collection_schedule/source/ashfield_gov_uk.py +126 -0
  111. package/python/vendor/waste_collection_schedule/source/ashford_gov_uk.py +150 -0
  112. package/python/vendor/waste_collection_schedule/source/asm_pv_it.py +164 -0
  113. package/python/vendor/waste_collection_schedule/source/asr_chemnitz_de.py +132 -0
  114. package/python/vendor/waste_collection_schedule/source/aucklandcouncil_govt_nz.py +143 -0
  115. package/python/vendor/waste_collection_schedule/source/avfallsapp_se.py +424 -0
  116. package/python/vendor/waste_collection_schedule/source/avfallsor_no.py +133 -0
  117. package/python/vendor/waste_collection_schedule/source/aw_harburg_de.py +157 -0
  118. package/python/vendor/waste_collection_schedule/source/awb_ammerland_de.py +303 -0
  119. package/python/vendor/waste_collection_schedule/source/awb_bad_kreuznach_de.py +251 -0
  120. package/python/vendor/waste_collection_schedule/source/awb_bir_de.py +120 -0
  121. package/python/vendor/waste_collection_schedule/source/awb_emsland_de.py +180 -0
  122. package/python/vendor/waste_collection_schedule/source/awb_es_de.py +107 -0
  123. package/python/vendor/waste_collection_schedule/source/awb_mainz_bingen_de.py +50 -0
  124. package/python/vendor/waste_collection_schedule/source/awb_oldenburg_de.py +107 -0
  125. package/python/vendor/waste_collection_schedule/source/awbkoeln_de.py +48 -0
  126. package/python/vendor/waste_collection_schedule/source/awg_de.py +155 -0
  127. package/python/vendor/waste_collection_schedule/source/awg_wuppertal_de.py +101 -0
  128. package/python/vendor/waste_collection_schedule/source/awido_de.py +714 -0
  129. package/python/vendor/waste_collection_schedule/source/awigo_de.py +132 -0
  130. package/python/vendor/waste_collection_schedule/source/awista_kommunal_de.py +220 -0
  131. package/python/vendor/waste_collection_schedule/source/awlneuss_de.py +117 -0
  132. package/python/vendor/waste_collection_schedule/source/awm_muenchen_de.py +476 -0
  133. package/python/vendor/waste_collection_schedule/source/awn_de.py +156 -0
  134. package/python/vendor/waste_collection_schedule/source/awr_de.py +89 -0
  135. package/python/vendor/waste_collection_schedule/source/awsh_de.py +90 -0
  136. package/python/vendor/waste_collection_schedule/source/awv_ot_de.py +88 -0
  137. package/python/vendor/waste_collection_schedule/source/babergh_midsuffolk_gov_uk.py +208 -0
  138. package/python/vendor/waste_collection_schedule/source/bad_eisenkappel_info.py +89 -0
  139. package/python/vendor/waste_collection_schedule/source/badaussee_at.py +109 -0
  140. package/python/vendor/waste_collection_schedule/source/baden_umweltverbaende_at.py +59 -0
  141. package/python/vendor/waste_collection_schedule/source/ballarat_vic_gov_au.py +77 -0
  142. package/python/vendor/waste_collection_schedule/source/ballina_nsw_gov_au.py +64 -0
  143. package/python/vendor/waste_collection_schedule/source/baltimore_county_md_us.py +425 -0
  144. package/python/vendor/waste_collection_schedule/source/banyule_vic_gov_au.py +58 -0
  145. package/python/vendor/waste_collection_schedule/source/barnet_gov_uk.py +61 -0
  146. package/python/vendor/waste_collection_schedule/source/barnsley_gov_uk.py +115 -0
  147. package/python/vendor/waste_collection_schedule/source/barrie_ca.py +179 -0
  148. package/python/vendor/waste_collection_schedule/source/basildon_gov_uk.py +134 -0
  149. package/python/vendor/waste_collection_schedule/source/basingstoke_gov_uk.py +82 -0
  150. package/python/vendor/waste_collection_schedule/source/bassendean_wa_gov_au.py +132 -0
  151. package/python/vendor/waste_collection_schedule/source/bathnes_gov_uk.py +127 -0
  152. package/python/vendor/waste_collection_schedule/source/bathurst_nsw_gov_au.py +153 -0
  153. package/python/vendor/waste_collection_schedule/source/baton_rouge_la_us.py +131 -0
  154. package/python/vendor/waste_collection_schedule/source/baumkirchen_gv_at.py +27 -0
  155. package/python/vendor/waste_collection_schedule/source/bayside_vic_gov_au.py +113 -0
  156. package/python/vendor/waste_collection_schedule/source/bayswater_wa_gov_au.py +128 -0
  157. package/python/vendor/waste_collection_schedule/source/bcp_gov_uk.py +84 -0
  158. package/python/vendor/waste_collection_schedule/source/bedford_gov_uk.py +65 -0
  159. package/python/vendor/waste_collection_schedule/source/beg_logistics_de.py +95 -0
  160. package/python/vendor/waste_collection_schedule/source/belfast_city_gov_uk.py +189 -0
  161. package/python/vendor/waste_collection_schedule/source/belmont_wa_gov_au.py +74 -0
  162. package/python/vendor/waste_collection_schedule/source/bendigo_vic_gov_au.py +218 -0
  163. package/python/vendor/waste_collection_schedule/source/bep_environnement_be.py +127 -0
  164. package/python/vendor/waste_collection_schedule/source/berdorf_lu.py +173 -0
  165. package/python/vendor/waste_collection_schedule/source/berlin_recycling_de.py +94 -0
  166. package/python/vendor/waste_collection_schedule/source/bern_ch.py +220 -0
  167. package/python/vendor/waste_collection_schedule/source/berndorf_gv_at.py +41 -0
  168. package/python/vendor/waste_collection_schedule/source/betzdorf_lu.py +68 -0
  169. package/python/vendor/waste_collection_schedule/source/bexley_gov_uk.py +64 -0
  170. package/python/vendor/waste_collection_schedule/source/bielefeld_de.py +185 -0
  171. package/python/vendor/waste_collection_schedule/source/biffaleicester_co_uk.py +76 -0
  172. package/python/vendor/waste_collection_schedule/source/binzone_uk.py +95 -0
  173. package/python/vendor/waste_collection_schedule/source/bir_no.py +162 -0
  174. package/python/vendor/waste_collection_schedule/source/birmingham_gov_uk.py +168 -0
  175. package/python/vendor/waste_collection_schedule/source/blaby_gov_uk.py +88 -0
  176. package/python/vendor/waste_collection_schedule/source/blackburn_gov_uk.py +82 -0
  177. package/python/vendor/waste_collection_schedule/source/blackpool_gov_uk.py +79 -0
  178. package/python/vendor/waste_collection_schedule/source/blacktown_nsw_gov_au.py +71 -0
  179. package/python/vendor/waste_collection_schedule/source/bmv_at.py +109 -0
  180. package/python/vendor/waste_collection_schedule/source/bochnia_gmina_pl.py +185 -0
  181. package/python/vendor/waste_collection_schedule/source/bolsover_gov_uk.py +160 -0
  182. package/python/vendor/waste_collection_schedule/source/bolton_gov_uk.py +187 -0
  183. package/python/vendor/waste_collection_schedule/source/borlange_energi_se.py +177 -0
  184. package/python/vendor/waste_collection_schedule/source/boroondara_vic_gov_au.py +153 -0
  185. package/python/vendor/waste_collection_schedule/source/boston_gov_uk.py +216 -0
  186. package/python/vendor/waste_collection_schedule/source/bracknell_forest_gov_uk.py +97 -0
  187. package/python/vendor/waste_collection_schedule/source/bradford_gov_uk.py +95 -0
  188. package/python/vendor/waste_collection_schedule/source/braintree_gov_uk.py +89 -0
  189. package/python/vendor/waste_collection_schedule/source/breckland_gov_uk.py +95 -0
  190. package/python/vendor/waste_collection_schedule/source/bridgend_gov_uk.py +70 -0
  191. package/python/vendor/waste_collection_schedule/source/brimbank_vic_gov_au.py +274 -0
  192. package/python/vendor/waste_collection_schedule/source/brisbane_qld_gov_au.py +139 -0
  193. package/python/vendor/waste_collection_schedule/source/bristol_gov_uk.py +97 -0
  194. package/python/vendor/waste_collection_schedule/source/bromley_gov_uk.py +57 -0
  195. package/python/vendor/waste_collection_schedule/source/bromsgrove_gov_uk.py +114 -0
  196. package/python/vendor/waste_collection_schedule/source/broxbourne_gov_uk.py +112 -0
  197. package/python/vendor/waste_collection_schedule/source/broxtowe_gov_uk.py +128 -0
  198. package/python/vendor/waste_collection_schedule/source/bsr_de.py +98 -0
  199. package/python/vendor/waste_collection_schedule/source/buchegg_so_ch.py +439 -0
  200. package/python/vendor/waste_collection_schedule/source/buergerportal_de.py +375 -0
  201. package/python/vendor/waste_collection_schedule/source/buermoos_at.py +85 -0
  202. package/python/vendor/waste_collection_schedule/source/bundaberg_qld_gov_au.py +115 -0
  203. package/python/vendor/waste_collection_schedule/source/burgerportaal_nl.py +230 -0
  204. package/python/vendor/waste_collection_schedule/source/burnley_gov_uk.py +99 -0
  205. package/python/vendor/waste_collection_schedule/source/bury_gov_uk.py +129 -0
  206. package/python/vendor/waste_collection_schedule/source/byron_nsw_gov_au.py +228 -0
  207. package/python/vendor/waste_collection_schedule/source/c_trace_de.py +270 -0
  208. package/python/vendor/waste_collection_schedule/source/cairns_qld_gov_au.py +162 -0
  209. package/python/vendor/waste_collection_schedule/source/calderdale_gov_uk.py +164 -0
  210. package/python/vendor/waste_collection_schedule/source/calgary_ca.py +106 -0
  211. package/python/vendor/waste_collection_schedule/source/cambridge_gov_uk.py +80 -0
  212. package/python/vendor/waste_collection_schedule/source/cambridge_wa_gov_au.py +54 -0
  213. package/python/vendor/waste_collection_schedule/source/camden_gov_uk.py +71 -0
  214. package/python/vendor/waste_collection_schedule/source/campbelltown_nsw_gov_au.py +58 -0
  215. package/python/vendor/waste_collection_schedule/source/canadabay_nsw_gov_au.py +164 -0
  216. package/python/vendor/waste_collection_schedule/source/canning_wa_gov_au.py +73 -0
  217. package/python/vendor/waste_collection_schedule/source/cannock_chase_dc_gov_uk.py +108 -0
  218. package/python/vendor/waste_collection_schedule/source/canterbury_gov_uk.py +113 -0
  219. package/python/vendor/waste_collection_schedule/source/cardiff_gov_uk.py +108 -0
  220. package/python/vendor/waste_collection_schedule/source/cardinia_vic_gov_au.py +148 -0
  221. package/python/vendor/waste_collection_schedule/source/carmarthenshire_gov_wales.py +100 -0
  222. package/python/vendor/waste_collection_schedule/source/casey_vic_gov_au.py +159 -0
  223. package/python/vendor/waste_collection_schedule/source/cassowarycoast_qld_gov_au.py +70 -0
  224. package/python/vendor/waste_collection_schedule/source/castlepoint_gov_uk.py +302 -0
  225. package/python/vendor/waste_collection_schedule/source/cbcity_nsw_gov_au.py +452 -0
  226. package/python/vendor/waste_collection_schedule/source/cc-montesquieu_fr.py +295 -0
  227. package/python/vendor/waste_collection_schedule/source/ccc_govt_nz.py +138 -0
  228. package/python/vendor/waste_collection_schedule/source/ccc_tas_gov_au.py +125 -0
  229. package/python/vendor/waste_collection_schedule/source/ceb_coburg_de.py +97 -0
  230. package/python/vendor/waste_collection_schedule/source/cederbaum_de.py +103 -0
  231. package/python/vendor/waste_collection_schedule/source/cem_ambiente_it.py +239 -0
  232. package/python/vendor/waste_collection_schedule/source/centralbedfordshire_gov_uk.py +193 -0
  233. package/python/vendor/waste_collection_schedule/source/charleston_sc_gov.py +107 -0
  234. package/python/vendor/waste_collection_schedule/source/charlestoncounty_org.py +97 -0
  235. package/python/vendor/waste_collection_schedule/source/charnwood_gov_uk.py +116 -0
  236. package/python/vendor/waste_collection_schedule/source/chelmsford_gov_uk.py +85 -0
  237. package/python/vendor/waste_collection_schedule/source/cheltenham_gov_uk.py +155 -0
  238. package/python/vendor/waste_collection_schedule/source/cherwell_gov_uk.py +74 -0
  239. package/python/vendor/waste_collection_schedule/source/chesapeake_va_us.py +90 -0
  240. package/python/vendor/waste_collection_schedule/source/cheshire_east_gov_uk.py +111 -0
  241. package/python/vendor/waste_collection_schedule/source/cheshire_west_and_chester_gov_uk.py +159 -0
  242. package/python/vendor/waste_collection_schedule/source/chesterfield_gov_uk.py +117 -0
  243. package/python/vendor/waste_collection_schedule/source/chichester_gov_uk.py +72 -0
  244. package/python/vendor/waste_collection_schedule/source/chiemgau_recycling_lk_rosenheim.py +40 -0
  245. package/python/vendor/waste_collection_schedule/source/chiltern_gov_uk.py +20 -0
  246. package/python/vendor/waste_collection_schedule/source/chorley_gov_uk.py +132 -0
  247. package/python/vendor/waste_collection_schedule/source/cidiu_it.py +220 -0
  248. package/python/vendor/waste_collection_schedule/source/circulus_nl.py +67 -0
  249. package/python/vendor/waste_collection_schedule/source/citiesapps_com.py +101 -0
  250. package/python/vendor/waste_collection_schedule/source/cityofparramatta_nsw_gov_au.py +199 -0
  251. package/python/vendor/waste_collection_schedule/source/cityofsydney_nsw_gov_au.py +137 -0
  252. package/python/vendor/waste_collection_schedule/source/ciudad_de_la_costa_uy.py +230 -0
  253. package/python/vendor/waste_collection_schedule/source/clackmannanshire_gov_uk.py +176 -0
  254. package/python/vendor/waste_collection_schedule/source/clissonsevremaine_fr.py +255 -0
  255. package/python/vendor/waste_collection_schedule/source/cm_lisboa_pt.py +175 -0
  256. package/python/vendor/waste_collection_schedule/source/cmcitymedia_de.py +58 -0
  257. package/python/vendor/waste_collection_schedule/source/cockburn_wa_gov_au.py +209 -0
  258. package/python/vendor/waste_collection_schedule/source/codc_govt_nz.py +102 -0
  259. package/python/vendor/waste_collection_schedule/source/coeur_yvelines_fr.py +285 -0
  260. package/python/vendor/waste_collection_schedule/source/colchester_gov_uk.py +213 -0
  261. package/python/vendor/waste_collection_schedule/source/communitywastedisposal_com.py +301 -0
  262. package/python/vendor/waste_collection_schedule/source/comune_digital_it.py +166 -0
  263. package/python/vendor/waste_collection_schedule/source/conwy_gov_uk.py +57 -0
  264. package/python/vendor/waste_collection_schedule/source/cornwall_gov_uk.py +86 -0
  265. package/python/vendor/waste_collection_schedule/source/cotswold_gov_uk.py +328 -0
  266. package/python/vendor/waste_collection_schedule/source/coventry_gov_uk.py +178 -0
  267. package/python/vendor/waste_collection_schedule/source/crawley_gov_uk.py +107 -0
  268. package/python/vendor/waste_collection_schedule/source/croydon_gov_uk.py +217 -0
  269. package/python/vendor/waste_collection_schedule/source/cumberland_gov_uk.py +72 -0
  270. package/python/vendor/waste_collection_schedule/source/cumberland_nsw_gov_au.py +150 -0
  271. package/python/vendor/waste_collection_schedule/source/czystyregion_pl.py +239 -0
  272. package/python/vendor/waste_collection_schedule/source/dacorum_gov_uk.py +131 -0
  273. package/python/vendor/waste_collection_schedule/source/dardanup_wa_gov_au.py +219 -0
  274. package/python/vendor/waste_collection_schedule/source/darebin_vic_gov_au.py +236 -0
  275. package/python/vendor/waste_collection_schedule/source/darlington_gov_uk.py +67 -0
  276. package/python/vendor/waste_collection_schedule/source/dartford_gov_uk.py +65 -0
  277. package/python/vendor/waste_collection_schedule/source/data_angers_fr.py +369 -0
  278. package/python/vendor/waste_collection_schedule/source/data_bs_ch.py +93 -0
  279. package/python/vendor/waste_collection_schedule/source/data_grandlyon_com.py +196 -0
  280. package/python/vendor/waste_collection_schedule/source/data_montpellier3m_fr.py +283 -0
  281. package/python/vendor/waste_collection_schedule/source/data_nantesmetropole_fr.py +322 -0
  282. package/python/vendor/waste_collection_schedule/source/data_umweltprofis_at.py +97 -0
  283. package/python/vendor/waste_collection_schedule/source/deafvalapp_nl.py +154 -0
  284. package/python/vendor/waste_collection_schedule/source/delight_system_com.py +484 -0
  285. package/python/vendor/waste_collection_schedule/source/denbighshire_gov_uk.py +54 -0
  286. package/python/vendor/waste_collection_schedule/source/deponia_hu.py +542 -0
  287. package/python/vendor/waste_collection_schedule/source/derby_gov_uk.py +95 -0
  288. package/python/vendor/waste_collection_schedule/source/derbyshiredales_gov_uk.py +143 -0
  289. package/python/vendor/waste_collection_schedule/source/dienten_gv_at.py +36 -0
  290. package/python/vendor/waste_collection_schedule/source/dillingen_saar_de.py +69 -0
  291. package/python/vendor/waste_collection_schedule/source/doncaster_gov_uk.py +264 -0
  292. package/python/vendor/waste_collection_schedule/source/dorset_gov_uk.py +56 -0
  293. package/python/vendor/waste_collection_schedule/source/dover_gov_uk.py +68 -0
  294. package/python/vendor/waste_collection_schedule/source/dudley_gov_uk.py +90 -0
  295. package/python/vendor/waste_collection_schedule/source/dundeecity_gov_uk.py +75 -0
  296. package/python/vendor/waste_collection_schedule/source/dunedin_govt_nz.py +88 -0
  297. package/python/vendor/waste_collection_schedule/source/durban_gov_za.py +157 -0
  298. package/python/vendor/waste_collection_schedule/source/durham_gov_uk.py +103 -0
  299. package/python/vendor/waste_collection_schedule/source/e_lindsey_gov_uk.py +173 -0
  300. package/python/vendor/waste_collection_schedule/source/ead_darmstadt_de.py +64 -0
  301. package/python/vendor/waste_collection_schedule/source/ealing_gov_uk.py +46 -0
  302. package/python/vendor/waste_collection_schedule/source/east_ayrshire_gov_uk.py +48 -0
  303. package/python/vendor/waste_collection_schedule/source/east_northamptonshire_gov_uk.py +61 -0
  304. package/python/vendor/waste_collection_schedule/source/east_renfrewshire_gov_uk.py +180 -0
  305. package/python/vendor/waste_collection_schedule/source/eastcambs_gov_uk.py +198 -0
  306. package/python/vendor/waste_collection_schedule/source/eastdevon_gov_uk.py +72 -0
  307. package/python/vendor/waste_collection_schedule/source/eastdunbarton_gov_uk.py +63 -0
  308. package/python/vendor/waste_collection_schedule/source/easthants_gov_uk.py +481 -0
  309. package/python/vendor/waste_collection_schedule/source/eastherts_gov_uk.py +180 -0
  310. package/python/vendor/waste_collection_schedule/source/eastleigh_gov_uk.py +65 -0
  311. package/python/vendor/waste_collection_schedule/source/eastlothian_gov_uk.py +166 -0
  312. package/python/vendor/waste_collection_schedule/source/eastriding_gov_uk.py +67 -0
  313. package/python/vendor/waste_collection_schedule/source/eaststaffsbc_gov_uk.py +99 -0
  314. package/python/vendor/waste_collection_schedule/source/eastsuffolk_gov_uk.py +147 -0
  315. package/python/vendor/waste_collection_schedule/source/ecoapp_ecoservice_lt.py +135 -0
  316. package/python/vendor/waste_collection_schedule/source/ecoharmonogram_pl.py +688 -0
  317. package/python/vendor/waste_collection_schedule/source/ecoszczecin_pl.py +135 -0
  318. package/python/vendor/waste_collection_schedule/source/edlitz_at.py +21 -0
  319. package/python/vendor/waste_collection_schedule/source/edpevent_se.py +409 -0
  320. package/python/vendor/waste_collection_schedule/source/eggelsberg_at.py +73 -0
  321. package/python/vendor/waste_collection_schedule/source/egn_abfallkalender_de.py +112 -0
  322. package/python/vendor/waste_collection_schedule/source/eigenbetrieb_abfallwirtschaft_de.py +107 -0
  323. package/python/vendor/waste_collection_schedule/source/eilenburg_de.py +98 -0
  324. package/python/vendor/waste_collection_schedule/source/eko_tom_pl.py +103 -0
  325. package/python/vendor/waste_collection_schedule/source/ekonovus_lt.py +316 -0
  326. package/python/vendor/waste_collection_schedule/source/ekosystem_wroc_pl.py +88 -0
  327. package/python/vendor/waste_collection_schedule/source/elmbridge_gov_uk.py +84 -0
  328. package/python/vendor/waste_collection_schedule/source/elsbethen_at.py +70 -0
  329. package/python/vendor/waste_collection_schedule/source/enfield_gov_uk.py +283 -0
  330. package/python/vendor/waste_collection_schedule/source/enns_at.py +71 -0
  331. package/python/vendor/waste_collection_schedule/source/environmentfirst_co_uk.py +105 -0
  332. package/python/vendor/waste_collection_schedule/source/eppingforestdc_gov_uk.py +107 -0
  333. package/python/vendor/waste_collection_schedule/source/erewash_gov_uk.py +72 -0
  334. package/python/vendor/waste_collection_schedule/source/erlangen_hoechstadt_de.py +53 -0
  335. package/python/vendor/waste_collection_schedule/source/esch_lu.py +84 -0
  336. package/python/vendor/waste_collection_schedule/source/eth_erd_hu.py +160 -0
  337. package/python/vendor/waste_collection_schedule/source/evv_voelklingen_de.py +291 -0
  338. package/python/vendor/waste_collection_schedule/source/example.py +46 -0
  339. package/python/vendor/waste_collection_schedule/source/exeter_gov_uk.py +114 -0
  340. package/python/vendor/waste_collection_schedule/source/fairfieldcity_nsw_gov_au.py +215 -0
  341. package/python/vendor/waste_collection_schedule/source/fareham_gov_uk.py +196 -0
  342. package/python/vendor/waste_collection_schedule/source/fcc_group_eu.py +246 -0
  343. package/python/vendor/waste_collection_schedule/source/fccenvironment_co_uk.py +166 -0
  344. package/python/vendor/waste_collection_schedule/source/felixdorf_gv_at.py +64 -0
  345. package/python/vendor/waste_collection_schedule/source/fenland_gov_uk.py +95 -0
  346. package/python/vendor/waste_collection_schedule/source/fermanaghomagh_gov_uk.py +138 -0
  347. package/python/vendor/waste_collection_schedule/source/feuerthalen_ch.py +304 -0
  348. package/python/vendor/waste_collection_schedule/source/fev_se.py +156 -0
  349. package/python/vendor/waste_collection_schedule/source/fife_gov_uk.py +96 -0
  350. package/python/vendor/waste_collection_schedule/source/fkf_bo_hu.py +94 -0
  351. package/python/vendor/waste_collection_schedule/source/flintshire_gov_uk.py +66 -0
  352. package/python/vendor/waste_collection_schedule/source/folkestone_hythe_gov_uk.py +72 -0
  353. package/python/vendor/waste_collection_schedule/source/forest_of_dean_gov_uk.py +326 -0
  354. package/python/vendor/waste_collection_schedule/source/fosenrenovasjon_no.py +79 -0
  355. package/python/vendor/waste_collection_schedule/source/frankenberg_de.py +182 -0
  356. package/python/vendor/waste_collection_schedule/source/frankston_vic_gov_au.py +133 -0
  357. package/python/vendor/waste_collection_schedule/source/frasercoast_qld_gov_au.py +143 -0
  358. package/python/vendor/waste_collection_schedule/source/fredrikstad_no.py +99 -0
  359. package/python/vendor/waste_collection_schedule/source/fritzens_gv_at.py +30 -0
  360. package/python/vendor/waste_collection_schedule/source/frwa_com_au.py +144 -0
  361. package/python/vendor/waste_collection_schedule/source/fuquay_varina_nc_us.py +123 -0
  362. package/python/vendor/waste_collection_schedule/source/fylde_gov_uk.py +204 -0
  363. package/python/vendor/waste_collection_schedule/source/gaenserndorf_city_at.py +186 -0
  364. package/python/vendor/waste_collection_schedule/source/gardenbags_co_nz.py +63 -0
  365. package/python/vendor/waste_collection_schedule/source/gargzdusvara_eu.py +113 -0
  366. package/python/vendor/waste_collection_schedule/source/gastrikeatervinnare_se.py +97 -0
  367. package/python/vendor/waste_collection_schedule/source/gateshead_gov_uk.py +161 -0
  368. package/python/vendor/waste_collection_schedule/source/geelongaustralia_com_au.py +104 -0
  369. package/python/vendor/waste_collection_schedule/source/geilenkirchen_de.py +201 -0
  370. package/python/vendor/waste_collection_schedule/source/gemeinde24_at.py +429 -0
  371. package/python/vendor/waste_collection_schedule/source/gemuenden_wohra_de.py +200 -0
  372. package/python/vendor/waste_collection_schedule/source/geoport_nwm_de.py +91 -0
  373. package/python/vendor/waste_collection_schedule/source/geovest_it.py +527 -0
  374. package/python/vendor/waste_collection_schedule/source/gfa_lueneburg_de.py +145 -0
  375. package/python/vendor/waste_collection_schedule/source/glasgow_gov_uk.py +86 -0
  376. package/python/vendor/waste_collection_schedule/source/gleneira_vic_gov_au.py +272 -0
  377. package/python/vendor/waste_collection_schedule/source/glor_no.py +140 -0
  378. package/python/vendor/waste_collection_schedule/source/gloucester_gov_uk.py +196 -0
  379. package/python/vendor/waste_collection_schedule/source/gmina_miekinia_pl.py +54 -0
  380. package/python/vendor/waste_collection_schedule/source/gmina_sroda_slaska_pl.py +220 -0
  381. package/python/vendor/waste_collection_schedule/source/gmina_trzebnica_pl.py +135 -0
  382. package/python/vendor/waste_collection_schedule/source/gmina_zgierz_pl.py +202 -0
  383. package/python/vendor/waste_collection_schedule/source/gmrmatawinie_qc_ca.py +129 -0
  384. package/python/vendor/waste_collection_schedule/source/goap_poznan_pl.py +190 -0
  385. package/python/vendor/waste_collection_schedule/source/goessendorf_at.py +22 -0
  386. package/python/vendor/waste_collection_schedule/source/gojer_at.py +175 -0
  387. package/python/vendor/waste_collection_schedule/source/goldcoast_qld_gov_au.py +37 -0
  388. package/python/vendor/waste_collection_schedule/source/goldenplains_vic_gov_au.py +101 -0
  389. package/python/vendor/waste_collection_schedule/source/gosnells_wa_gov_au.py +190 -0
  390. package/python/vendor/waste_collection_schedule/source/gosport_gov_uk.py +178 -0
  391. package/python/vendor/waste_collection_schedule/source/gotland_se.py +50 -0
  392. package/python/vendor/waste_collection_schedule/source/grafikai_svara_lt.py +332 -0
  393. package/python/vendor/waste_collection_schedule/source/grandbesancon_fr.py +194 -0
  394. package/python/vendor/waste_collection_schedule/source/great_yarmouth_gov_uk.py +160 -0
  395. package/python/vendor/waste_collection_schedule/source/greater_cambridge_waste_org.py +114 -0
  396. package/python/vendor/waste_collection_schedule/source/greaterdandenong_vic_gov_au.py +143 -0
  397. package/python/vendor/waste_collection_schedule/source/greatershepparton_com_au.py +259 -0
  398. package/python/vendor/waste_collection_schedule/source/grenchen_ch.py +40 -0
  399. package/python/vendor/waste_collection_schedule/source/greyhound_ie.py +148 -0
  400. package/python/vendor/waste_collection_schedule/source/gronau_de.py +122 -0
  401. package/python/vendor/waste_collection_schedule/source/gross_gerau_de.py +48 -0
  402. package/python/vendor/waste_collection_schedule/source/grosswangen_ch.py +52 -0
  403. package/python/vendor/waste_collection_schedule/source/gruppoveritas_it.py +375 -0
  404. package/python/vendor/waste_collection_schedule/source/guildford_gov_uk.py +82 -0
  405. package/python/vendor/waste_collection_schedule/source/gwynedd_gov_uk.py +57 -0
  406. package/python/vendor/waste_collection_schedule/source/gyhg_hu.py +92 -0
  407. package/python/vendor/waste_collection_schedule/source/hackney_gov_uk.py +168 -0
  408. package/python/vendor/waste_collection_schedule/source/haringey_gov_uk.py +82 -0
  409. package/python/vendor/waste_collection_schedule/source/harlow_gov_uk.py +63 -0
  410. package/python/vendor/waste_collection_schedule/source/harrow_gov_uk.py +70 -0
  411. package/python/vendor/waste_collection_schedule/source/hart_gov_uk.py +49 -0
  412. package/python/vendor/waste_collection_schedule/source/hartbeigraz_at.py +123 -0
  413. package/python/vendor/waste_collection_schedule/source/hartlepool_gov_uk.py +109 -0
  414. package/python/vendor/waste_collection_schedule/source/harvey_wa_gov_au.py +157 -0
  415. package/python/vendor/waste_collection_schedule/source/hasselroth_de.py +92 -0
  416. package/python/vendor/waste_collection_schedule/source/hassleholm_miljo_se.py +124 -0
  417. package/python/vendor/waste_collection_schedule/source/hastings_gov_uk.py +88 -0
  418. package/python/vendor/waste_collection_schedule/source/hastingsdc_govt_nz.py +168 -0
  419. package/python/vendor/waste_collection_schedule/source/hausmannstaetten_gv_at.py +67 -0
  420. package/python/vendor/waste_collection_schedule/source/hausmuell_info.py +411 -0
  421. package/python/vendor/waste_collection_schedule/source/havering_gov_uk.py +77 -0
  422. package/python/vendor/waste_collection_schedule/source/hawkesbury_nsw_gov_au.py +131 -0
  423. package/python/vendor/waste_collection_schedule/source/hcc_govt_nz.py +50 -0
  424. package/python/vendor/waste_collection_schedule/source/hedemora_energi_se.py +146 -0
  425. package/python/vendor/waste_collection_schedule/source/heidelberg_de.py +309 -0
  426. package/python/vendor/waste_collection_schedule/source/heilbronn_de.py +125 -0
  427. package/python/vendor/waste_collection_schedule/source/heimat_info_de.py +284 -0
  428. package/python/vendor/waste_collection_schedule/source/heinz_entsorgung_de.py +90 -0
  429. package/python/vendor/waste_collection_schedule/source/herefordshire_gov_uk.py +190 -0
  430. package/python/vendor/waste_collection_schedule/source/herzogsdorf_ooe_gv_at.py +41 -0
  431. package/python/vendor/waste_collection_schedule/source/highland_gov_uk.py +97 -0
  432. package/python/vendor/waste_collection_schedule/source/highpeak_gov_uk.py +142 -0
  433. package/python/vendor/waste_collection_schedule/source/hilchenbach_de.py +60 -0
  434. package/python/vendor/waste_collection_schedule/source/hillingdon_gov_uk.py +202 -0
  435. package/python/vendor/waste_collection_schedule/source/him_as.py +154 -0
  436. package/python/vendor/waste_collection_schedule/source/hinckley_bosworth_gov_uk.py +123 -0
  437. package/python/vendor/waste_collection_schedule/source/hobartcity_com_au.py +46 -0
  438. package/python/vendor/waste_collection_schedule/source/hobsonsbay_vic_gov_au.py +125 -0
  439. package/python/vendor/waste_collection_schedule/source/hoover_al_us.py +91 -0
  440. package/python/vendor/waste_collection_schedule/source/hornsby_nsw_gov_au.py +746 -0
  441. package/python/vendor/waste_collection_schedule/source/horowhenua_govt_nz.py +65 -0
  442. package/python/vendor/waste_collection_schedule/source/horsham_gov_uk.py +88 -0
  443. package/python/vendor/waste_collection_schedule/source/hounslow_gov_uk.py +114 -0
  444. package/python/vendor/waste_collection_schedule/source/hudiksvall_se.py +72 -0
  445. package/python/vendor/waste_collection_schedule/source/hull_gov_uk.py +55 -0
  446. package/python/vendor/waste_collection_schedule/source/hume_vic_gov_au.py +120 -0
  447. package/python/vendor/waste_collection_schedule/source/huntingdonshire_gov_uk.py +50 -0
  448. package/python/vendor/waste_collection_schedule/source/hvcgroep_nl.py +385 -0
  449. package/python/vendor/waste_collection_schedule/source/hygea_be.py +58 -0
  450. package/python/vendor/waste_collection_schedule/source/iapp_itouchvision_com.py +606 -0
  451. package/python/vendor/waste_collection_schedule/source/ichisystem_eu.py +320 -0
  452. package/python/vendor/waste_collection_schedule/source/ics.py +284 -0
  453. package/python/vendor/waste_collection_schedule/source/ilm_kreis_de.py +50 -0
  454. package/python/vendor/waste_collection_schedule/source/ilrifiutologo_it.py +172 -0
  455. package/python/vendor/waste_collection_schedule/source/impactapps_com_au.py +611 -0
  456. package/python/vendor/waste_collection_schedule/source/imst_at.py +83 -0
  457. package/python/vendor/waste_collection_schedule/source/infeo_at.py +279 -0
  458. package/python/vendor/waste_collection_schedule/source/info_collectes_ca.py +145 -0
  459. package/python/vendor/waste_collection_schedule/source/innerwest_nsw_gov_au.py +196 -0
  460. package/python/vendor/waste_collection_schedule/source/innherredrenovasjon_no.py +59 -0
  461. package/python/vendor/waste_collection_schedule/source/insert_it_de.py +199 -0
  462. package/python/vendor/waste_collection_schedule/source/inverclyde_gov_uk.py +160 -0
  463. package/python/vendor/waste_collection_schedule/source/ipswich_gov_uk.py +159 -0
  464. package/python/vendor/waste_collection_schedule/source/ipswich_qld_gov_au.py +157 -0
  465. package/python/vendor/waste_collection_schedule/source/irado_nl.py +216 -0
  466. package/python/vendor/waste_collection_schedule/source/irenambiente_it.py +358 -0
  467. package/python/vendor/waste_collection_schedule/source/iris_salten_no.py +197 -0
  468. package/python/vendor/waste_collection_schedule/source/islington_gov_uk.py +66 -0
  469. package/python/vendor/waste_collection_schedule/source/ismaning_de.py +188 -0
  470. package/python/vendor/waste_collection_schedule/source/isontinambiente_it.py +164 -0
  471. package/python/vendor/waste_collection_schedule/source/ittre_be.py +107 -0
  472. package/python/vendor/waste_collection_schedule/source/jacksonville_fl_us.py +112 -0
  473. package/python/vendor/waste_collection_schedule/source/jochberg_gv_at.py +34 -0
  474. package/python/vendor/waste_collection_schedule/source/jointwastesolutions_org.py +143 -0
  475. package/python/vendor/waste_collection_schedule/source/joondalup_wa_gov_au.py +252 -0
  476. package/python/vendor/waste_collection_schedule/source/jumomind_de.py +429 -0
  477. package/python/vendor/waste_collection_schedule/source/juneavfall_se.py +64 -0
  478. package/python/vendor/waste_collection_schedule/source/junker_app.py +382 -0
  479. package/python/vendor/waste_collection_schedule/source/kaev_niederlausitz.py +93 -0
  480. package/python/vendor/waste_collection_schedule/source/kalamunda_wa_gov_au.py +231 -0
  481. package/python/vendor/waste_collection_schedule/source/kaltenleutgeben_gv_at.py +93 -0
  482. package/python/vendor/waste_collection_schedule/source/kalundborg_dk.py +107 -0
  483. package/python/vendor/waste_collection_schedule/source/kansas_city_mo_us.py +91 -0
  484. package/python/vendor/waste_collection_schedule/source/kanzian_at.py +41 -0
  485. package/python/vendor/waste_collection_schedule/source/karlsruhe_de.py +102 -0
  486. package/python/vendor/waste_collection_schedule/source/kaw_mainz_bingen_de.py +175 -0
  487. package/python/vendor/waste_collection_schedule/source/kempsey_nsw_gov_au.py +167 -0
  488. package/python/vendor/waste_collection_schedule/source/kiama_nsw_gov_au.py +45 -0
  489. package/python/vendor/waste_collection_schedule/source/kiedyodpady_pl.py +258 -0
  490. package/python/vendor/waste_collection_schedule/source/kiedysmieci_info.py +210 -0
  491. package/python/vendor/waste_collection_schedule/source/kiertokapula_fi.py +129 -0
  492. package/python/vendor/waste_collection_schedule/source/kingston_vic_gov_au.py +130 -0
  493. package/python/vendor/waste_collection_schedule/source/kirchlengern_de.py +199 -0
  494. package/python/vendor/waste_collection_schedule/source/kirklees_gov_uk.py +261 -0
  495. package/python/vendor/waste_collection_schedule/source/klosterneuburg_at.py +58 -0
  496. package/python/vendor/waste_collection_schedule/source/knowsley_gov_uk.py +212 -0
  497. package/python/vendor/waste_collection_schedule/source/knox_vic_gov_au.py +94 -0
  498. package/python/vendor/waste_collection_schedule/source/koeniz_ch.py +90 -0
  499. package/python/vendor/waste_collection_schedule/source/kolding_dk.py +103 -0
  500. package/python/vendor/waste_collection_schedule/source/kom_lub_com_pl.py +432 -0
  501. package/python/vendor/waste_collection_schedule/source/koma_pl.py +144 -0
  502. package/python/vendor/waste_collection_schedule/source/komunala_kranj_si.py +179 -0
  503. package/python/vendor/waste_collection_schedule/source/kopavogur_is.py +185 -0
  504. package/python/vendor/waste_collection_schedule/source/koppl_at.py +39 -0
  505. package/python/vendor/waste_collection_schedule/source/korneuburg_stadtservice_at.py +199 -0
  506. package/python/vendor/waste_collection_schedule/source/kositeast_sk.py +382 -0
  507. package/python/vendor/waste_collection_schedule/source/kositwest_sk.py +90 -0
  508. package/python/vendor/waste_collection_schedule/source/kreis_ploen_de.py +43 -0
  509. package/python/vendor/waste_collection_schedule/source/kriftel_de.py +92 -0
  510. package/python/vendor/waste_collection_schedule/source/kronstorf_at.py +43 -0
  511. package/python/vendor/waste_collection_schedule/source/ks_boerde_de.py +116 -0
  512. package/python/vendor/waste_collection_schedule/source/kumberg_gv_at.py +55 -0
  513. package/python/vendor/waste_collection_schedule/source/kungalv_se.py +141 -0
  514. package/python/vendor/waste_collection_schedule/source/kungsbacka_se.py +133 -0
  515. package/python/vendor/waste_collection_schedule/source/kvatg_ch.py +1186 -0
  516. package/python/vendor/waste_collection_schedule/source/kwb_goslar_de.py +65 -0
  517. package/python/vendor/waste_collection_schedule/source/kwinana_wa_gov_au.py +153 -0
  518. package/python/vendor/waste_collection_schedule/source/kwu_de.py +155 -0
  519. package/python/vendor/waste_collection_schedule/source/lacity_gov.py +115 -0
  520. package/python/vendor/waste_collection_schedule/source/lakemac_nsw_gov_au.py +39 -0
  521. package/python/vendor/waste_collection_schedule/source/lambeth_gov_uk.py +128 -0
  522. package/python/vendor/waste_collection_schedule/source/lancaster_gov_uk.py +71 -0
  523. package/python/vendor/waste_collection_schedule/source/landkreis_helmstedt_de.py +243 -0
  524. package/python/vendor/waste_collection_schedule/source/landkreis_kusel_de.py +109 -0
  525. package/python/vendor/waste_collection_schedule/source/landkreis_rhoen_grabfeld.py +112 -0
  526. package/python/vendor/waste_collection_schedule/source/landkreis_verden_de.py +162 -0
  527. package/python/vendor/waste_collection_schedule/source/landkreis_wittmund_de.py +64 -0
  528. package/python/vendor/waste_collection_schedule/source/lanecove_nsw_gov_au.py +62 -0
  529. package/python/vendor/waste_collection_schedule/source/launceston_tas_gov_au.py +115 -0
  530. package/python/vendor/waste_collection_schedule/source/laznebohdanec_cz.py +314 -0
  531. package/python/vendor/waste_collection_schedule/source/lbbd_gov_uk.py +61 -0
  532. package/python/vendor/waste_collection_schedule/source/lerum_se.py +55 -0
  533. package/python/vendor/waste_collection_schedule/source/lewisham_gov_uk.py +235 -0
  534. package/python/vendor/waste_collection_schedule/source/lichfielddc_gov_uk.py +70 -0
  535. package/python/vendor/waste_collection_schedule/source/lincoln_gov_uk.py +120 -0
  536. package/python/vendor/waste_collection_schedule/source/lindau_ch.py +82 -0
  537. package/python/vendor/waste_collection_schedule/source/lipizzanerheimat_at.py +382 -0
  538. package/python/vendor/waste_collection_schedule/source/lisburn_castlereagh_gov_uk.py +131 -0
  539. package/python/vendor/waste_collection_schedule/source/lismore_city_nsw_gov_au.py +226 -0
  540. package/python/vendor/waste_collection_schedule/source/liverpool_gov_uk.py +72 -0
  541. package/python/vendor/waste_collection_schedule/source/liverpool_nsw_gov_au.py +98 -0
  542. package/python/vendor/waste_collection_schedule/source/lk_mecklenburgische_seenplatte_de.py +60 -0
  543. package/python/vendor/waste_collection_schedule/source/lobbe_app.py +264 -0
  544. package/python/vendor/waste_collection_schedule/source/localcities_ch.py +339 -0
  545. package/python/vendor/waste_collection_schedule/source/lodz_pl.py +143 -0
  546. package/python/vendor/waste_collection_schedule/source/logan_qld_gov_au.py +78 -0
  547. package/python/vendor/waste_collection_schedule/source/lrasha_de.py +17 -0
  548. package/python/vendor/waste_collection_schedule/source/lsr_nu.py +56 -0
  549. package/python/vendor/waste_collection_schedule/source/lumire_se.py +72 -0
  550. package/python/vendor/waste_collection_schedule/source/lund_se.py +71 -0
  551. package/python/vendor/waste_collection_schedule/source/luxembourg_lu.py +191 -0
  552. package/python/vendor/waste_collection_schedule/source/mackay_qld_gov_au.py +77 -0
  553. package/python/vendor/waste_collection_schedule/source/magdeburg_de.py +127 -0
  554. package/python/vendor/waste_collection_schedule/source/mags_de.py +79 -0
  555. package/python/vendor/waste_collection_schedule/source/maidstone_gov_uk.py +136 -0
  556. package/python/vendor/waste_collection_schedule/source/maitland_nsw_gov_au.py +232 -0
  557. package/python/vendor/waste_collection_schedule/source/maldon_gov_uk.py +70 -0
  558. package/python/vendor/waste_collection_schedule/source/mamirolle_info.py +69 -0
  559. package/python/vendor/waste_collection_schedule/source/manchester_uk.py +105 -0
  560. package/python/vendor/waste_collection_schedule/source/mandurah_wa_gov_au.py +202 -0
  561. package/python/vendor/waste_collection_schedule/source/manningham_vic_gov_au.py +152 -0
  562. package/python/vendor/waste_collection_schedule/source/mansfield_gov_uk.py +52 -0
  563. package/python/vendor/waste_collection_schedule/source/mansfield_vic_gov_au.py +186 -0
  564. package/python/vendor/waste_collection_schedule/source/maribyrnong_vic_gov_au.py +134 -0
  565. package/python/vendor/waste_collection_schedule/source/maroondah_vic_gov_au.py +66 -0
  566. package/python/vendor/waste_collection_schedule/source/marysville_wa_us.py +167 -0
  567. package/python/vendor/waste_collection_schedule/source/maur_ch.py +169 -0
  568. package/python/vendor/waste_collection_schedule/source/medway_gov_uk.py +120 -0
  569. package/python/vendor/waste_collection_schedule/source/meinawb_de.py +155 -0
  570. package/python/vendor/waste_collection_schedule/source/melbourne_vic_gov_au.py +126 -0
  571. package/python/vendor/waste_collection_schedule/source/melton_gov_uk.py +79 -0
  572. package/python/vendor/waste_collection_schedule/source/melton_vic_gov_au.py +50 -0
  573. package/python/vendor/waste_collection_schedule/source/melvillecity_com_au.py +158 -0
  574. package/python/vendor/waste_collection_schedule/source/memotri_agglo_pau_fr.py +267 -0
  575. package/python/vendor/waste_collection_schedule/source/merri_bek_vic_gov_au.py +106 -0
  576. package/python/vendor/waste_collection_schedule/source/merton_gov_uk.py +80 -0
  577. package/python/vendor/waste_collection_schedule/source/mestorudna_cz.py +120 -0
  578. package/python/vendor/waste_collection_schedule/source/micheldorf_at.py +70 -0
  579. package/python/vendor/waste_collection_schedule/source/mid_devon_gov_uk.py +240 -0
  580. package/python/vendor/waste_collection_schedule/source/midandeastantrim_gov_uk.py +140 -0
  581. package/python/vendor/waste_collection_schedule/source/midcoast_nsw_gov_au.py +39 -0
  582. package/python/vendor/waste_collection_schedule/source/midlothian_gov_uk.py +157 -0
  583. package/python/vendor/waste_collection_schedule/source/midsussex_gov_uk.py +208 -0
  584. package/python/vendor/waste_collection_schedule/source/midulstercouncil_org.py +131 -0
  585. package/python/vendor/waste_collection_schedule/source/midwestern_nsw_gov_au.py +192 -0
  586. package/python/vendor/waste_collection_schedule/source/mijnafvalwijzer_nl.py +119 -0
  587. package/python/vendor/waste_collection_schedule/source/mildura_vic_gov_au.py +54 -0
  588. package/python/vendor/waste_collection_schedule/source/miljoteknik_se.py +98 -0
  589. package/python/vendor/waste_collection_schedule/source/millvalleyrefuse_com.py +144 -0
  590. package/python/vendor/waste_collection_schedule/source/mils_tirol_at.py +79 -0
  591. package/python/vendor/waste_collection_schedule/source/milton_keynes_gov_uk.py +110 -0
  592. package/python/vendor/waste_collection_schedule/source/minrenovasjon_no.py +122 -0
  593. package/python/vendor/waste_collection_schedule/source/mirabel_ca.py +152 -0
  594. package/python/vendor/waste_collection_schedule/source/mitchellshire_vic_gov_au.py +70 -0
  595. package/python/vendor/waste_collection_schedule/source/mohu_bp_hu.py +194 -0
  596. package/python/vendor/waste_collection_schedule/source/moje_odpady_pl.py +228 -0
  597. package/python/vendor/waste_collection_schedule/source/mojiodpadki_si.py +106 -0
  598. package/python/vendor/waste_collection_schedule/source/mole_valley_gov_uk.py +154 -0
  599. package/python/vendor/waste_collection_schedule/source/molndal_se.py +39 -0
  600. package/python/vendor/waste_collection_schedule/source/monaloga_de.py +117 -0
  601. package/python/vendor/waste_collection_schedule/source/monash_vic_gov_au.py +55 -0
  602. package/python/vendor/waste_collection_schedule/source/monheim_de.py +120 -0
  603. package/python/vendor/waste_collection_schedule/source/monmouthshire_gov_uk.py +180 -0
  604. package/python/vendor/waste_collection_schedule/source/montecospa_it.py +123 -0
  605. package/python/vendor/waste_collection_schedule/source/montreal_ca.py +477 -0
  606. package/python/vendor/waste_collection_schedule/source/montri_fr.py +267 -0
  607. package/python/vendor/waste_collection_schedule/source/moonee_valley_vic_gov_au.py +119 -0
  608. package/python/vendor/waste_collection_schedule/source/moorabool_vic_gov_au.py +55 -0
  609. package/python/vendor/waste_collection_schedule/source/moray_gov_uk.py +69 -0
  610. package/python/vendor/waste_collection_schedule/source/moretonbay_qld_gov_au.py +198 -0
  611. package/python/vendor/waste_collection_schedule/source/mornpen_vic_gov_au.py +41 -0
  612. package/python/vendor/waste_collection_schedule/source/mosman_nsw_gov_au.py +72 -0
  613. package/python/vendor/waste_collection_schedule/source/mount_alexander_vic_gov_au.py +127 -0
  614. package/python/vendor/waste_collection_schedule/source/movar_no.py +125 -0
  615. package/python/vendor/waste_collection_schedule/source/moyne_vic_gov_au.py +33 -0
  616. package/python/vendor/waste_collection_schedule/source/mpgk_com_pl.py +51 -0
  617. package/python/vendor/waste_collection_schedule/source/mpo_krakow_pl.py +288 -0
  618. package/python/vendor/waste_collection_schedule/source/mrcjoliette_qc_ca.py +139 -0
  619. package/python/vendor/waste_collection_schedule/source/mrsc_vic_gov_au.py +35 -0
  620. package/python/vendor/waste_collection_schedule/source/msva_se.py +159 -0
  621. package/python/vendor/waste_collection_schedule/source/muehlenkreis_de.py +62 -0
  622. package/python/vendor/waste_collection_schedule/source/muellabfuhr_de.py +157 -0
  623. package/python/vendor/waste_collection_schedule/source/muellmann_app_de.py +329 -0
  624. package/python/vendor/waste_collection_schedule/source/muellmax_de.py +302 -0
  625. package/python/vendor/waste_collection_schedule/source/muenchenstein_ch.py +98 -0
  626. package/python/vendor/waste_collection_schedule/source/mulhouse_alsace_fr.py +303 -0
  627. package/python/vendor/waste_collection_schedule/source/multiple.py +143 -0
  628. package/python/vendor/waste_collection_schedule/source/mundaring_wa_gov_au.py +109 -0
  629. package/python/vendor/waste_collection_schedule/source/municipium_it.py +244 -0
  630. package/python/vendor/waste_collection_schedule/source/murray_wa_gov_au.py +85 -0
  631. package/python/vendor/waste_collection_schedule/source/mustankorkea_fi.py +199 -0
  632. package/python/vendor/waste_collection_schedule/source/muswellbrook_nsw_gov_au.py +93 -0
  633. package/python/vendor/waste_collection_schedule/source/muttenz_ch.py +306 -0
  634. package/python/vendor/waste_collection_schedule/source/myutility_winnipeg_ca.py +74 -0
  635. package/python/vendor/waste_collection_schedule/source/mywastewatcher_de.py +446 -0
  636. package/python/vendor/waste_collection_schedule/source/mzv_rotenburg_bebra_de.py +170 -0
  637. package/python/vendor/waste_collection_schedule/source/mzvhegau_de.py +93 -0
  638. package/python/vendor/waste_collection_schedule/source/napier_govt_nz.py +166 -0
  639. package/python/vendor/waste_collection_schedule/source/narab_se.py +465 -0
  640. package/python/vendor/waste_collection_schedule/source/nawma_sa_gov_au.py +117 -0
  641. package/python/vendor/waste_collection_schedule/source/neath_port_talbot_gov_uk.py +236 -0
  642. package/python/vendor/waste_collection_schedule/source/nelincs_gov_uk.py +61 -0
  643. package/python/vendor/waste_collection_schedule/source/nemaffaldsservice_kk_dk.py +147 -0
  644. package/python/vendor/waste_collection_schedule/source/nerdbridge_de.py +1262 -0
  645. package/python/vendor/waste_collection_schedule/source/neu_ulm_de.py +73 -0
  646. package/python/vendor/waste_collection_schedule/source/newark_sherwooddc_gov_uk.py +90 -0
  647. package/python/vendor/waste_collection_schedule/source/newcastle_gov_uk.py +82 -0
  648. package/python/vendor/waste_collection_schedule/source/newcastle_nsw_gov_au.py +147 -0
  649. package/python/vendor/waste_collection_schedule/source/newcastle_staffs_gov_uk.py +86 -0
  650. package/python/vendor/waste_collection_schedule/source/newforest_gov_uk.py +294 -0
  651. package/python/vendor/waste_collection_schedule/source/newham_gov_uk.py +102 -0
  652. package/python/vendor/waste_collection_schedule/source/nillumbik_vic_gov_au.py +32 -0
  653. package/python/vendor/waste_collection_schedule/source/north_ayrshire_gov_uk.py +67 -0
  654. package/python/vendor/waste_collection_schedule/source/north_kesteven_org_uk.py +66 -0
  655. package/python/vendor/waste_collection_schedule/source/north_norfolk_gov_uk.py +154 -0
  656. package/python/vendor/waste_collection_schedule/source/northernbeaches_nsw_gov_au.py +185 -0
  657. package/python/vendor/waste_collection_schedule/source/northherts_gov_uk.py +73 -0
  658. package/python/vendor/waste_collection_schedule/source/northlanarkshire_gov_uk.py +82 -0
  659. package/python/vendor/waste_collection_schedule/source/northlincs_gov_uk.py +53 -0
  660. package/python/vendor/waste_collection_schedule/source/northnorthants_gov_uk.py +97 -0
  661. package/python/vendor/waste_collection_schedule/source/northumberland_gov_uk.py +230 -0
  662. package/python/vendor/waste_collection_schedule/source/northville_township_mi_us.py +90 -0
  663. package/python/vendor/waste_collection_schedule/source/northyorks_craven_gov_uk.py +70 -0
  664. package/python/vendor/waste_collection_schedule/source/northyorks_hambleton_gov_uk.py +98 -0
  665. package/python/vendor/waste_collection_schedule/source/northyorks_harrogate_gov_uk.py +62 -0
  666. package/python/vendor/waste_collection_schedule/source/northyorks_ryedale_gov_uk.py +73 -0
  667. package/python/vendor/waste_collection_schedule/source/northyorks_scarborough_gov_uk.py +67 -0
  668. package/python/vendor/waste_collection_schedule/source/northyorks_selby_gov_uk.py +67 -0
  669. package/python/vendor/waste_collection_schedule/source/norwich_gov_uk.py +299 -0
  670. package/python/vendor/waste_collection_schedule/source/nottingham_city_gov_uk.py +65 -0
  671. package/python/vendor/waste_collection_schedule/source/npdc_govt_nz.py +217 -0
  672. package/python/vendor/waste_collection_schedule/source/nsomerset_gov_uk.py +87 -0
  673. package/python/vendor/waste_collection_schedule/source/nsr_se.py +148 -0
  674. package/python/vendor/waste_collection_schedule/source/nuernberger_land_de.py +53 -0
  675. package/python/vendor/waste_collection_schedule/source/nvaa_se.py +130 -0
  676. package/python/vendor/waste_collection_schedule/source/nwleics_gov_uk.py +69 -0
  677. package/python/vendor/waste_collection_schedule/source/nwrrr_com_au.py +202 -0
  678. package/python/vendor/waste_collection_schedule/source/nyc_gov.py +65 -0
  679. package/python/vendor/waste_collection_schedule/source/oadby_wigston_gov_uk.py +119 -0
  680. package/python/vendor/waste_collection_schedule/source/obdach_at.py +20 -0
  681. package/python/vendor/waste_collection_schedule/source/oberndorf_schwanenstadt_at.py +71 -0
  682. package/python/vendor/waste_collection_schedule/source/ocarcims_ocfl_net.py +189 -0
  683. package/python/vendor/waste_collection_schedule/source/odenserenovation_dk.py +62 -0
  684. package/python/vendor/waste_collection_schedule/source/offenbach_de.py +27 -0
  685. package/python/vendor/waste_collection_schedule/source/okc_gov.py +395 -0
  686. package/python/vendor/waste_collection_schedule/source/okrab_se.py +41 -0
  687. package/python/vendor/waste_collection_schedule/source/oldham_gov_uk.py +64 -0
  688. package/python/vendor/waste_collection_schedule/source/olo_sk.py +365 -0
  689. package/python/vendor/waste_collection_schedule/source/omrin_nl.py +231 -0
  690. package/python/vendor/waste_collection_schedule/source/onkaparingacity_com.py +39 -0
  691. package/python/vendor/waste_collection_schedule/source/opendata_bordeauxmetropole_fr.py +336 -0
  692. package/python/vendor/waste_collection_schedule/source/orange_nsw_gov_au.py +199 -0
  693. package/python/vendor/waste_collection_schedule/source/ort_im_innkreis_at.py +27 -0
  694. package/python/vendor/waste_collection_schedule/source/oslokommune_no.py +144 -0
  695. package/python/vendor/waste_collection_schedule/source/ostersund_se.py +148 -0
  696. package/python/vendor/waste_collection_schedule/source/ostprignitz_ruppin_de.py +58 -0
  697. package/python/vendor/waste_collection_schedule/source/oxford_gov_uk.py +104 -0
  698. package/python/vendor/waste_collection_schedule/source/ozoostrava_cz.py +80 -0
  699. package/python/vendor/waste_collection_schedule/source/palmcoast_fl_gov.py +120 -0
  700. package/python/vendor/waste_collection_schedule/source/panda_ie.py +93 -0
  701. package/python/vendor/waste_collection_schedule/source/partille_se.py +76 -0
  702. package/python/vendor/waste_collection_schedule/source/pembrokeshire_gov_uk.py +88 -0
  703. package/python/vendor/waste_collection_schedule/source/pendle_gov_uk.py +473 -0
  704. package/python/vendor/waste_collection_schedule/source/pernitz_gv_at.py +148 -0
  705. package/python/vendor/waste_collection_schedule/source/peterborough_gov_uk.py +56 -0
  706. package/python/vendor/waste_collection_schedule/source/pgh_st.py +78 -0
  707. package/python/vendor/waste_collection_schedule/source/phila_gov.py +160 -0
  708. package/python/vendor/waste_collection_schedule/source/piberbach_ooe_gv_at.py +31 -0
  709. package/python/vendor/waste_collection_schedule/source/pireva_se.py +120 -0
  710. package/python/vendor/waste_collection_schedule/source/pkc_gov_uk.py +154 -0
  711. package/python/vendor/waste_collection_schedule/source/plano_gov.py +285 -0
  712. package/python/vendor/waste_collection_schedule/source/plymouth_gov_uk.py +130 -0
  713. package/python/vendor/waste_collection_schedule/source/pointe_claire_qc_ca.py +80 -0
  714. package/python/vendor/waste_collection_schedule/source/popuvky_cz.py +174 -0
  715. package/python/vendor/waste_collection_schedule/source/poriruacity_govt_nz.py +138 -0
  716. package/python/vendor/waste_collection_schedule/source/portenf_sa_gov_au.py +224 -0
  717. package/python/vendor/waste_collection_schedule/source/portphillip_vic_gov_au.py +107 -0
  718. package/python/vendor/waste_collection_schedule/source/portsmouth_gov_uk.py +78 -0
  719. package/python/vendor/waste_collection_schedule/source/portstephens_nsw_gov_au.py +136 -0
  720. package/python/vendor/waste_collection_schedule/source/potsdam_de.py +330 -0
  721. package/python/vendor/waste_collection_schedule/source/powys_gov_uk.py +186 -0
  722. package/python/vendor/waste_collection_schedule/source/poznan_pl.py +102 -0
  723. package/python/vendor/waste_collection_schedule/source/predmerice_nad_labem_cz.py +69 -0
  724. package/python/vendor/waste_collection_schedule/source/preston_gov_uk.py +211 -0
  725. package/python/vendor/waste_collection_schedule/source/prezero_bielsko_pl.py +217 -0
  726. package/python/vendor/waste_collection_schedule/source/prince_georges_county_md_us.py +149 -0
  727. package/python/vendor/waste_collection_schedule/source/prodnik_si.py +114 -0
  728. package/python/vendor/waste_collection_schedule/source/pronatura_bydgoszcz_pl.py +120 -0
  729. package/python/vendor/waste_collection_schedule/source/publidata_ca.py +476 -0
  730. package/python/vendor/waste_collection_schedule/source/publidata_fr.py +798 -0
  731. package/python/vendor/waste_collection_schedule/source/puchbeihallein_gv_at.py +74 -0
  732. package/python/vendor/waste_collection_schedule/source/pup_si.py +114 -0
  733. package/python/vendor/waste_collection_schedule/source/rambo_se.py +91 -0
  734. package/python/vendor/waste_collection_schedule/source/rapperswil_be_ch.py +57 -0
  735. package/python/vendor/waste_collection_schedule/source/rbwm_gov_uk.py +76 -0
  736. package/python/vendor/waste_collection_schedule/source/rctcbc_gov_uk.py +96 -0
  737. package/python/vendor/waste_collection_schedule/source/rd4_nl.py +93 -0
  738. package/python/vendor/waste_collection_schedule/source/reading_gov_uk.py +97 -0
  739. package/python/vendor/waste_collection_schedule/source/real_luzern_ch.py +116 -0
  740. package/python/vendor/waste_collection_schedule/source/recycleapp_be.py +141 -0
  741. package/python/vendor/waste_collection_schedule/source/recyclecoach_com.py +733 -0
  742. package/python/vendor/waste_collection_schedule/source/recyclesmart_com.py +62 -0
  743. package/python/vendor/waste_collection_schedule/source/red_bank_tn_us.py +313 -0
  744. package/python/vendor/waste_collection_schedule/source/redbridge_gov_uk.py +148 -0
  745. package/python/vendor/waste_collection_schedule/source/redland_qld_gov_au.py +148 -0
  746. package/python/vendor/waste_collection_schedule/source/regioentsorgung_de.py +248 -0
  747. package/python/vendor/waste_collection_schedule/source/reigatebanstead_gov_uk.py +111 -0
  748. package/python/vendor/waste_collection_schedule/source/reinach_bl_ch.py +114 -0
  749. package/python/vendor/waste_collection_schedule/source/remidt_no.py +54 -0
  750. package/python/vendor/waste_collection_schedule/source/renfrewshire_gov_uk.py +73 -0
  751. package/python/vendor/waste_collection_schedule/source/renhallningen_kristianstad_se.py +65 -0
  752. package/python/vendor/waste_collection_schedule/source/renodjurs_dk.py +98 -0
  753. package/python/vendor/waste_collection_schedule/source/renosyd_dk.py +58 -0
  754. package/python/vendor/waste_collection_schedule/source/renoweb_dk.py +179 -0
  755. package/python/vendor/waste_collection_schedule/source/repentigny_ca.py +128 -0
  756. package/python/vendor/waste_collection_schedule/source/republicservices_com.py +275 -0
  757. package/python/vendor/waste_collection_schedule/source/reso_gmbh_de.py +77 -0
  758. package/python/vendor/waste_collection_schedule/source/ressourceindsamling_dk.py +143 -0
  759. package/python/vendor/waste_collection_schedule/source/rfd_no.py +277 -0
  760. package/python/vendor/waste_collection_schedule/source/rh_entsorgung_de.py +40 -0
  761. package/python/vendor/waste_collection_schedule/source/richmond_gov_uk.py +106 -0
  762. package/python/vendor/waste_collection_schedule/source/richmondshire_gov_uk.py +70 -0
  763. package/python/vendor/waste_collection_schedule/source/rir_no.py +180 -0
  764. package/python/vendor/waste_collection_schedule/source/ritl_ca.py +308 -0
  765. package/python/vendor/waste_collection_schedule/source/rmrlac_qc_ca.py +208 -0
  766. package/python/vendor/waste_collection_schedule/source/rochdale_gov_uk.py +136 -0
  767. package/python/vendor/waste_collection_schedule/source/rochester_ny_us.py +182 -0
  768. package/python/vendor/waste_collection_schedule/source/rochford_gov_uk.py +160 -0
  769. package/python/vendor/waste_collection_schedule/source/rockingham_wa_gov_au.py +207 -0
  770. package/python/vendor/waste_collection_schedule/source/rohrbach_lafnitz_at.py +36 -0
  771. package/python/vendor/waste_collection_schedule/source/rosknroll_fi.py +110 -0
  772. package/python/vendor/waste_collection_schedule/source/roslagsvatten_se.py +183 -0
  773. package/python/vendor/waste_collection_schedule/source/rother_gov_uk.py +112 -0
  774. package/python/vendor/waste_collection_schedule/source/rotorua_lakes_council_nz.py +126 -0
  775. package/python/vendor/waste_collection_schedule/source/roundlookup_uk.py +136 -0
  776. package/python/vendor/waste_collection_schedule/source/roundrocktexas_gov.py +103 -0
  777. package/python/vendor/waste_collection_schedule/source/rova_nl.py +127 -0
  778. package/python/vendor/waste_collection_schedule/source/royalgreenwich_gov_uk.py +253 -0
  779. package/python/vendor/waste_collection_schedule/source/rsag_de.py +146 -0
  780. package/python/vendor/waste_collection_schedule/source/rueil_malmaison_fr.py +136 -0
  781. package/python/vendor/waste_collection_schedule/source/rugby_gov_uk.py +39 -0
  782. package/python/vendor/waste_collection_schedule/source/runnymede_gov_uk.py +60 -0
  783. package/python/vendor/waste_collection_schedule/source/rushcliffe_gov_uk.py +114 -0
  784. package/python/vendor/waste_collection_schedule/source/rushmoor_gov_uk.py +54 -0
  785. package/python/vendor/waste_collection_schedule/source/rv_de.py +121 -0
  786. package/python/vendor/waste_collection_schedule/source/rybnik_pl.py +623 -0
  787. package/python/vendor/waste_collection_schedule/source/ryde_nsw_gov_au.py +68 -0
  788. package/python/vendor/waste_collection_schedule/source/saalfelden_at.py +78 -0
  789. package/python/vendor/waste_collection_schedule/source/saguenay_ca.py +132 -0
  790. package/python/vendor/waste_collection_schedule/source/salford_gov_uk.py +59 -0
  791. package/python/vendor/waste_collection_schedule/source/samiljo_se.py +218 -0
  792. package/python/vendor/waste_collection_schedule/source/sammelkalender_ch.py +316 -0
  793. package/python/vendor/waste_collection_schedule/source/sanantonio_gov.py +175 -0
  794. package/python/vendor/waste_collection_schedule/source/sandiego_gov.py +62 -0
  795. package/python/vendor/waste_collection_schedule/source/sandnes_no.py +81 -0
  796. package/python/vendor/waste_collection_schedule/source/sandwell_gov_uk.py +144 -0
  797. package/python/vendor/waste_collection_schedule/source/saver_nl.py +158 -0
  798. package/python/vendor/waste_collection_schedule/source/scambs_gov_uk.py +84 -0
  799. package/python/vendor/waste_collection_schedule/source/scenicrim_qld_gov_au.py +184 -0
  800. package/python/vendor/waste_collection_schedule/source/schaerding_ooe_gv_at.py +76 -0
  801. package/python/vendor/waste_collection_schedule/source/scheibbs_umweltverbaende_at.py +59 -0
  802. package/python/vendor/waste_collection_schedule/source/schlierbach_at.py +68 -0
  803. package/python/vendor/waste_collection_schedule/source/schweinfurt_de.py +101 -0
  804. package/python/vendor/waste_collection_schedule/source/scotborders_gov_uk.py +136 -0
  805. package/python/vendor/waste_collection_schedule/source/seab_biella_it.py +152 -0
  806. package/python/vendor/waste_collection_schedule/source/seattle_gov.py +146 -0
  807. package/python/vendor/waste_collection_schedule/source/sector27_de.py +162 -0
  808. package/python/vendor/waste_collection_schedule/source/sefton_gov_uk.py +121 -0
  809. package/python/vendor/waste_collection_schedule/source/selwyn_govt_nz.py +198 -0
  810. package/python/vendor/waste_collection_schedule/source/sepan_remondis_pl.py +80 -0
  811. package/python/vendor/waste_collection_schedule/source/sesaeste_it.py +268 -0
  812. package/python/vendor/waste_collection_schedule/source/seuzach_ch.py +225 -0
  813. package/python/vendor/waste_collection_schedule/source/sevenoaks_gov_uk.py +166 -0
  814. package/python/vendor/waste_collection_schedule/source/shawinigan_ca.py +330 -0
  815. package/python/vendor/waste_collection_schedule/source/sheffield_gov_uk.py +77 -0
  816. package/python/vendor/waste_collection_schedule/source/shellharbourwaste_com_au.py +62 -0
  817. package/python/vendor/waste_collection_schedule/source/shoalhaven_nsw_gov_au.py +113 -0
  818. package/python/vendor/waste_collection_schedule/source/sholland_gov_uk.py +106 -0
  819. package/python/vendor/waste_collection_schedule/source/shropshire_gov_uk.py +70 -0
  820. package/python/vendor/waste_collection_schedule/source/sica_lu.py +138 -0
  821. package/python/vendor/waste_collection_schedule/source/sictom_lons_le_saunier_fr.py +181 -0
  822. package/python/vendor/waste_collection_schedule/source/sictomvds_com.py +171 -0
  823. package/python/vendor/waste_collection_schedule/source/sidec_lu.py +126 -0
  824. package/python/vendor/waste_collection_schedule/source/silea_it.py +112 -0
  825. package/python/vendor/waste_collection_schedule/source/simbio_si.py +72 -0
  826. package/python/vendor/waste_collection_schedule/source/sims_pl.py +426 -0
  827. package/python/vendor/waste_collection_schedule/source/siokom_hu.py +450 -0
  828. package/python/vendor/waste_collection_schedule/source/siunet_it.py +450 -0
  829. package/python/vendor/waste_collection_schedule/source/sivom_com.py +275 -0
  830. package/python/vendor/waste_collection_schedule/source/sivom_rivedroite_fr.py +108 -0
  831. package/python/vendor/waste_collection_schedule/source/sjobo_se.py +143 -0
  832. package/python/vendor/waste_collection_schedule/source/sjshire_wa_gov_au.py +140 -0
  833. package/python/vendor/waste_collection_schedule/source/skaraborg_se.py +70 -0
  834. package/python/vendor/waste_collection_schedule/source/slough_gov_uk.py +210 -0
  835. package/python/vendor/waste_collection_schedule/source/smiecioplan_pl.py +223 -0
  836. package/python/vendor/waste_collection_schedule/source/smolo_cz.py +566 -0
  837. package/python/vendor/waste_collection_schedule/source/snaga_mb_si.py +72 -0
  838. package/python/vendor/waste_collection_schedule/source/solihull_gov_uk.py +89 -0
  839. package/python/vendor/waste_collection_schedule/source/south_ayrshire_gov_uk.py +135 -0
  840. package/python/vendor/waste_collection_schedule/source/south_norfolk_and_broadland_gov_uk.py +352 -0
  841. package/python/vendor/waste_collection_schedule/source/southampton_gov_uk.py +81 -0
  842. package/python/vendor/waste_collection_schedule/source/southderbyshire_gov_uk.py +65 -0
  843. package/python/vendor/waste_collection_schedule/source/southend_gov_uk.py +69 -0
  844. package/python/vendor/waste_collection_schedule/source/southglos_gov_uk.py +59 -0
  845. package/python/vendor/waste_collection_schedule/source/southkesteven_gov_uk.py +114 -0
  846. package/python/vendor/waste_collection_schedule/source/southlanarkshire_gov_uk.py +185 -0
  847. package/python/vendor/waste_collection_schedule/source/southperth_wa_gov_au.py +120 -0
  848. package/python/vendor/waste_collection_schedule/source/southribble_gov_uk.py +118 -0
  849. package/python/vendor/waste_collection_schedule/source/southtyneside_gov_uk.py +83 -0
  850. package/python/vendor/waste_collection_schedule/source/southwark_gov_uk.py +84 -0
  851. package/python/vendor/waste_collection_schedule/source/spelthorne_gov_uk.py +169 -0
  852. package/python/vendor/waste_collection_schedule/source/sperrmuell_erlensee_de.py +111 -0
  853. package/python/vendor/waste_collection_schedule/source/srvatervinning_se.py +50 -0
  854. package/python/vendor/waste_collection_schedule/source/ssam_se.py +22 -0
  855. package/python/vendor/waste_collection_schedule/source/sstaffs_gov_uk.py +88 -0
  856. package/python/vendor/waste_collection_schedule/source/st_helens_gov_uk.py +204 -0
  857. package/python/vendor/waste_collection_schedule/source/st_margarethen_salzburg_at.py +35 -0
  858. package/python/vendor/waste_collection_schedule/source/stadt_bamberg_de.py +123 -0
  859. package/python/vendor/waste_collection_schedule/source/stadt_kerpen_de.py +55 -0
  860. package/python/vendor/waste_collection_schedule/source/stadtreinigung_dresden_de.py +75 -0
  861. package/python/vendor/waste_collection_schedule/source/stadtreinigung_giessen_de.py +227 -0
  862. package/python/vendor/waste_collection_schedule/source/stadtreinigung_hamburg.py +32 -0
  863. package/python/vendor/waste_collection_schedule/source/stadtreinigung_leipzig_de.py +68 -0
  864. package/python/vendor/waste_collection_schedule/source/stadtservice_bruehl_de.py +80 -0
  865. package/python/vendor/waste_collection_schedule/source/stadtwerke_roesrath_de.py +54 -0
  866. package/python/vendor/waste_collection_schedule/source/stadtwerke_singen_de.py +268 -0
  867. package/python/vendor/waste_collection_schedule/source/staedteservice_de.py +146 -0
  868. package/python/vendor/waste_collection_schedule/source/staffordbc_gov_uk.py +52 -0
  869. package/python/vendor/waste_collection_schedule/source/staffsmoorlands_gov_uk.py +166 -0
  870. package/python/vendor/waste_collection_schedule/source/stalbans_gov_uk.py +75 -0
  871. package/python/vendor/waste_collection_schedule/source/stamford_ct_us.py +251 -0
  872. package/python/vendor/waste_collection_schedule/source/static.py +285 -0
  873. package/python/vendor/waste_collection_schedule/source/stavanger_no.py +70 -0
  874. package/python/vendor/waste_collection_schedule/source/stevenage_gov_uk.py +81 -0
  875. package/python/vendor/waste_collection_schedule/source/steyr_at.py +70 -0
  876. package/python/vendor/waste_collection_schedule/source/stirling_gov_uk.py +117 -0
  877. package/python/vendor/waste_collection_schedule/source/stirling_wa_gov_au.py +127 -0
  878. package/python/vendor/waste_collection_schedule/source/stkh_hu.py +254 -0
  879. package/python/vendor/waste_collection_schedule/source/stockport_gov_uk.py +92 -0
  880. package/python/vendor/waste_collection_schedule/source/stockton_gov_uk.py +164 -0
  881. package/python/vendor/waste_collection_schedule/source/stoke_gov_uk.py +71 -0
  882. package/python/vendor/waste_collection_schedule/source/stonnington_vic_gov_au.py +35 -0
  883. package/python/vendor/waste_collection_schedule/source/straatbeeld_online.py +155 -0
  884. package/python/vendor/waste_collection_schedule/source/stratford_gov_uk.py +73 -0
  885. package/python/vendor/waste_collection_schedule/source/strathfield_nsw_gov_au.py +84 -0
  886. package/python/vendor/waste_collection_schedule/source/stroud_gov_uk.py +174 -0
  887. package/python/vendor/waste_collection_schedule/source/stuttgart_de.py +129 -0
  888. package/python/vendor/waste_collection_schedule/source/subiaco_wa_gov_au.py +106 -0
  889. package/python/vendor/waste_collection_schedule/source/sudestavenir_fr.py +474 -0
  890. package/python/vendor/waste_collection_schedule/source/suibr_ch.py +330 -0
  891. package/python/vendor/waste_collection_schedule/source/sumavfall_no.py +212 -0
  892. package/python/vendor/waste_collection_schedule/source/sunbury_ohio_org.py +80 -0
  893. package/python/vendor/waste_collection_schedule/source/sunderland_gov_uk.py +806 -0
  894. package/python/vendor/waste_collection_schedule/source/sunshinecoast_qld_gov_au.py +210 -0
  895. package/python/vendor/waste_collection_schedule/source/surf_coast_vic_gov_au.py +198 -0
  896. package/python/vendor/waste_collection_schedule/source/sutherlandshire_nsw_gov_au.py +219 -0
  897. package/python/vendor/waste_collection_schedule/source/sutton_gov_uk.py +52 -0
  898. package/python/vendor/waste_collection_schedule/source/swale_gov_uk.py +273 -0
  899. package/python/vendor/waste_collection_schedule/source/swan_wa_gov_au.py +100 -0
  900. package/python/vendor/waste_collection_schedule/source/swansea_gov_uk.py +109 -0
  901. package/python/vendor/waste_collection_schedule/source/swindon_gov_uk.py +72 -0
  902. package/python/vendor/waste_collection_schedule/source/sysav_se.py +59 -0
  903. package/python/vendor/waste_collection_schedule/source/talgov_com.py +179 -0
  904. package/python/vendor/waste_collection_schedule/source/tameside_gov_uk.py +83 -0
  905. package/python/vendor/waste_collection_schedule/source/tandridge_gov_uk.py +174 -0
  906. package/python/vendor/waste_collection_schedule/source/taupodc_govt_nz.py +154 -0
  907. package/python/vendor/waste_collection_schedule/source/tauranga_govt_nz.py +162 -0
  908. package/python/vendor/waste_collection_schedule/source/tbv_velbert_de.py +93 -0
  909. package/python/vendor/waste_collection_schedule/source/team_orange_de.py +290 -0
  910. package/python/vendor/waste_collection_schedule/source/teatreegully_sa_gov_au.py +189 -0
  911. package/python/vendor/waste_collection_schedule/source/teignbridge_gov_uk.py +88 -0
  912. package/python/vendor/waste_collection_schedule/source/telford_gov_uk.py +122 -0
  913. package/python/vendor/waste_collection_schedule/source/telge_se.py +117 -0
  914. package/python/vendor/waste_collection_schedule/source/tendring_gov_uk.py +118 -0
  915. package/python/vendor/waste_collection_schedule/source/terrestouloises_com.py +294 -0
  916. package/python/vendor/waste_collection_schedule/source/tewkesbury_gov_uk.py +80 -0
  917. package/python/vendor/waste_collection_schedule/source/thanet_gov_uk.py +116 -0
  918. package/python/vendor/waste_collection_schedule/source/thanet_gov_uk.py.bak +104 -0
  919. package/python/vendor/waste_collection_schedule/source/thehills_nsw_gov_au.py +109 -0
  920. package/python/vendor/waste_collection_schedule/source/thurrock_gov_uk.py +188 -0
  921. package/python/vendor/waste_collection_schedule/source/timra_se.py +140 -0
  922. package/python/vendor/waste_collection_schedule/source/tkeliai_lt.py +56 -0
  923. package/python/vendor/waste_collection_schedule/source/tmbc_gov_uk.py +97 -0
  924. package/python/vendor/waste_collection_schedule/source/tonnenleerung_de.py +82 -0
  925. package/python/vendor/waste_collection_schedule/source/tonnenticker_pro_de.py +106 -0
  926. package/python/vendor/waste_collection_schedule/source/toogoodtowaste_co_nz.py +96 -0
  927. package/python/vendor/waste_collection_schedule/source/torbay_council_gov_uk.py +98 -0
  928. package/python/vendor/waste_collection_schedule/source/toronto_ca.py +150 -0
  929. package/python/vendor/waste_collection_schedule/source/torridge_gov_uk.py +154 -0
  930. package/python/vendor/waste_collection_schedule/source/toulouse_metropole_fr.py +219 -0
  931. package/python/vendor/waste_collection_schedule/source/tower_hamlets_gov_uk.py +200 -0
  932. package/python/vendor/waste_collection_schedule/source/townsville_qld_gov_au.py +46 -0
  933. package/python/vendor/waste_collection_schedule/source/tsceskybrod_cz.py +220 -0
  934. package/python/vendor/waste_collection_schedule/source/tunbridgewells_gov_uk.py +77 -0
  935. package/python/vendor/waste_collection_schedule/source/ubzzw_de.py +177 -0
  936. package/python/vendor/waste_collection_schedule/source/uddevallaenergi_se.py +114 -0
  937. package/python/vendor/waste_collection_schedule/source/ukbcd.py +49 -0
  938. package/python/vendor/waste_collection_schedule/source/umweltverbaende_at.py +995 -0
  939. package/python/vendor/waste_collection_schedule/source/unley_sa_gov_au.py +80 -0
  940. package/python/vendor/waste_collection_schedule/source/uppsalavatten_se.py +35 -0
  941. package/python/vendor/waste_collection_schedule/source/uttlesford_gov_uk.py +97 -0
  942. package/python/vendor/waste_collection_schedule/source/valeofglamorgan_gov_uk.py +123 -0
  943. package/python/vendor/waste_collection_schedule/source/valorlux_lu.py +94 -0
  944. package/python/vendor/waste_collection_schedule/source/varmdo_se.py +97 -0
  945. package/python/vendor/waste_collection_schedule/source/vasyd_se.py +53 -0
  946. package/python/vendor/waste_collection_schedule/source/vattenmiljoresurs_se.py +250 -0
  947. package/python/vendor/waste_collection_schedule/source/verl_de.py +102 -0
  948. package/python/vendor/waste_collection_schedule/source/vestfor_dk.py +77 -0
  949. package/python/vendor/waste_collection_schedule/source/vevg_karlsburg_de.py +152 -0
  950. package/python/vendor/waste_collection_schedule/source/victoriapark_wa_gov_au.py +115 -0
  951. package/python/vendor/waste_collection_schedule/source/villagebonconseil_ca.py +86 -0
  952. package/python/vendor/waste_collection_schedule/source/ville_quebec_qc_ca.py +267 -0
  953. package/python/vendor/waste_collection_schedule/source/villesblg_ca.py +92 -0
  954. package/python/vendor/waste_collection_schedule/source/vincent_wa_gov_au.py +207 -0
  955. package/python/vendor/waste_collection_schedule/source/vivab_se.py +234 -0
  956. package/python/vendor/waste_collection_schedule/source/vmab_se.py +91 -0
  957. package/python/vendor/waste_collection_schedule/source/vmeab_se.py +115 -0
  958. package/python/vendor/waste_collection_schedule/source/vogeldisposal_com.py +225 -0
  959. package/python/vendor/waste_collection_schedule/source/waikato_district_council_govt_nz.py +154 -0
  960. package/python/vendor/waste_collection_schedule/source/waipa_nz.py +78 -0
  961. package/python/vendor/waste_collection_schedule/source/wakefield_gov_uk.py +71 -0
  962. package/python/vendor/waste_collection_schedule/source/walsall_gov_uk.py +74 -0
  963. package/python/vendor/waste_collection_schedule/source/walthamforest_gov_uk.py +107 -0
  964. package/python/vendor/waste_collection_schedule/source/wandsworth_gov_uk.py +169 -0
  965. package/python/vendor/waste_collection_schedule/source/wangaratta_vic_gov_au.py +35 -0
  966. package/python/vendor/waste_collection_schedule/source/wanneroo_wa_gov_au.py +428 -0
  967. package/python/vendor/waste_collection_schedule/source/warrington_gov_uk.py +92 -0
  968. package/python/vendor/waste_collection_schedule/source/warrnambool_vic_gov_au.py +116 -0
  969. package/python/vendor/waste_collection_schedule/source/warszawa19115_pl.py +145 -0
  970. package/python/vendor/waste_collection_schedule/source/warwickdc_gov_uk.py +58 -0
  971. package/python/vendor/waste_collection_schedule/source/was_wolfsburg_de.py +141 -0
  972. package/python/vendor/waste_collection_schedule/source/waste_havant_gov_uk.py +95 -0
  973. package/python/vendor/waste_collection_schedule/source/wastecollection_mt.py +145 -0
  974. package/python/vendor/waste_collection_schedule/source/wastenet_org_nz.py +138 -0
  975. package/python/vendor/waste_collection_schedule/source/watford_gov_uk.py +217 -0
  976. package/python/vendor/waste_collection_schedule/source/waverley_gov_uk.py +63 -0
  977. package/python/vendor/waste_collection_schedule/source/wealden_gov_uk.py +70 -0
  978. package/python/vendor/waste_collection_schedule/source/welhat_gov_uk.py +100 -0
  979. package/python/vendor/waste_collection_schedule/source/wellington_govt_nz.py +93 -0
  980. package/python/vendor/waste_collection_schedule/source/wermelskirchen_de.py +110 -0
  981. package/python/vendor/waste_collection_schedule/source/west_dunbartonshire_gov_uk.py +115 -0
  982. package/python/vendor/waste_collection_schedule/source/west_lindsey_gov_uk.py +103 -0
  983. package/python/vendor/waste_collection_schedule/source/west_norfolk_gov_uk.py +81 -0
  984. package/python/vendor/waste_collection_schedule/source/westberks_gov_uk.py +149 -0
  985. package/python/vendor/waste_collection_schedule/source/western_bay_of_plenty_nz.py +195 -0
  986. package/python/vendor/waste_collection_schedule/source/westlancs_gov_uk.py +138 -0
  987. package/python/vendor/waste_collection_schedule/source/westlothian_gov_uk.py +184 -0
  988. package/python/vendor/waste_collection_schedule/source/westminster_gov_uk.py +203 -0
  989. package/python/vendor/waste_collection_schedule/source/westnorthants_gov_uk.py +54 -0
  990. package/python/vendor/waste_collection_schedule/source/westoxon_gov_uk.py +305 -0
  991. package/python/vendor/waste_collection_schedule/source/westsuffolk_gov_uk.py +75 -0
  992. package/python/vendor/waste_collection_schedule/source/whitehorse_vic_gov_au.py +163 -0
  993. package/python/vendor/waste_collection_schedule/source/whittlesea_vic_gov_au.py +37 -0
  994. package/python/vendor/waste_collection_schedule/source/wieliczka_kiedyodpady_pl.py +212 -0
  995. package/python/vendor/waste_collection_schedule/source/wigan_gov_uk.py +98 -0
  996. package/python/vendor/waste_collection_schedule/source/willoughby_nsw_gov_au.py +112 -0
  997. package/python/vendor/waste_collection_schedule/source/wiltshire_gov_uk.py +83 -0
  998. package/python/vendor/waste_collection_schedule/source/wingecarribee_nsw_gov_au.py +151 -0
  999. package/python/vendor/waste_collection_schedule/source/winterthur_ch.py +66 -0
  1000. package/python/vendor/waste_collection_schedule/source/wirral_gov_uk.py +105 -0
  1001. package/python/vendor/waste_collection_schedule/source/wm_com.py +460 -0
  1002. package/python/vendor/waste_collection_schedule/source/wokingham_gov_uk.py +161 -0
  1003. package/python/vendor/waste_collection_schedule/source/wollondilly_nsw_gov_au.py +61 -0
  1004. package/python/vendor/waste_collection_schedule/source/wollongongwaste_com_au.py +70 -0
  1005. package/python/vendor/waste_collection_schedule/source/wolverhampton_gov_uk.py +98 -0
  1006. package/python/vendor/waste_collection_schedule/source/woollahra_nsw_gov_au.py +65 -0
  1007. package/python/vendor/waste_collection_schedule/source/wrexham_gov_uk.py +151 -0
  1008. package/python/vendor/waste_collection_schedule/source/wsz_moosburg_at.py +114 -0
  1009. package/python/vendor/waste_collection_schedule/source/wuerzburg_de.py +123 -0
  1010. package/python/vendor/waste_collection_schedule/source/wychavon_gov_uk.py +31 -0
  1011. package/python/vendor/waste_collection_schedule/source/wyndham_vic_gov_au.py +92 -0
  1012. package/python/vendor/waste_collection_schedule/source/wyre_gov_uk.py +50 -0
  1013. package/python/vendor/waste_collection_schedule/source/wyreforestdc_gov_uk.py +171 -0
  1014. package/python/vendor/waste_collection_schedule/source/ximmio_nl.py +183 -0
  1015. package/python/vendor/waste_collection_schedule/source/yarra_ranges_vic_gov_au.py +40 -0
  1016. package/python/vendor/waste_collection_schedule/source/yarracity_vic_gov_au.py +163 -0
  1017. package/python/vendor/waste_collection_schedule/source/york_gov_uk.py +51 -0
  1018. package/python/vendor/waste_collection_schedule/source/zab_ch.py +121 -0
  1019. package/python/vendor/waste_collection_schedule/source/zakb_de.py +161 -0
  1020. package/python/vendor/waste_collection_schedule/source/zaw_sr_de.py +234 -0
  1021. package/python/vendor/waste_collection_schedule/source/zke_sb_de.py +132 -0
  1022. package/python/vendor/waste_collection_schedule/source/zva_sek_de.py +184 -0
  1023. package/python/vendor/waste_collection_schedule/source/zva_wmk_de.py +85 -0
  1024. package/python/vendor/waste_collection_schedule/source/zvo_com.py +185 -0
  1025. package/python/vendor/waste_collection_schedule/source/zys_harmonogram_pl.py +52 -0
  1026. package/python/vendor/waste_collection_schedule/source_shell.py +314 -0
  1027. package/README.md +0 -3
@@ -0,0 +1,995 @@
1
+ import re
2
+ from datetime import datetime
3
+ from typing import TypedDict
4
+ from urllib.parse import urlparse
5
+
6
+ import requests
7
+ from bs4 import BeautifulSoup
8
+ from waste_collection_schedule import Collection, Icons # type: ignore[attr-defined]
9
+ from waste_collection_schedule.exceptions import (
10
+ SourceArgumentException,
11
+ SourceArgumentNotFoundWithSuggestions,
12
+ SourceArgumentRequiredWithSuggestions,
13
+ )
14
+ from waste_collection_schedule.source.ics import Source as ICSSource
15
+
16
+ TITLE = "Die NÖ Umweltverbände"
17
+ DESCRIPTION = (
18
+ "Consolidated waste collection provider for several districts in Lower Austria"
19
+ )
20
+ URL = "https://www.umweltverbaende.at/"
21
+ COUNTRY = "at"
22
+
23
+
24
+ class E_I_TYPE(TypedDict):
25
+ title: str
26
+ url: str
27
+ country: str
28
+ default_params: dict[str, str]
29
+
30
+
31
+ EXTRA_INFO: list[E_I_TYPE] = [
32
+ # { --> Schedules supported via generic ICS source [GDA Amstetten](/doc/ics/gda_gv_at.md)
33
+ # "title": "GDA Amstetten",
34
+ # "url": "https://gda.gv.at/",
35
+ # "country": "at",
36
+ # },
37
+ # { # Not supported anymore as they only provide a PDFs now
38
+ # "title": "GABL",
39
+ # "url": "https://bruck.umweltverbaende.at/",
40
+ # "country": "at",
41
+ # "default_params": {
42
+ # "district": "bruck",
43
+ # },
44
+ # },
45
+ {
46
+ "title": "GVA Baden",
47
+ "url": "https://baden.umweltverbaende.at/",
48
+ "country": "at",
49
+ "default_params": {
50
+ "district": "baden",
51
+ },
52
+ },
53
+ {
54
+ "title": "GV Gmünd",
55
+ "url": "https://gmuend.umweltverbaende.at/",
56
+ "country": "at",
57
+ "default_params": {
58
+ "district": "gmuend",
59
+ },
60
+ },
61
+ {
62
+ "title": "GVU Bezirk Gänserndorf",
63
+ "url": "https://gaenserndorf.umweltverbaende.at/",
64
+ "country": "at",
65
+ "default_params": {
66
+ "district": "gaenserndorf",
67
+ },
68
+ },
69
+ {
70
+ "title": "Abfallverband Hollabrunn",
71
+ "url": "https://hollabrunn.umweltverbaende.at/",
72
+ "country": "at",
73
+ "default_params": {
74
+ "district": "hollabrunn",
75
+ },
76
+ },
77
+ {
78
+ "title": "Gemeindeverband Horn",
79
+ "url": "https://horn.umweltverbaende.at/",
80
+ "country": "at",
81
+ "default_params": {
82
+ "district": "horn",
83
+ },
84
+ },
85
+ # {
86
+ # "title": "Klosterneuburg",
87
+ # "url": "https://klosterneuburg.umweltverbaende.at/",
88
+ # "country": "at",
89
+ # "default_params": {
90
+ # "district": "klosterneuburg",
91
+ # },
92
+ # }, The site still exists but does not offer any schedules anymore they now have a own page not yet supported by this integration: https://www.klosterneuburg.at/Natur_Umwelt/Recycling/Muellabfuhr/Muellabfuhrkalender
93
+ {
94
+ "title": "Abfallverband Korneuburg",
95
+ "url": "https://korneuburg.umweltverbaende.at/",
96
+ "country": "at",
97
+ "default_params": {
98
+ "district": "korneuburg",
99
+ },
100
+ },
101
+ {
102
+ "title": "GV Krems",
103
+ "url": "https://krems.umweltverbaende.at/",
104
+ "country": "at",
105
+ "default_params": {
106
+ "district": "krems",
107
+ },
108
+ },
109
+ # { # Does not offer same schedule but is supported via generic ICS kremsstadt_umweltverbaende_at
110
+ # "title": "Abfallwirtschaft Stadt Krems",
111
+ # "url": "https://kremsstadt.umweltverbaende.at/",
112
+ # "country": "at",
113
+ # "default_params": {
114
+ # "district": "kremsstadt",
115
+ # },
116
+ # },
117
+ {
118
+ "title": "GVA Lilienfeld",
119
+ "url": "https://lilienfeld.umweltverbaende.at/",
120
+ "country": "at",
121
+ "default_params": {
122
+ "district": "lilienfeld",
123
+ },
124
+ },
125
+ {
126
+ "title": "GAUL Laa an der Thaya",
127
+ "url": "https://laa.umweltverbaende.at/",
128
+ "country": "at",
129
+ "default_params": {
130
+ "district": "laa",
131
+ },
132
+ },
133
+ {
134
+ "title": "GVA Mödling",
135
+ "url": "https://moedling.umweltverbaende.at/",
136
+ "country": "at",
137
+ "default_params": {
138
+ "district": "moedling",
139
+ },
140
+ },
141
+ {
142
+ "title": "GVU Melk",
143
+ "url": "https://melk.umweltverbaende.at/",
144
+ "country": "at",
145
+ "default_params": {
146
+ "district": "melk",
147
+ },
148
+ },
149
+ {
150
+ "title": "GAUM Mistelbach",
151
+ "url": "https://mistelbach.umweltverbaende.at/",
152
+ "country": "at",
153
+ "default_params": {
154
+ "district": "mistelbach",
155
+ },
156
+ },
157
+ # { # No schedules listed on website
158
+ # "title": "AWV Neunkirchen",
159
+ # "url": "https://neunkirchen.umweltverbaende.at/",
160
+ # "country": "at",
161
+ # "default_params": {
162
+ # "district": "neunkirchen",
163
+ # },
164
+ # },
165
+ # { --> Schedules supported via generic ICS source [Abfallwirtschaft der Stadt St. Pölten](/doc/ics/st-poelten_at.md)
166
+ # "title": "Abfallwirtschaft Stadt St Pölten",
167
+ # "url": "https://stpoelten.umweltverbaende.at/",
168
+ # "country": "at",
169
+ # },
170
+ {
171
+ "title": "GVU St. Pölten",
172
+ "url": "https://stpoeltenland.umweltverbaende.at/",
173
+ "country": "at",
174
+ "default_params": {
175
+ "district": "stpoeltenland",
176
+ },
177
+ },
178
+ {
179
+ "title": "GVU Scheibbs",
180
+ "url": "https://scheibbs.umweltverbaende.at/",
181
+ "country": "at",
182
+ "default_params": {
183
+ "district": "scheibbs",
184
+ },
185
+ },
186
+ # { # Abfallverband Schwechat migrated to the Infeo platform; use infeo_at source with customer "av-schwechat"
187
+ # "title": "Abfallverband Schwechat",
188
+ # "url": "https://schwechat.umweltverbaende.at/",
189
+ # "country": "at",
190
+ # "default_params": {
191
+ # "district": "schwechat",
192
+ # },
193
+ # },
194
+ # { No ICAL or API available anymore
195
+ # "title": "GVA Tulln",
196
+ # "url": "https://tulln.umweltverbaende.at/",
197
+ # "country": "at",
198
+ # "default_params": {
199
+ # "district": "tulln",
200
+ # },
201
+ # },
202
+ {
203
+ "title": "GVA Waidhofen/Thaya",
204
+ "url": "https://waidhofen.umweltverbaende.at/",
205
+ "country": "at",
206
+ "default_params": {
207
+ "district": "waidhofen",
208
+ },
209
+ },
210
+ {
211
+ "title": "GV Zwettl",
212
+ "url": "https://zwettl.umweltverbaende.at/",
213
+ "country": "at",
214
+ "default_params": {
215
+ "district": "zwettl",
216
+ },
217
+ },
218
+ ]
219
+
220
+ PARAM_TRANSLATIONS = {
221
+ "de": {
222
+ "district": "Gebiet/Service provider id",
223
+ "municipal": "Gemeinde",
224
+ "town": "Ort",
225
+ "plz": "Postleitzahl",
226
+ "street": "Straße",
227
+ "hnr": "Hausnummer",
228
+ "addition": "Zusatz",
229
+ "calendar": "Kalender",
230
+ "calendar_title_separator": "Kalendertitel Separator",
231
+ "calendar_splitter": "Kalendereintrag-Trenner",
232
+ },
233
+ "en": {
234
+ "district": "District/Service provider id",
235
+ "municipal": "Municipal",
236
+ "town": "Town",
237
+ "plz": "Postal code",
238
+ "street": "Street",
239
+ "hnr": "House number",
240
+ "addition": "Addition",
241
+ "calendar": "Calendar",
242
+ "calendar_title_separator": "Calendar title separator",
243
+ "calendar_splitter": "Calendar entry splitter",
244
+ },
245
+ }
246
+
247
+ HOW_TO_GET_ARGUMENTS_DESCRIPTION = {
248
+ "en": "There are two kinds of websites supported: The old one: Light blue header with green buttons. And a new one Dark blue header with only Blue accent elements. Follow the descriptions of the attributes according to your website type.",
249
+ "de": "Es werden zwei Arten von Websites unterstützt: Die alte: Hellblaue Kopfzeile mit grünen Schaltflächen. Und eine neue: Dunkelblaue Kopfzeile mit nur blauen Akzentelementen. Befolgen Sie die Beschreibungen der Attribute entsprechend Ihrem Website-Typ.",
250
+ }
251
+
252
+ PARAM_DESCRIPTIONS = {
253
+ "en": {
254
+ "district": "subdomain of the waste collection provider it is one of"
255
+ "`"
256
+ + "`, `".join([item["default_params"]["district"] for item in EXTRA_INFO])
257
+ + "`",
258
+ "municipal": "Municipal name",
259
+ "town": "(New Website only) Not needed in most cases leave empty and only use if you get an error without it",
260
+ "plz": "(New Website only) Not needed in most cases leave empty and only use if you get an error without it",
261
+ "street": "(New Website only) Not needed in most cases leave empty and only use if you get an error without it",
262
+ "hnr": "(New Website only) Not needed in most cases leave empty and only use if you get an error without it",
263
+ "addition": "(New Website only) Not needed in most cases leave empty and only use if you get an error without it",
264
+ "calendar": "(Old website only) If you see multiple collection calendars for your municipal (different streets or Rayons), you can specify the calendar name here. The calendar name should be spelt as it appears on the Abholtermine page below `Kalenderansicht`.",
265
+ "calendar_title_separator": "(Old website only) rarely needed, only works if `calendar` is set. This is the character that separates the calendar title from the collection dates. Like `Tour 1: Restmüll` (`:` is the separator which is the default value) or `Bisamberg Zone B, Restmüll 14-tägig` (`,` is the separator). You can see the text, the integration will use, at the Abholtermine page below `Kalenderansicht`",
266
+ "calendar_splitter": "(Old website only) rarely needed, only works if `calendar` is set. Only needed if multiple collections are shown in one line. This is the character that separates the collection times, that are listed in one line. Like `Bisamberg Zone B, Restmüll 14-tägig: Gelber Sack` (`:` is the separator) You can see the text, the integration will use, at the Abholtermine page below `Kalenderansicht`",
267
+ },
268
+ "de": {
269
+ "district": "Subdomain des Abfallwirtschaftsverbandes, einer der folgenden"
270
+ "`"
271
+ + "`, `".join([item["default_params"]["district"] for item in EXTRA_INFO])
272
+ + "`",
273
+ "municipal": "Gemeindename",
274
+ "town": "(Neue Website) In den meisten Fällen nicht notwendig, nur verwenden, wenn ein Fehler ohne diese Angabe auftritt",
275
+ "plz": "(Neue Website) In den meisten Fällen nicht notwendig, nur verwenden, wenn ein Fehler ohne diese Angabe auftritt",
276
+ "street": "(Neue Website) In den meisten Fällen nicht notwendig, nur verwenden, wenn ein Fehler ohne diese Angabe auftritt",
277
+ "hnr": "(Neue Website) In den meisten Fällen nicht notwendig, nur verwenden, wenn ein Fehler ohne diese Angabe auftritt",
278
+ "addition": "(Neue Website) In den meisten Fällen nicht notwendig, nur verwenden, wenn ein Fehler ohne diese Angabe auftritt",
279
+ "calendar": "(Alte Website) Wenn mehrere Abfallkalender für Ihre Gemeinde angezeigt werden (unterschiedliche Straßen oder Rayons), können Sie hier den Kalendernamen angeben. Der Kalendername sollte so geschrieben sein, wie er auf der Abholtermine-Seite unter `Kalenderansicht` erscheint.",
280
+ "calendar_title_separator": "(Alte Website) selten benötigt, nur wenn `calendar` gesetzt ist. Dies ist das Zeichen, das den Kalendertitel von den Abholterminen trennt. Wie `Tour 1: Restmüll` (`:` ist der Trenner, der Standardwert) oder `Bisamberg Zone B, Restmüll 14-tägig` (`,` ist der Trenner). Sie können den Text, den die Integration verwendet, auf der Abholtermine-Seite unter `Kalenderansicht` sehen",
281
+ "calendar_splitter": "(Alte Website) selten benötigt, nur wenn `calendar` gesetzt ist. Nur erforderlich, wenn mehrere Sammlungen in einer Zeile angezeigt werden. Dies ist das Zeichen, das die Sammelzeiten trennt, die in einer Zeile aufgeführt sind. Wie `Bisamberg Zone B, Restmüll 14-tägig: Gelber Sack` (`:` ist der Trenner) Sie können den Text, den die Integration verwendet, auf der Abholtermine-Seite unter `Kalenderansicht` sehen",
282
+ },
283
+ }
284
+
285
+
286
+ TEST_CASES = {
287
+ # "Bruck/Leitha": {"district": "bruck", "municipal": "Berg"}, # Not supported anymore as they only provide a PDFs now
288
+ "Baden": {
289
+ "district": "baden",
290
+ "municipal": "Hernstein",
291
+ "calendar": "ICS Hernstein",
292
+ }, # old version (as of 29.12.2024)
293
+ "Baden - Berndorf Abfuhrbereich II": {
294
+ "district": "baden",
295
+ "municipal": "Berndorf",
296
+ "calendar": "Abfuhrbereich II",
297
+ }, # regression test for issue #4675: municipal scoping + Roman numeral collision (II vs III)
298
+ "Gmünd": {
299
+ "district": "gmuend",
300
+ "municipal": "Weitra",
301
+ }, # old version (as of 29.12.2024)
302
+ "Gänserndorf": {"district": "gaenserndorf", "municipal": "Auersthal"},
303
+ "Gänserndorf-New": {
304
+ "district": "gaenserndorf",
305
+ "municipal": "Deutsch-Wagram",
306
+ "street": "Johann Nestroy-Gasse",
307
+ "hnr": "63",
308
+ },
309
+ "Hollabrunn": {
310
+ "district": "hollabrunn",
311
+ "municipal": "Retz",
312
+ "town": "Obernalb",
313
+ "street": "Zum weissen Engel",
314
+ },
315
+ "Hollabrunn - Zellerndorf": {
316
+ "district": "hollabrunn",
317
+ "municipal": "Zellerndorf",
318
+ }, # regression test for #4909: API returns a zone with a fraktion but no "dates" key
319
+ "Horn": {
320
+ "district": "horn",
321
+ "municipal": "Japons",
322
+ "town": "Japons",
323
+ }, # new version (as of 2026); town required — Japons has multiple sub-locations
324
+ # "Klosterneuburg": {
325
+ # "district": "klosterneuburg",
326
+ # "municipal": "Klosterneuburg",
327
+ # }, # Not supported anymore
328
+ "Korneuburg": { # old version (as of 29.12.2024)
329
+ "district": "korneuburg",
330
+ "municipal": "Bisamberg",
331
+ "calendar": "Bisamberg B",
332
+ "calendar_title_separator": ",",
333
+ "calendar_splitter": ":",
334
+ },
335
+ "Korneuburg - Enzersfeld": {
336
+ "district": "korneuburg",
337
+ "municipal": "Enzersfeld",
338
+ }, # regression test for #7428: flat ICS list (no accordion) needs municipal scoping so the single-match shortcut can trigger
339
+ "Krems - Langenlois Land": {
340
+ "district": "krems",
341
+ "municipal": "Langenlois Land",
342
+ "calendar": "Gobelsburg, Mittelberg, Reith, Schiltern, Zöbing",
343
+ },
344
+ # "Krems": {"district": "krems", "municipal": "Aggsbach"}, # 0 results with this config
345
+ # "Stadt Krems Old Version": {"district": "kremsstadt", "municipal": "Rehberg"}, # Does not offer same schedule but is supported via generic ICS kremsstadt_umweltverbaende_at
346
+ # "Lilienfeld": {
347
+ # "district": "lilienfeld",
348
+ # "municipal": "Annaberg",
349
+ # }, # No ICAL or API available anymore - only redirects to the local municipal websites
350
+ "Laa/Thaya": {
351
+ "district": "laa",
352
+ "municipal": "Staatz",
353
+ "town": "kautendorf",
354
+ }, # schedules use www.gaul-laa.at
355
+ "Mödling": {
356
+ "district": "moedling",
357
+ "municipal": "Wienerwald",
358
+ "town": "Gruberau",
359
+ }, # gvamoedling.at/muellabfuhrkalender/ (regression test for issue #7476)
360
+ "Melk": {"district": "melk", "municipal": "Schollach"},
361
+ "Mistelbach": {"district": "mistelbach", "municipal": "Falkenstein"},
362
+ # "Neunkirchen": {"district": "neunkirchen", "municipal": "?"}, # No schedules listed on website
363
+ "St. Pölten": {"district": "stpoeltenland", "municipal": "Pyhra"},
364
+ "Scheibbs": {"district": "scheibbs", "municipal": "Wolfpassing"},
365
+ # "Schwechat": { # Migrated to Infeo platform; use infeo_at source with customer "av-schwechat"
366
+ # "district": "schwechat",
367
+ # "municipal": "Schwechat",
368
+ # "town": "Kledering Einfamilienhaus",
369
+ # },
370
+ # "Tulln": {
371
+ # "district": "tulln",
372
+ # "municipal": "Absdorf",
373
+ # }, # No ICAL or API available anymore
374
+ "Waidhofen/Thaya": {"district": "waidhofen", "municipal": "Kautzen"},
375
+ "Zwettl": {
376
+ "district": "zwettl",
377
+ "municipal": "Martinsberg",
378
+ }, # new version (as of 2026); site redirects to gvzwettl.at
379
+ }
380
+
381
+ ICON_MAP = {
382
+ "Restmüll": Icons.GENERAL_WASTE,
383
+ "Gelber Sack": Icons.PLASTIC_PACKAGING,
384
+ "Gelbe Tonne": Icons.PLASTIC_PACKAGING,
385
+ "Altpapier": Icons.PAPER,
386
+ "Papier": Icons.PAPER,
387
+ "Biotonne": Icons.BIO_KITCHEN,
388
+ "Bio": Icons.ORGANIC,
389
+ "Windeltonne": Icons.GENERAL_WASTE,
390
+ "Christbaum": Icons.CHRISTMAS_TREE,
391
+ "Problemstoff": Icons.HAZARDOUS,
392
+ "Strauchschnitt": Icons.GARDEN,
393
+ "Verpackung": Icons.PAPER,
394
+ "LVP": Icons.PLASTIC_PACKAGING,
395
+ }
396
+
397
+ POSSIBLE_COLLECTION_PATHS = (
398
+ "muellabfuhrkalender/", # Mödling
399
+ "abholtermine-preview/", # Hollabrunn
400
+ "fuer-die-bevoelkerung/abholtermine/",
401
+ "abfall-entsorgung/abfuhrtermine/",
402
+ "fuer-die-bevoelkerung/abfuhrterminkalender/",
403
+ "entsorgung-und-termine/abholtermine/", # Scheibbs
404
+ f"fuer-die-bevoelkerung/abholtermine-{datetime.now().year + 1}/", # Zwettl
405
+ f"fuer-die-bevoelkerung/abholtermine-{datetime.now().year}/", # Zwettl
406
+ )
407
+
408
+ LOCATION_FILTER_KEYS = (
409
+ "search[ort]",
410
+ "search[postleitzahl]",
411
+ "search[strasse]",
412
+ "search[hausnummer]",
413
+ "search[zusatz]",
414
+ )
415
+
416
+
417
+ class Source:
418
+ def __init__(
419
+ self,
420
+ district: str,
421
+ municipal: str | None = None,
422
+ town: str | None = None,
423
+ plz: str | None = None,
424
+ street: str | None = None,
425
+ hnr: str | None = None,
426
+ addition: str | None = None,
427
+ calendar: list[str] | str | None = None,
428
+ calendar_title_separator: str = ":",
429
+ calendar_splitter: str | None = None,
430
+ ):
431
+ self._district = district.lower()
432
+ self._municipal = municipal
433
+
434
+ # ## arguments for new version
435
+ self._town = town
436
+ self._plz = plz
437
+ self._street = street
438
+ self._hnr = hnr
439
+ self._addition = addition
440
+
441
+ # ## END arguments for new version
442
+
443
+ if isinstance(calendar, list):
444
+ self._calendars: list[str] | str | None = [x.lower() for x in calendar]
445
+ elif calendar:
446
+ self._calendars = [calendar.lower()]
447
+ else:
448
+ self._calendars = None
449
+
450
+ self.calendar_title_separator = calendar_title_separator
451
+ self.calendar_splitter = calendar_splitter
452
+
453
+ if district == "kremsstadt": # Keep compatibility with old configs
454
+ raise Exception(
455
+ "kremstadt is no longer supported by this source follow the documentation on the City of Krems ICS source"
456
+ )
457
+
458
+ district_url: str | None = None
459
+ for item in EXTRA_INFO:
460
+ if (self._district.lower() + ".") in item["url"]:
461
+ district_url = item["url"]
462
+
463
+ if not district_url:
464
+ raise SourceArgumentNotFoundWithSuggestions(
465
+ "district",
466
+ self._district,
467
+ [item["url"].split(".")[0].split("://")[1] for item in EXTRA_INFO],
468
+ )
469
+ self._district_url: str = district_url
470
+
471
+ self._district_collection_url: str | None = None
472
+ self.use_new = False
473
+
474
+ # Scheibbs special case: use specific path directly (redirects cause issues)
475
+ if "scheibbs" in self._district_url.lower():
476
+ scheibbs_path = "entsorgung-und-termine/abholtermine/"
477
+ r = requests.get(f"{self._district_url}{scheibbs_path}")
478
+ if r.status_code == 200:
479
+ self._district_collection_url = r.url
480
+ parsed = urlparse(r.url)
481
+ self._district_url = f"{parsed.scheme}://{parsed.netloc}/"
482
+ self.use_new = True
483
+
484
+ if not self.use_new:
485
+ for col_path in POSSIBLE_COLLECTION_PATHS:
486
+ if (
487
+ r := requests.get(f"{self._district_url}{col_path}")
488
+ ).status_code == 200:
489
+ self._district_collection_url = r.url
490
+ parsed = urlparse(r.url)
491
+ self._district_url = f"{parsed.scheme}://{parsed.netloc}/"
492
+ self.use_new = True
493
+ break
494
+
495
+ def get_icon(self, waste_text: str) -> str | None:
496
+ mdi_icon = None
497
+ for waste in ICON_MAP:
498
+ if waste in waste_text:
499
+ mdi_icon = ICON_MAP[waste]
500
+ return mdi_icon
501
+
502
+ def append_entry(self, ent: list, txt: list):
503
+ ent.append(
504
+ Collection(
505
+ date=datetime.strptime(txt[1].strip().strip(",:"), "%d.%m.%Y").date(),
506
+ t=txt[2].strip(),
507
+ icon=self.get_icon(txt[2].strip()),
508
+ )
509
+ )
510
+ return
511
+
512
+ def fetch(self) -> list[Collection]:
513
+ if self.use_new:
514
+ try:
515
+ now = datetime.now()
516
+ entries = self.fetch_new(year=now.year)
517
+ if now.month == 12:
518
+ try:
519
+ entries += self.fetch_new(year=now.year + 1)
520
+ except Exception:
521
+ pass
522
+ # If new method returns no entries, try old method as fallback
523
+ if not entries:
524
+ return self.fetch_old()
525
+ return entries
526
+ except SourceArgumentException:
527
+ # Argument errors (e.g. a missing/ambiguous calendar or
528
+ # municipal) are actionable for the user and carry helpful
529
+ # suggestions. Surface them directly instead of silently
530
+ # falling back to the old parser, which returns an empty
531
+ # result for new-style websites and previously masked the
532
+ # real error behind a generic "empty response" (#7428).
533
+ raise
534
+ except Exception as e:
535
+ # If new method fails, fallback to old method
536
+ try:
537
+ return self.fetch_old()
538
+ except Exception:
539
+ # If both methods fail, raise the original error from new method
540
+ raise e from None
541
+ return self.fetch_old()
542
+
543
+ def fetch_old(self) -> list[Collection]:
544
+ now = datetime.now()
545
+ entries = self.get_data_old(now.year)
546
+ if now.month != 12:
547
+ return entries
548
+ try:
549
+ entries2 = self.get_data_old(now.year + 1)
550
+ entries.extend(entries2)
551
+ except Exception:
552
+ pass
553
+ return entries
554
+
555
+ def get_data_old(self, year: int) -> list[Collection]:
556
+ s = requests.Session()
557
+ # Select appropriate url, the "." allows stpoelten/stpoeltenland and krems/kremsstadt to be distinguished
558
+ for item in EXTRA_INFO:
559
+ if (self._district.lower() + ".") in item["url"]:
560
+ district_url = item["url"]
561
+ r0 = s.get(f"{district_url}?kat=32&jahr={year}")
562
+ soup = BeautifulSoup(r0.text, "html.parser")
563
+
564
+ # Get list of municipalities and weblinks
565
+ # kremsstadt lists collections for all municipals on the main page so skip that district
566
+ if self._municipal:
567
+ table = soup.select("div.col-sm-9")
568
+ for col in table:
569
+ weblinks = col.select("a.weblink")
570
+ for col in weblinks:
571
+ # match weblink with municipal to get collection schedule
572
+ if self._municipal in col.text:
573
+ r1 = s.get(f"{district_url}{col['href']}")
574
+ soup = BeautifulSoup(r1.text, "html.parser")
575
+
576
+ # Find all the listed collections
577
+ schedule = soup.select("div.tunterlegt")
578
+
579
+ entries: list[Collection] = []
580
+ for day in schedule:
581
+ # Split on a run of 2+ whitespace characters (regular spaces
582
+ # and/or non-breaking spaces), so both the old NBSP-delimited
583
+ # markup and the newer double-space markup work.
584
+ txt = re.split(r"[ ]{2,}", day.text.strip())
585
+ if len(txt) == 1:
586
+ txt = day.text.strip().split(" ")
587
+ txt = [
588
+ txt[0].strip(","),
589
+ txt[1].strip(","),
590
+ (" ".join([t.strip() for t in txt[2:]])).strip(","),
591
+ ]
592
+ if self._calendars: # Filter for calendar if there are multiple calendars
593
+ if any(cal.upper() in txt[2].upper() for cal in self._calendars):
594
+ for entry_text in (
595
+ [txt[2]]
596
+ if self.calendar_splitter is None
597
+ else txt[2].split(self.calendar_splitter)
598
+ ):
599
+ new_txt = txt.copy()
600
+ new_txt[2] = entry_text.split(self.calendar_title_separator)[
601
+ -1
602
+ ].strip()
603
+ self.append_entry(entries, new_txt)
604
+ else: # Process all other municipals
605
+ self.append_entry(entries, txt)
606
+
607
+ return entries
608
+
609
+ @staticmethod
610
+ def compare(a: str, b: str) -> bool:
611
+ return (
612
+ a.strip().lower().replace(" ", "").replace(",", "").casefold()
613
+ == b.strip().lower().replace(" ", "").replace(",", "").casefold()
614
+ )
615
+
616
+ def get_genereic(
617
+ self,
618
+ s: requests.Session,
619
+ data: dict[str, str],
620
+ arg_name: str,
621
+ arg_value: str | None,
622
+ element_name: str,
623
+ newxt_stage,
624
+ ) -> dict[str, str]:
625
+ data["element"] = element_name
626
+ r = s.post(f"{self._district_url}wp-admin/admin-ajax.php", data=data)
627
+ r.raise_for_status()
628
+ if values := r.json()["options"].strip():
629
+ soup = BeautifulSoup(values, "html.parser")
630
+ options = soup.select("option")
631
+ if len(options) == 1:
632
+ data[f"search[{element_name}]"] = options[0]["value"]
633
+ return newxt_stage(s, data)
634
+ value: str | None = None
635
+ for option in options:
636
+ if arg_value and self.compare(arg_value, option.text):
637
+ value = option["value"]
638
+ break
639
+ if not arg_value:
640
+ raise SourceArgumentRequiredWithSuggestions(
641
+ arg_name,
642
+ arg_value,
643
+ [option.text.strip() for option in options],
644
+ )
645
+ if not value:
646
+ raise SourceArgumentNotFoundWithSuggestions(
647
+ arg_name,
648
+ arg_value,
649
+ [option.text.strip() for option in options],
650
+ )
651
+ data[f"search[{element_name}]"] = value
652
+ return newxt_stage(s, data)
653
+ return data
654
+
655
+ def get_addition(self, s: requests.Session, data: dict[str, str]) -> dict[str, str]:
656
+ def do_nothing(s: requests.Session, data: dict[str, str]):
657
+ return data
658
+
659
+ return self.get_genereic(
660
+ s, data, "addition", self._addition, "zusatz", do_nothing
661
+ )
662
+
663
+ def get_hnr(self, s: requests.Session, data: dict[str, str]) -> dict[str, str]:
664
+ return self.get_genereic(
665
+ s, data, "hnr", self._hnr, "hausnummer", self.get_addition
666
+ )
667
+
668
+ def get_street(self, s: requests.Session, data: dict[str, str]) -> dict[str, str]:
669
+ return self.get_genereic(
670
+ s, data, "street", self._street, "strasse", self.get_hnr
671
+ )
672
+
673
+ def get_plz(self, s: requests.Session, data: dict[str, str]) -> dict[str, str]:
674
+ return self.get_genereic(
675
+ s, data, "plz", self._plz, "postleitzahl", self.get_street
676
+ )
677
+
678
+ def get_ort(self, s: requests.Session, data: dict[str, str]) -> dict[str, str]:
679
+ return self.get_genereic(s, data, "town", self._town, "ort", self.get_plz)
680
+
681
+ def _collect_ics_links(self, scope: BeautifulSoup) -> dict[str, str]:
682
+ """Collect all .ics links (and their link text) within a soup scope."""
683
+ links: dict[str, str] = {}
684
+ for a in scope.find_all("a", href=True):
685
+ href = a["href"]
686
+ if not href.endswith(".ics"):
687
+ continue
688
+ # Calendarname from Linktext
689
+ cal_name = a.text.strip()
690
+ # build full URL
691
+ if href.startswith("/"):
692
+ url = self._district_url.rstrip("/") + href
693
+ elif href.startswith("http"):
694
+ url = href
695
+ else:
696
+ url = self._district_url.rstrip("/") + "/" + href
697
+ links[cal_name] = url
698
+ return links
699
+
700
+ @staticmethod
701
+ def _bounded_substring_match(needle: str, haystack: str) -> bool:
702
+ """Substring match that requires non-word (or string-edge) boundaries
703
+ around the match, so e.g. "Abfuhrbereich II" does not spuriously match
704
+ "Abfuhrbereich III" (see issue #4675). Uses casefold() and Unicode-aware
705
+ \\w boundaries so umlauts/non-ASCII are handled like compare()."""
706
+ pattern = r"(?<!\w)" + re.escape(needle.casefold()) + r"(?!\w)"
707
+ return re.search(pattern, haystack.casefold()) is not None
708
+
709
+ def _fetch_new_from_list(self, soup: BeautifulSoup) -> list[Collection]:
710
+ """Fetch ICS links directly from the page, e.g. for Korneuburg/Baden."""
711
+ # Some websites (e.g. Baden) group all calendars for a municipality
712
+ # inside an accordion item (`div.el-item` with an `a.el-title`
713
+ # heading). When this structure is present and a municipal was
714
+ # specified, scope the ICS search to the matching accordion item(s)
715
+ # only. Without this scoping, different municipalities offering
716
+ # identically-named calendars (e.g. both Berndorf and Ebreichsdorf
717
+ # offer an "Abfuhrbereich II") leak into each other, see issue #4675.
718
+ accordion_items = soup.select("div.el-item")
719
+ municipal_sections = [
720
+ item for item in accordion_items if item.select_one("a.el-title")
721
+ ]
722
+
723
+ if municipal_sections and self._municipal:
724
+ matched_sections = [
725
+ item
726
+ for item in municipal_sections
727
+ if (title := item.select_one("a.el-title"))
728
+ and self.compare(self._municipal, title.get_text())
729
+ ]
730
+ if not matched_sections:
731
+ raise SourceArgumentNotFoundWithSuggestions(
732
+ "municipal",
733
+ self._municipal,
734
+ [
735
+ section.select_one("a.el-title").get_text().strip() # type: ignore[union-attr]
736
+ for section in municipal_sections
737
+ ],
738
+ )
739
+ ics_links: dict[str, str] = {}
740
+ for section in matched_sections:
741
+ ics_links.update(self._collect_ics_links(section))
742
+ else:
743
+ ics_links = self._collect_ics_links(soup)
744
+ # Some districts (e.g. Korneuburg) list every municipality's
745
+ # ICS links in one flat list instead of grouping them into an
746
+ # accordion with a heading per municipality. Without scoping,
747
+ # a municipal with a single unambiguous calendar (e.g.
748
+ # "Enzersfeld") gets mixed in with every other municipality's
749
+ # calendars, so the "exactly one link" shortcut below never
750
+ # triggers and unrelated calendars leak into the suggestions
751
+ # (see issue #7428). Narrow down to the requested municipal
752
+ # where its name appears (bounded) in the link text.
753
+ if self._municipal:
754
+ scoped_links = {
755
+ name: url
756
+ for name, url in ics_links.items()
757
+ if self._bounded_substring_match(self._municipal, name)
758
+ }
759
+ if scoped_links:
760
+ ics_links = scoped_links
761
+
762
+ if not ics_links:
763
+ raise Exception("Could not find any ics links on the page")
764
+
765
+ matched_links = []
766
+ # If calendar(s) are specified, filter for them
767
+ if self._calendars and any(self._calendars):
768
+ # 1. Prefer an exact match (compare() ignores spaces and commas).
769
+ for cal in self._calendars:
770
+ for name, url in ics_links.items():
771
+ if self.compare(cal, name):
772
+ matched_links.append(url)
773
+ # 2. Fall back to a boundary-safe substring match. This stays
774
+ # tolerant (e.g. lets users omit an "ICS " prefix) while avoiding
775
+ # the Roman-numeral collision from plain substring matching.
776
+ if not matched_links:
777
+ for cal in self._calendars:
778
+ for name, url in ics_links.items():
779
+ if self._bounded_substring_match(cal, name):
780
+ matched_links.append(url)
781
+ # If no match, but only one ICS link exists (within the possibly
782
+ # municipal-scoped selection), use that one
783
+ if not matched_links and len(ics_links) == 1:
784
+ matched_links = list(ics_links.values())
785
+ else:
786
+ # No calendar specified
787
+ if len(ics_links) == 1:
788
+ matched_links = list(ics_links.values())
789
+ else:
790
+ # Multiple ICS links, but no calendar specified: raise required argument exception with suggestions
791
+ raise SourceArgumentRequiredWithSuggestions(
792
+ "calendar",
793
+ None,
794
+ list(ics_links.keys()),
795
+ )
796
+
797
+ if not matched_links:
798
+ raise SourceArgumentNotFoundWithSuggestions(
799
+ "calendar",
800
+ self._calendars,
801
+ list(ics_links.keys()),
802
+ )
803
+
804
+ entries = []
805
+ for link in matched_links:
806
+ entries += ICSSource(url=link).fetch()
807
+ return entries
808
+
809
+ def fetch_new(self, year: int | None = None) -> list[Collection]:
810
+ assert self._district_collection_url is not None
811
+ s = requests.Session()
812
+
813
+ if year is None:
814
+ year = datetime.now().year
815
+
816
+ r0 = s.get(self._district_collection_url)
817
+ soup = BeautifulSoup(r0.text, "html.parser")
818
+
819
+ # NEW: If ICS links are directly on the page, use them!
820
+ try:
821
+ entries_ = self._fetch_new_from_list(soup)
822
+ if entries_:
823
+ return entries_
824
+ except SourceArgumentNotFoundWithSuggestions as e:
825
+ # If ICS links exist but no calendar is matched, raise exception with suggestions
826
+ raise e
827
+ except Exception as e:
828
+ # Only fallback if really no ICS links were found
829
+ if str(e).startswith("Could not find any ics links"):
830
+ pass
831
+ else:
832
+ raise
833
+
834
+ # OLD: Fallback to previous behavior
835
+ NONCE_REGEX = r'"nonce":"([a-zA-Z0-9]+)"'
836
+ nonce_match = re.search(NONCE_REGEX, r0.text)
837
+ if (
838
+ not nonce_match
839
+ or not (nonce := nonce_match.group(1))
840
+ or not isinstance(nonce, str)
841
+ ):
842
+ raise Exception(
843
+ f"Could not find nonce for page {self._district_collection_url}"
844
+ )
845
+
846
+ mun_select = soup.select_one("select#gemeinde")
847
+ if not mun_select:
848
+ raise Exception(
849
+ f"Could not find list of municipalities for page {self._district_url}fuer-die-bevoelkerung/abholtermine/"
850
+ )
851
+
852
+ mun_options = mun_select.select("option")
853
+ mun_value: str | None = None
854
+ for city_option in mun_options:
855
+ if not city_option["value"]:
856
+ continue
857
+ if self._municipal and self.compare(self._municipal, city_option.text):
858
+ mun_value = city_option["value"]
859
+ break
860
+ if not mun_value:
861
+ raise SourceArgumentNotFoundWithSuggestions(
862
+ "municipal",
863
+ self._municipal,
864
+ [
865
+ city_option.text.strip()
866
+ for city_option in mun_options
867
+ if city_option["value"]
868
+ ],
869
+ )
870
+
871
+ # Build the data dict for get_zone_and_abfuhrtermine
872
+ # Based on HAR analysis: use jahr parameter (not search[jahr])
873
+ data: dict[str, str] = {
874
+ "action": "get_zone_and_abfuhrtermine",
875
+ "nonce": nonce,
876
+ "element": "",
877
+ "jahr": str(year),
878
+ "search[gemeinde]": mun_value,
879
+ }
880
+
881
+ # Try to get ort/postleitzahl/strasse if available from get_ort
882
+ try:
883
+ ort_data = self.get_ort(
884
+ s,
885
+ {
886
+ "action": "get_dropdown_data",
887
+ "nonce": nonce,
888
+ "element": "ort",
889
+ "search[gemeinde]": mun_value,
890
+ "jahr": str(year),
891
+ },
892
+ )
893
+ # Keep all location filters from the dropdown chain so the API can
894
+ # return the household-specific schedule instead of broad defaults.
895
+ for key in LOCATION_FILTER_KEYS:
896
+ if key in ort_data:
897
+ data[key] = ort_data[key]
898
+ except Exception:
899
+ # Continue with just gemeinde
900
+ pass
901
+
902
+ # Try direct API call first (works for St. Pölten, newer districts)
903
+ r = s.post(f"{self._district_url}wp-admin/admin-ajax.php", data=data)
904
+ r.raise_for_status()
905
+
906
+ response_json = r.json()
907
+
908
+ zones = []
909
+ # If direct call succeeds, get zones
910
+ if response_json.get("success"):
911
+ zones = response_json.get("zones", [])
912
+ # Fix TypeError: zones might be string "error" or "no dates found" instead of list
913
+ if not isinstance(zones, list):
914
+ zones = []
915
+
916
+ # If no zones returned (or success=false), try old method with fraktionen (for Scheibbs, older districts)
917
+ if not zones or len(zones) == 0:
918
+ # Try to get fraktionen from API
919
+ fraktionen_data = {
920
+ "action": "get_fraktionen",
921
+ "nonce": nonce,
922
+ "element": "",
923
+ "jahr": str(year),
924
+ "search[gemeinde]": mun_value,
925
+ }
926
+ # Add location data if we have it
927
+ for key in LOCATION_FILTER_KEYS:
928
+ if key in data:
929
+ fraktionen_data[key] = data[key]
930
+
931
+ r_frak = s.post(
932
+ f"{self._district_url}wp-admin/admin-ajax.php", data=fraktionen_data
933
+ )
934
+ r_frak.raise_for_status()
935
+ frak_response = r_frak.json()
936
+
937
+ # Parse fraktionen even if success=false, as long as HTML is present (Scheibbs case)
938
+ if frak_response.get("html"):
939
+ # Parse checkboxes from HTML
940
+ soup_frak = BeautifulSoup(frak_response["html"], "html.parser")
941
+ checkboxes = soup_frak.select(
942
+ "input[type=checkbox][name='fraktionen[]']"
943
+ )
944
+ # Only use checkboxes that have the "checked" attribute (regardless of disabled)
945
+ fraktionen = [
946
+ cb["value"] for cb in checkboxes if cb.has_attr("checked")
947
+ ]
948
+
949
+ if fraktionen:
950
+ # Call API again with fraktionen - use list of tuples for multiple values with same key
951
+ post_data = [
952
+ ("action", "get_zone_and_abfuhrtermine"),
953
+ ("nonce", nonce),
954
+ ("element", ""),
955
+ ("jahr", str(year)),
956
+ ("search[gemeinde]", mun_value),
957
+ ]
958
+ # Add location data if we have it
959
+ for key in LOCATION_FILTER_KEYS:
960
+ if key in data:
961
+ post_data.append((key, data[key]))
962
+ # Add all fraktionen
963
+ for frak in fraktionen:
964
+ post_data.append(("fraktionen[]", frak))
965
+
966
+ r2 = s.post(
967
+ f"{self._district_url}wp-admin/admin-ajax.php", data=post_data
968
+ )
969
+ r2.raise_for_status()
970
+ response_json = r2.json()
971
+
972
+ if response_json.get("success"):
973
+ zones = response_json.get("zones", [])
974
+ if not isinstance(zones, list):
975
+ return []
976
+
977
+ entries: list[Collection] = []
978
+ for zone in zones:
979
+ bin_type = zone.get("fraktion")
980
+ dates = zone.get("dates")
981
+ # Some zones (e.g. Zellerndorf/Hollabrunn) are returned by the API
982
+ # with a fraktion but no "dates" key at all, or an empty one.
983
+ if not bin_type or not dates:
984
+ continue
985
+ for date_dict in dates:
986
+ date_str = date_dict["date"]
987
+ date_ = datetime.strptime(date_str, "%Y-%m-%d").date()
988
+ entries.append(
989
+ Collection(
990
+ date=date_,
991
+ t=bin_type,
992
+ icon=self.get_icon(bin_type),
993
+ )
994
+ )
995
+ return entries