chellow 1706260266.0.0__tar.gz → 1706691842.0.0__tar.gz

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.

Potentially problematic release.


This version of chellow might be problematic. Click here for more details.

Files changed (461) hide show
  1. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/PKG-INFO +2 -1
  2. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/README.md +1 -0
  3. chellow-1706691842.0.0/VERSION +1 -0
  4. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/elexon.py +11 -3
  5. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/rcrc.py +16 -17
  6. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/system_price.py +12 -21
  7. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/tlms.py +100 -80
  8. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/non_core_contract.html +5 -2
  9. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/non_core_contract_edit.html +2 -2
  10. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/system_price/test_system_price.py +4 -3
  11. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_tlms.py +2 -1
  12. chellow-1706260266.0.0/VERSION +0 -1
  13. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/.ebextensions/chellow.config +0 -0
  14. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/.github/workflows/chellow.yml +0 -0
  15. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/.gitignore +0 -0
  16. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/application.py +0 -0
  17. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/bin/chellow_service_monitor.sh +0 -0
  18. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/bin/chellow_start.sh +0 -0
  19. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/__init__.py +0 -0
  20. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/api.py +0 -0
  21. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/bank_holidays.py +0 -0
  22. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/commands.py +0 -0
  23. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/dloads.py +0 -0
  24. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/__init__.py +0 -0
  25. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/aahedc.py +0 -0
  26. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_importer.py +0 -0
  27. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/__init__.py +0 -0
  28. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/activity_mop_stark_xlsx.py +0 -0
  29. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/annual_mop_stark_xlsx.py +0 -0
  30. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/bgb_edi.py +0 -0
  31. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/csv.py +0 -0
  32. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/engie_edi.py +0 -0
  33. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/engie_xls.py +0 -0
  34. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/engie_xlsx.py +0 -0
  35. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/gdf_csv.py +0 -0
  36. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/haven_csv.py +0 -0
  37. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/haven_edi.py +0 -0
  38. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/haven_edi_tprs.py +0 -0
  39. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/mm.py +0 -0
  40. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/nonsettlement_dc_stark_xlsx.py +0 -0
  41. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/settlement_dc_stark_xlsx.py +0 -0
  42. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/sse_edi.py +0 -0
  43. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bill_parsers/sww_xls.py +0 -0
  44. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bmarketidx.py +0 -0
  45. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/bsuos.py +0 -0
  46. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/ccl.py +0 -0
  47. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/cfd.py +0 -0
  48. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/computer.py +0 -0
  49. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/dno_rate_parser.py +0 -0
  50. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/duos.py +0 -0
  51. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/energy_management.py +0 -0
  52. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/hh_importer.py +0 -0
  53. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/hh_parser_bg_csv.py +0 -0
  54. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/hh_parser_df2.py +0 -0
  55. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/hh_parser_simple_csv.py +0 -0
  56. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/laf_import.py +0 -0
  57. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/lcc.py +0 -0
  58. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/mdd_importer.py +0 -0
  59. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/ro.py +0 -0
  60. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/scenario.py +0 -0
  61. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/tnuos.py +0 -0
  62. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/triad.py +0 -0
  63. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/e/views.py +0 -0
  64. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/edi_lib.py +0 -0
  65. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/gas/bill_import.py +0 -0
  66. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/gas/bill_parser_csv.py +0 -0
  67. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/gas/bill_parser_engie_edi.py +0 -0
  68. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/gas/ccl.py +0 -0
  69. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/gas/cv.py +0 -0
  70. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/gas/dn_rate_parser.py +0 -0
  71. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/gas/engine.py +0 -0
  72. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/gas/transportation.py +0 -0
  73. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/gas/views.py +0 -0
  74. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/general_import.py +0 -0
  75. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/models.py +0 -0
  76. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/national_grid.py +0 -0
  77. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/proxy.py +0 -0
  78. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/rate_server.py +0 -0
  79. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/__init__.py +0 -0
  80. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_109.py +0 -0
  81. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_111.py +0 -0
  82. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_169.py +0 -0
  83. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_177.py +0 -0
  84. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_181.py +0 -0
  85. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_183.py +0 -0
  86. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_187.py +0 -0
  87. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_215.py +0 -0
  88. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_219.py +0 -0
  89. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_231.py +0 -0
  90. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_233.py +0 -0
  91. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_241.py +0 -0
  92. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_247.py +0 -0
  93. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_29.py +0 -0
  94. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_291.py +0 -0
  95. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_33.py +0 -0
  96. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_387.py +0 -0
  97. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_41.py +0 -0
  98. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_429.py +0 -0
  99. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_59.py +0 -0
  100. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_81.py +0 -0
  101. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_87.py +0 -0
  102. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_asset_comparison.py +0 -0
  103. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_batches.py +0 -0
  104. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_bills.py +0 -0
  105. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_csv_llfcs.py +0 -0
  106. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_csv_site_hh_data.py +0 -0
  107. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_csv_site_snags.py +0 -0
  108. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_ecoes_comparison.py +0 -0
  109. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_g_monthly_duration.py +0 -0
  110. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_g_supplies_snapshot.py +0 -0
  111. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_g_supply_virtual_bill.py +0 -0
  112. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_g_virtual_bills.py +0 -0
  113. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_g_virtual_bills_hh.py +0 -0
  114. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_sscs.py +0 -0
  115. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/reports/report_supply_contacts.py +0 -0
  116. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/static/css/chellow.css +0 -0
  117. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/static/images/favicon.svg +0 -0
  118. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/static/images/favicon_test.svg +0 -0
  119. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/static/images/logo.png +0 -0
  120. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/static/js/htmx.min.js +0 -0
  121. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/403.html +0 -0
  122. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/base.html +0 -0
  123. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/bill_type.html +0 -0
  124. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/bill_types.html +0 -0
  125. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/chain.html +0 -0
  126. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/csv_sites_monthly_duration.html +0 -0
  127. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/downloads.html +0 -0
  128. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/asset_comparison.html +0 -0
  129. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/channel.html +0 -0
  130. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/channel_add.html +0 -0
  131. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/channel_edit.html +0 -0
  132. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/channel_snag.html +0 -0
  133. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/channel_snag_edit.html +0 -0
  134. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/channel_snags.html +0 -0
  135. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/comm.html +0 -0
  136. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/comms.html +0 -0
  137. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/cop.html +0 -0
  138. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/cops.html +0 -0
  139. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/csv_bills.html +0 -0
  140. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/csv_register_reads.html +0 -0
  141. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/csv_sites_hh_data.html +0 -0
  142. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/csv_sites_triad.html +0 -0
  143. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/csv_supplies_hh_data.html +0 -0
  144. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/csv_supplies_snapshot.html +0 -0
  145. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/csv_supplies_triad.html +0 -0
  146. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_auto_importer.html +0 -0
  147. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_batch.html +0 -0
  148. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_batch_add.html +0 -0
  149. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_batch_edit.html +0 -0
  150. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_batch_file.html +0 -0
  151. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_batch_file_edit.html +0 -0
  152. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_batch_upload_file.html +0 -0
  153. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_batches.html +0 -0
  154. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_bill.html +0 -0
  155. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_bill_add.html +0 -0
  156. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_bill_edit.html +0 -0
  157. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_bill_import.html +0 -0
  158. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_bill_imports.html +0 -0
  159. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_contract.html +0 -0
  160. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_contract_edit.html +0 -0
  161. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_contract_hh_import.html +0 -0
  162. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_contract_hh_imports.html +0 -0
  163. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_contracts.html +0 -0
  164. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_contracts_add.html +0 -0
  165. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_rate_script.html +0 -0
  166. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_rate_script_add.html +0 -0
  167. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dc_rate_script_edit.html +0 -0
  168. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dno.html +0 -0
  169. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dno_rate_script.html +0 -0
  170. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dno_rate_script_add.html +0 -0
  171. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dno_rate_script_edit.html +0 -0
  172. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dnos.html +0 -0
  173. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dtc_meter_type.html +0 -0
  174. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/dtc_meter_types.html +0 -0
  175. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/duration_report.html +0 -0
  176. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/elexon.html +0 -0
  177. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/em_hh_data.html +0 -0
  178. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/em_months.html +0 -0
  179. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/em_site.html +0 -0
  180. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/em_totals.html +0 -0
  181. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/energisation_status.html +0 -0
  182. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/energisation_statuses.html +0 -0
  183. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/era_edit.html +0 -0
  184. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/era_edit_form.html +0 -0
  185. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/era_supplier_bill_add.html +0 -0
  186. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/generator_type.html +0 -0
  187. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/generator_types.html +0 -0
  188. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/gsp_group.html +0 -0
  189. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/gsp_groups.html +0 -0
  190. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/hh_datum_edit.html +0 -0
  191. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/lafs.html +0 -0
  192. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/lcc.html +0 -0
  193. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/llfc.html +0 -0
  194. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/llfc_edit.html +0 -0
  195. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/llfcs.html +0 -0
  196. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/market_role.html +0 -0
  197. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/market_roles.html +0 -0
  198. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/meter_payment_type.html +0 -0
  199. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/meter_payment_types.html +0 -0
  200. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/meter_type.html +0 -0
  201. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/meter_types.html +0 -0
  202. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_batch.html +0 -0
  203. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_batch_add.html +0 -0
  204. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_batch_edit.html +0 -0
  205. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_batch_file.html +0 -0
  206. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_batch_file_edit.html +0 -0
  207. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_batch_upload_file.html +0 -0
  208. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_batches.html +0 -0
  209. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_bill.html +0 -0
  210. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_bill_add.html +0 -0
  211. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_bill_edit.html +0 -0
  212. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_bill_import.html +0 -0
  213. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_bill_imports.html +0 -0
  214. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_contract.html +0 -0
  215. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_contract_add.html +0 -0
  216. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_contract_edit.html +0 -0
  217. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_contracts.html +0 -0
  218. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_rate_script.html +0 -0
  219. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_rate_script_add.html +0 -0
  220. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mop_rate_script_edit.html +0 -0
  221. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mtc.html +0 -0
  222. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mtc_llfc.html +0 -0
  223. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mtc_llfc_ssc.html +0 -0
  224. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mtc_llfc_ssc_pc.html +0 -0
  225. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mtc_llfc_ssc_pcs.html +0 -0
  226. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mtc_llfc_sscs.html +0 -0
  227. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mtc_llfcs.html +0 -0
  228. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mtc_participant.html +0 -0
  229. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mtc_participants.html +0 -0
  230. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mtc_ssc.html +0 -0
  231. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mtc_sscs.html +0 -0
  232. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/mtcs.html +0 -0
  233. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/ods_monthly_duration.html +0 -0
  234. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/participant.html +0 -0
  235. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/participants.html +0 -0
  236. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/parties.html +0 -0
  237. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/party.html +0 -0
  238. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/pc.html +0 -0
  239. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/pcs.html +0 -0
  240. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/read_add.html +0 -0
  241. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/read_edit.html +0 -0
  242. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/read_type.html +0 -0
  243. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/read_types.html +0 -0
  244. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/scenario.html +0 -0
  245. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/scenario_add.html +0 -0
  246. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/scenario_docs.html +0 -0
  247. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/scenario_edit.html +0 -0
  248. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/scenarios.html +0 -0
  249. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/site_add_e_supply.html +0 -0
  250. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/site_add_e_supply_form.html +0 -0
  251. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/site_hh_data.html +0 -0
  252. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/site_site_snags.html +0 -0
  253. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/site_snag.html +0 -0
  254. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/site_snag_edit.html +0 -0
  255. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/site_snags.html +0 -0
  256. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/site_snags_edit.html +0 -0
  257. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/source.html +0 -0
  258. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/sources.html +0 -0
  259. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/ssc.html +0 -0
  260. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/sscs.html +0 -0
  261. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_batch.html +0 -0
  262. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_batch_add.html +0 -0
  263. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_batch_edit.html +0 -0
  264. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_batch_file.html +0 -0
  265. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_batch_file_add.html +0 -0
  266. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_batch_file_edit.html +0 -0
  267. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_batch_upload_file.html +0 -0
  268. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_batches.html +0 -0
  269. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_bill.html +0 -0
  270. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_bill_add.html +0 -0
  271. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_bill_edit.html +0 -0
  272. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_bill_import.html +0 -0
  273. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_bill_imports.html +0 -0
  274. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_contract.html +0 -0
  275. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_contract_add.html +0 -0
  276. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_contract_edit.html +0 -0
  277. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_contracts.html +0 -0
  278. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_rate_script.html +0 -0
  279. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_rate_script_add.html +0 -0
  280. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supplier_rate_script_edit.html +0 -0
  281. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supply.html +0 -0
  282. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supply_edit.html +0 -0
  283. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supply_eras.html +0 -0
  284. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supply_hh_data.html +0 -0
  285. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supply_months.html +0 -0
  286. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supply_note_add.html +0 -0
  287. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supply_note_edit.html +0 -0
  288. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supply_notes.html +0 -0
  289. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supply_post.html +0 -0
  290. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/supply_virtual_bill.html +0 -0
  291. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/tpr.html +0 -0
  292. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/e/tprs.html +0 -0
  293. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/edi_viewer.html +0 -0
  294. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/batch.html +0 -0
  295. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/batch_add.html +0 -0
  296. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/batch_edit.html +0 -0
  297. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/batches.html +0 -0
  298. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/bill.html +0 -0
  299. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/bill_add.html +0 -0
  300. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/bill_edit.html +0 -0
  301. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/bill_import.html +0 -0
  302. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/bill_imports.html +0 -0
  303. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/dn.html +0 -0
  304. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/dns.html +0 -0
  305. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/era_edit.html +0 -0
  306. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/exit_zone.html +0 -0
  307. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/industry_auto_importer.html +0 -0
  308. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/industry_contract.html +0 -0
  309. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/industry_contract_add.html +0 -0
  310. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/industry_contract_edit.html +0 -0
  311. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/industry_contracts.html +0 -0
  312. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/industry_rate_script.html +0 -0
  313. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/industry_rate_script_add.html +0 -0
  314. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/industry_rate_script_edit.html +0 -0
  315. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/ldz.html +0 -0
  316. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/read_add.html +0 -0
  317. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/read_edit.html +0 -0
  318. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/read_type.html +0 -0
  319. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/read_types.html +0 -0
  320. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/reading_frequencies.html +0 -0
  321. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/reading_frequency.html +0 -0
  322. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/reports.html +0 -0
  323. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/supplier_contract.html +0 -0
  324. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/supplier_contract_add.html +0 -0
  325. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/supplier_contract_edit.html +0 -0
  326. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/supplier_contracts.html +0 -0
  327. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/supplier_rate_script.html +0 -0
  328. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/supplier_rate_script_add.html +0 -0
  329. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/supplier_rate_script_edit.html +0 -0
  330. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/supplies.html +0 -0
  331. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/supply.html +0 -0
  332. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/supply_edit.html +0 -0
  333. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/supply_note_add.html +0 -0
  334. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/supply_note_edit.html +0 -0
  335. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/supply_notes.html +0 -0
  336. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/unit.html +0 -0
  337. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/g/units.html +0 -0
  338. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/general_import.html +0 -0
  339. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/general_imports.html +0 -0
  340. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/home.html +0 -0
  341. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/input_date.html +0 -0
  342. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/local_report.html +0 -0
  343. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/local_reports.html +0 -0
  344. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/macros.html +0 -0
  345. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/national_grid.html +0 -0
  346. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/non_core_auto_importer.html +0 -0
  347. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/non_core_contracts.html +0 -0
  348. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/non_core_rate_script.html +0 -0
  349. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/non_core_rate_script_add.html +0 -0
  350. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/non_core_rate_script_edit.html +0 -0
  351. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/object_summary.html +0 -0
  352. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/rate_server.html +0 -0
  353. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/report_run.html +0 -0
  354. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/report_run_asset_comparison.html +0 -0
  355. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/report_run_bill_check.html +0 -0
  356. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/report_run_ecoes_comparison.html +0 -0
  357. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/report_run_row.html +0 -0
  358. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/report_run_row_bill_check.html +0 -0
  359. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/report_run_supply_contacts.html +0 -0
  360. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/report_runs.html +0 -0
  361. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/site.html +0 -0
  362. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/site_add.html +0 -0
  363. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/site_edit.html +0 -0
  364. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/site_gen_graph.html +0 -0
  365. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/site_hh_data.html +0 -0
  366. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/site_months.html +0 -0
  367. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/site_used_graph.html +0 -0
  368. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/sites.html +0 -0
  369. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/supplies.html +0 -0
  370. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/system.html +0 -0
  371. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/tester.html +0 -0
  372. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/user.html +0 -0
  373. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/user_roles.html +0 -0
  374. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/templates/users.html +0 -0
  375. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/testing.py +0 -0
  376. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/utils.py +0 -0
  377. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/chellow/views.py +0 -0
  378. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/gpl.txt +0 -0
  379. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/pyproject.toml +0 -0
  380. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/requirements.txt +0 -0
  381. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/setup.cfg +0 -0
  382. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/systemd/chellow.service +0 -0
  383. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/systemd/chellow_upgrader.service +0 -0
  384. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/systemd/chellow_upgrader.timer +0 -0
  385. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/conftest.py +0 -0
  386. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_activity_mop_stark_xlsx.py +0 -0
  387. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_annual_mop_stark_xlsx.py +0 -0
  388. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_csv.py +0 -0
  389. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_engie_edi.py +0 -0
  390. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_engie_xls.py +0 -0
  391. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_engie_xlsx.py +0 -0
  392. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_haven_csv.py +0 -0
  393. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_haven_edi.py +0 -0
  394. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_haven_edi_tprs.py +0 -0
  395. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_nonsettlement_dc_stark_xlsx/bills.nonsettlement.dc.stark.xlsx +0 -0
  396. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_nonsettlement_dc_stark_xlsx/bills_old.nonsettlement.dc.stark.xlsx +0 -0
  397. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_nonsettlement_dc_stark_xlsx/test_bill_parser_nonsettlement_dc_stark_xlsx.py +0 -0
  398. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_settlement_dc_stark_xlsx/bills.settlement.dc.stark.xlsx +0 -0
  399. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_settlement_dc_stark_xlsx/test_bill_parser_settlement_dc_stark_xlsx.py +0 -0
  400. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_sse_edi.py +0 -0
  401. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/bill_parsers/test_bill_parser_sww_xls.py +0 -0
  402. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/system_price/prices.xls +0 -0
  403. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_aahedc.py +0 -0
  404. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_bill_importer.py +0 -0
  405. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_bsuos.py +0 -0
  406. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_ccl.py +0 -0
  407. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_cfd.py +0 -0
  408. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_computer.py +0 -0
  409. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_dno_rate_parser.py +0 -0
  410. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_duos.py +0 -0
  411. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_e_views.py +0 -0
  412. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_hh_importer.py +0 -0
  413. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_laf_importer.py +0 -0
  414. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_mdd_importer.py +0 -0
  415. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_rcrc_importer.py +0 -0
  416. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_ro.py +0 -0
  417. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_scenario.py +0 -0
  418. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_tnuos.py +0 -0
  419. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/e/test_triad.py +0 -0
  420. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/gas/bill_parsers/test_g_bill_parser_engie_edi.py +0 -0
  421. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/gas/test_dn_rate_parser.py +0 -0
  422. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/gas/test_engine.py +0 -0
  423. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/gas/test_g_cv.py +0 -0
  424. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/gas/test_gas_views.py +0 -0
  425. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/gas/test_transportation.py +0 -0
  426. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_g_monthly_duration.py +0 -0
  427. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_g_supplies_snapshot.py +0 -0
  428. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_g_supply_virtual_bill.py +0 -0
  429. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_g_virtual_bills_hh.py +0 -0
  430. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_109.py +0 -0
  431. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_111.py +0 -0
  432. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_169.py +0 -0
  433. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_181.py +0 -0
  434. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_183.py +0 -0
  435. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_187.py +0 -0
  436. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_219.py +0 -0
  437. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_231.py +0 -0
  438. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_247.py +0 -0
  439. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_29.py +0 -0
  440. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_291.py +0 -0
  441. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_33.py +0 -0
  442. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_387.py +0 -0
  443. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_41.py +0 -0
  444. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_429.py +0 -0
  445. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_59.py +0 -0
  446. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_81.py +0 -0
  447. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_87.py +0 -0
  448. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_asset_comparison.py +0 -0
  449. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_batches.py +0 -0
  450. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_bills.py +0 -0
  451. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_dno_vl_parser.py +0 -0
  452. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/reports/test_report_ecoes_comparison.py +0 -0
  453. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/test_chellow.py +0 -0
  454. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/test_edi_viewer.py +0 -0
  455. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/test_general_import.py +0 -0
  456. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/test_models.py +0 -0
  457. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/test_rate_server.py +0 -0
  458. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/test_testing.py +0 -0
  459. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/test_utils.py +0 -0
  460. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/test_views.py +0 -0
  461. {chellow-1706260266.0.0 → chellow-1706691842.0.0}/test/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: chellow
3
- Version: 1706260266.0.0
3
+ Version: 1706691842.0.0
4
4
  Summary: Web Application for checking UK energy bills.
5
5
  Project-URL: Homepage, https://github.com/WessexWater/chellow
6
6
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
@@ -55,6 +55,7 @@ Chellow is a Python web application that uses the PostgreSQL database. To instal
55
55
  Chellow, follow these steps:
56
56
 
57
57
  * Install [PostgreSQL](http://www.postgresql.org/) 12
58
+ * Set the PostgreSQL time zone to 'UTC'.
58
59
  * Create a PostgreSQL database: `createdb --encoding=UTF8 chellow`
59
60
  * Set up the following environment variables to configure Chellow:
60
61
 
@@ -26,6 +26,7 @@ Chellow is a Python web application that uses the PostgreSQL database. To instal
26
26
  Chellow, follow these steps:
27
27
 
28
28
  * Install [PostgreSQL](http://www.postgresql.org/) 12
29
+ * Set the PostgreSQL time zone to 'UTC'.
29
30
  * Create a PostgreSQL database: `createdb --encoding=UTF8 chellow`
30
31
  * Set up the following environment variables to configure Chellow:
31
32
 
@@ -0,0 +1 @@
1
+ __version__ = "1706691842.0.0"
@@ -57,16 +57,17 @@ def api_search(s, resource_id, sort=None):
57
57
  return res_j
58
58
 
59
59
 
60
- def run_import(sess, log, set_progress):
60
+ def run_import(sess, log, set_progress, scripting_key):
61
61
  log("Starting to import data from Elexon")
62
62
  s = requests.Session()
63
63
  s.verify = False
64
64
 
65
65
  for mod_name in ("chellow.e.system_price", "chellow.e.tlms", "chellow.e.rcrc"):
66
66
  mod = import_module(mod_name)
67
- mod.elexon_import(sess, log, set_progress, s)
67
+ mod.elexon_import(sess, log, set_progress, s, scripting_key)
68
68
 
69
69
 
70
+ ELEXON_PORTAL_SCRIPTING_KEY_KEY = "elexonportal_scripting_key"
70
71
  LAST_RUN_KEY = "last_run"
71
72
  GLOBAL_ALERT = "There's a problem with an <a href='/e/elexon'>Elexon import</a>."
72
73
  ELEXON_STATE_KEY = "elexon"
@@ -119,6 +120,13 @@ class Elexon(threading.Thread):
119
120
  with Session() as sess:
120
121
  try:
121
122
  config = Contract.get_non_core_by_name(sess, "configuration")
123
+ props = config.make_properties()
124
+ scripting_key = props.get(ELEXON_PORTAL_SCRIPTING_KEY_KEY)
125
+ if scripting_key is None:
126
+ raise BadRequest(
127
+ f"The property {ELEXON_PORTAL_SCRIPTING_KEY_KEY} "
128
+ f"cannot be found in the configuration properties."
129
+ )
122
130
  state = config.make_state()
123
131
  try:
124
132
  elexon_state = state[ELEXON_STATE_KEY]
@@ -128,7 +136,7 @@ class Elexon(threading.Thread):
128
136
  elexon_state[LAST_RUN_KEY] = utc_datetime_now()
129
137
  config.update_state(state)
130
138
  sess.commit()
131
- run_import(sess, self.log, self.set_progress)
139
+ run_import(sess, self.log, self.set_progress, scripting_key)
132
140
  except BaseException as e:
133
141
  msg = f"{e.description} " if isinstance(e, BadRequest) else ""
134
142
  self.log(f"{msg}{traceback.format_exc()}")
@@ -63,14 +63,23 @@ def _find_month(lines, month_start, month_finish):
63
63
  next(parser)
64
64
  month_rcrcs = {}
65
65
  for values in parser:
66
- hh_date = to_utc(ct_datetime_parse(values[0], "%d/%m/%Y"))
66
+ if len(values) == 0:
67
+ continue
68
+ date_str = values[0]
69
+ if "/" in date_str:
70
+ pattern = "%d/%m/%Y"
71
+ elif " " in date_str:
72
+ pattern = "%d %b %Y"
73
+ else:
74
+ raise BadRequest(f"Date format {date_str} not recognized.")
75
+ hh_date = to_utc(ct_datetime_parse(date_str, pattern))
67
76
  hh_date += relativedelta(minutes=30 * int(values[2]))
68
77
  if month_start <= hh_date <= month_finish:
69
78
  month_rcrcs[key_format(hh_date)] = Decimal(values[3])
70
79
  return month_rcrcs
71
80
 
72
81
 
73
- def elexon_import(sess, log, set_progress, s):
82
+ def elexon_import(sess, log, set_progress, s, scripting_key):
74
83
  log("Starting to check RCRCs.")
75
84
  contract = Contract.get_non_core_by_name(sess, "rcrc")
76
85
  latest_rs = (
@@ -90,25 +99,15 @@ def elexon_import(sess, log, set_progress, s):
90
99
  month_start, month_finish = months[1]
91
100
  now = utc_datetime_now()
92
101
  if now > month_finish:
93
- config = Contract.get_non_core_by_name(sess, "configuration")
94
- props = config.make_properties()
95
-
96
- scripting_key = props.get(ELEXON_PORTAL_SCRIPTING_KEY_KEY)
97
- if scripting_key is None:
98
- raise BadRequest(
99
- f"The property {ELEXON_PORTAL_SCRIPTING_KEY_KEY} cannot be found in "
100
- f"the configuration properties."
101
- )
102
-
103
- contract_props = contract.make_properties()
104
- url_str = f"{contract_props['url']}file/download/RCRC_FILE?key={scripting_key}"
102
+ params = {"key": scripting_key}
103
+ url_str = "https://downloads.elexonportal.co.uk/file/download/RCRC_FILE"
105
104
  log(
106
- f"Downloading {url_str} to see if data is available from "
107
- f"{hh_format(month_start)} to {hh_format(month_finish)}."
105
+ f"Downloading {url_str}?key={scripting_key} to see if data is available "
106
+ f"from {hh_format(month_start)} to {hh_format(month_finish)}."
108
107
  )
109
108
 
110
109
  sess.rollback() # Avoid long-running transaction
111
- r = s.get(url_str, timeout=60)
110
+ r = s.get(url_str, timeout=120, params=params)
112
111
  month_rcrcs = _find_month(
113
112
  (x.decode() for x in r.iter_lines()), month_start, month_finish
114
113
  )
@@ -2,6 +2,8 @@ import datetime
2
2
  import traceback
3
3
  from datetime import timedelta as Timedelta
4
4
 
5
+ from sqlalchemy import select
6
+
5
7
  from werkzeug.exceptions import BadRequest
6
8
 
7
9
  import xlrd
@@ -12,9 +14,6 @@ from chellow.models import Contract, RateScript
12
14
  from chellow.utils import HH, hh_format, to_ct, to_utc
13
15
 
14
16
 
15
- ELEXON_PORTAL_SCRIPTING_KEY_KEY = "elexonportal_scripting_key"
16
-
17
-
18
17
  def key_format(dt):
19
18
  return dt.strftime("%d %H:%M")
20
19
 
@@ -61,7 +60,7 @@ def hh(data_source):
61
60
  h["ssp-gbp"] = h["nbp-kwh"] * ssp
62
61
 
63
62
 
64
- def elexon_import(sess, log, set_progress, s):
63
+ def elexon_import(sess, log, set_progress, s, scripting_key):
65
64
  contract = Contract.get_non_core_by_name(sess, "system_price")
66
65
  contract_props = contract.make_properties()
67
66
 
@@ -74,9 +73,9 @@ def elexon_import(sess, log, set_progress, s):
74
73
 
75
74
  log("Starting to check System Prices.")
76
75
 
77
- for rscript in (
78
- sess.query(RateScript)
79
- .filter(RateScript.contract == contract)
76
+ for rscript in sess.scalars(
77
+ select(RateScript)
78
+ .where(RateScript.contract == contract)
80
79
  .order_by(RateScript.start_date.desc())
81
80
  ):
82
81
  ns = loads(rscript.script)
@@ -87,24 +86,16 @@ def elexon_import(sess, log, set_progress, s):
87
86
  elif rates[key_format(rscript.finish_date)]["run"] == "DF":
88
87
  fill_start = rscript.finish_date + HH
89
88
  break
89
+ params = {"key": scripting_key}
90
+ url = "https://downloads.elexonportal.co.uk/file/download/BESTVIEWPRICES_FILE"
90
91
 
91
- config = Contract.get_non_core_by_name(sess, "configuration")
92
- config_props = config.make_properties()
93
-
94
- scripting_key = config_props.get(ELEXON_PORTAL_SCRIPTING_KEY_KEY)
95
- if scripting_key is None:
96
- raise BadRequest(
97
- f"The property {ELEXON_PORTAL_SCRIPTING_KEY_KEY} cannot be found in "
98
- f"the configuration properties."
99
- )
100
- url = (
101
- f"{contract_props['url']}file/download/BESTVIEWPRICES_FILE?key={scripting_key}"
92
+ log(
93
+ f"Downloading from {url}?key={scripting_key} and extracting data from "
94
+ f"{hh_format(fill_start)}"
102
95
  )
103
96
 
104
- log(f"Downloading from {url} and extracting data from {hh_format(fill_start)}")
105
-
106
97
  sess.rollback() # Avoid long-running transactions
107
- res = s.get(url)
98
+ res = s.get(url, params=params)
108
99
  log(f"Received {res.status_code} {res.reason}")
109
100
  data = res.content
110
101
  book = xlrd.open_workbook(file_contents=data)
@@ -4,7 +4,7 @@ from decimal import Decimal, InvalidOperation
4
4
 
5
5
  from dateutil.relativedelta import relativedelta
6
6
 
7
- from sqlalchemy import or_
7
+ from sqlalchemy import or_, select
8
8
  from sqlalchemy.sql.expression import null
9
9
 
10
10
  from werkzeug.exceptions import BadRequest
@@ -12,11 +12,9 @@ from werkzeug.exceptions import BadRequest
12
12
  from zish import dumps, loads
13
13
 
14
14
  from chellow.models import Contract, RateScript
15
- from chellow.utils import HH, hh_format, to_ct, to_utc
15
+ from chellow.utils import HH, hh_format, hh_range, to_ct, to_utc
16
16
 
17
17
 
18
- ELEXON_PORTAL_SCRIPTING_KEY_KEY = "elexonportal_scripting_key"
19
-
20
18
  RUNS = ["DF", "RF", "R3", "R2", "R1", "SF", "II"]
21
19
 
22
20
 
@@ -77,51 +75,76 @@ def hh(data_source, run="DF"):
77
75
  h["nbp-kwh"] = h["gsp-kwh"] * tlm
78
76
 
79
77
 
80
- def _save_cache(sess, cache):
81
- for yr, yr_cache in cache.items():
82
- for month, (rs, rates, rts) in tuple(yr_cache.items()):
83
- rs.script = dumps(rates)
84
- sess.commit()
85
- del yr_cache[month]
78
+ def _find_complete_date(caches, sess, contract, cache):
79
+ for rs in sess.scalars(
80
+ select(RateScript)
81
+ .where(RateScript.contract == contract, RateScript.finish_date != null())
82
+ .order_by(RateScript.start_date.desc())
83
+ ):
84
+ rates = rs.make_script()
85
+ rates["id"] = rs.id
86
+ cache["rate_scripts"].append(rates)
87
+ timestamps = cache["timestamps"]
88
+ tlms = rates["tlms"]
89
+ complete = True
90
+ for dt in hh_range(caches, rs.start_date, rs.finish_date):
91
+ timestamps[dt] = rates
92
+ key = key_format(dt)
93
+ if key in tlms:
94
+ gps = tlms[key]
95
+ for group in GSP_GROUP_LOOKUP.values():
96
+ if not (group in gps and "DF" in gps[group]):
97
+ complete = False
98
+ else:
99
+ complete = False
100
+
101
+ if complete:
102
+ return rs.finish_date
86
103
 
87
104
 
88
- def elexon_import(sess, log, set_progress, s):
89
- cache = {}
105
+ def elexon_import(sess, log, set_progress, s, scripting_key):
106
+ cache = {"rate_scripts": [], "timestamps": {}}
107
+ caches = {}
90
108
  log("Starting to check TLMs.")
91
109
  contract = Contract.get_non_core_by_name(sess, "tlms")
92
110
  contract_props = contract.make_properties()
93
111
  if contract_props.get("enabled", False):
94
- config = Contract.get_non_core_by_name(sess, "configuration")
95
- props = config.make_properties()
96
- scripting_key = props.get(ELEXON_PORTAL_SCRIPTING_KEY_KEY)
97
- if scripting_key is None:
98
- raise BadRequest(
99
- f"The property {ELEXON_PORTAL_SCRIPTING_KEY_KEY} cannot be "
100
- f"found in the configuration properties."
101
- )
102
112
 
103
- url_str = f"{contract_props['url']}file/download/TLM_FILE?key={scripting_key}"
113
+ params = {"key": scripting_key}
114
+ url_str = "https://downloads.elexonportal.co.uk/file/download/TLM_FILE"
115
+ complete_date = _find_complete_date(caches, sess, contract, cache)
116
+ log(f"Found complete up to {complete_date}")
104
117
 
105
118
  sess.rollback() # Avoid long-running transaction
106
- r = s.get(url_str)
119
+ r = s.get(url_str, params=params, timeout=120)
107
120
  parser = csv.reader(
108
121
  (x.decode() for x in r.iter_lines()), delimiter=",", quotechar='"'
109
122
  )
110
- log(f"Opened {url_str}.")
123
+ log(f"Opened {url_str}?key={scripting_key}.")
111
124
 
112
125
  next(parser, None)
113
126
  for values in parser:
114
127
  if len(values) == 0:
115
128
  continue
116
129
 
117
- elif values[3] == "":
130
+ set_progress(values[0])
131
+
132
+ if values[3] == "":
118
133
  for zone in GSP_GROUP_LOOKUP.keys():
119
134
  values[3] = zone
120
- _process_line(cache, sess, contract, log, values)
135
+ _process_line(
136
+ cache, sess, contract, log, values, complete_date, caches
137
+ )
121
138
  else:
122
- _process_line(cache, sess, contract, log, values)
139
+ _process_line(cache, sess, contract, log, values, complete_date, caches)
140
+
141
+ for rscript in cache["rate_scripts"]:
142
+ rs = sess.scalars(
143
+ select(RateScript).where(RateScript.id == rscript["id"])
144
+ ).one()
145
+ rs.script = dumps({"tlms": rscript["tlms"]})
146
+ sess.commit()
123
147
 
124
- _save_cache(sess, cache)
125
148
  else:
126
149
  log(
127
150
  "The importer is disabled. Set 'enabled' to 'true' in the "
@@ -148,10 +171,12 @@ GSP_GROUP_LOOKUP = {
148
171
  }
149
172
 
150
173
 
151
- def _process_line(cache, sess, contract, log_func, values):
174
+ def _process_line(cache, sess, contract, log_func, values, complete_date, caches):
152
175
  hh_date_ct = to_ct(Datetime.strptime(values[0], "%d/%m/%Y"))
153
176
  hh_date = to_utc(hh_date_ct)
154
177
  hh_date += relativedelta(minutes=30 * (int(values[2]) - 1))
178
+ if complete_date is not None and hh_date <= complete_date:
179
+ return
155
180
  run = values[1]
156
181
  gsp_group_code = GSP_GROUP_LOOKUP[values[3]]
157
182
  off_taking_str = values[4]
@@ -166,45 +191,13 @@ def _process_line(cache, sess, contract, log_func, values):
166
191
 
167
192
  delivering = Decimal(values[5])
168
193
 
194
+ key = key_format(hh_date)
169
195
  try:
170
- rs, rates, rts = cache[hh_date.year][hh_date.month]
196
+ cache["timestamps"][hh_date]["tlms"][key][gsp_group_code][run]
171
197
  except KeyError:
172
- _save_cache(sess, cache)
173
198
  try:
174
- yr_cache = cache[hh_date.year]
199
+ rate = cache["timestamps"][hh_date]
175
200
  except KeyError:
176
- yr_cache = cache[hh_date.year] = {}
177
-
178
- rs = (
179
- sess.query(RateScript)
180
- .filter(
181
- RateScript.contract == contract,
182
- RateScript.start_date <= hh_date,
183
- or_(
184
- RateScript.finish_date == null(), RateScript.finish_date >= hh_date
185
- ),
186
- )
187
- .first()
188
- )
189
- while rs is None:
190
- log_func(f"There's no rate script at {hh_format(hh_date)}.")
191
- latest_rs = (
192
- sess.query(RateScript)
193
- .filter(RateScript.contract == contract)
194
- .order_by(RateScript.start_date.desc())
195
- .first()
196
- )
197
- contract.update_rate_script(
198
- sess,
199
- latest_rs,
200
- latest_rs.start_date,
201
- latest_rs.start_date + relativedelta(months=2) - HH,
202
- loads(latest_rs.script),
203
- )
204
- new_rs_start = latest_rs.start_date + relativedelta(months=1)
205
- contract.insert_rate_script(sess, new_rs_start, {})
206
- sess.commit()
207
- log_func(f"Added a rate script starting at {hh_format(new_rs_start)}.")
208
201
 
209
202
  rs = (
210
203
  sess.query(RateScript)
@@ -218,29 +211,56 @@ def _process_line(cache, sess, contract, log_func, values):
218
211
  )
219
212
  .first()
220
213
  )
214
+ assert rs is None
215
+ while rs is None:
216
+ log_func(f"There's no rate script at {hh_format(hh_date)}.")
217
+ latest_rs = (
218
+ sess.query(RateScript)
219
+ .filter(RateScript.contract == contract)
220
+ .order_by(RateScript.start_date.desc())
221
+ .first()
222
+ )
223
+ contract.update_rate_script(
224
+ sess,
225
+ latest_rs,
226
+ latest_rs.start_date,
227
+ latest_rs.start_date + relativedelta(months=2) - HH,
228
+ loads(latest_rs.script),
229
+ )
230
+ new_rs_start = latest_rs.start_date + relativedelta(months=1)
231
+ new_rs = contract.insert_rate_script(sess, new_rs_start, {})
232
+ rt = {"tlms": {}, "id": new_rs.id}
233
+ cache["rate_scripts"].append(rt)
234
+ for h in hh_range(caches, new_rs.start_date, new_rs.finish_date):
235
+ cache["timestamps"][h] = rt
236
+ sess.commit()
237
+ log_func(f"Added a rate script starting at {hh_format(new_rs_start)}.")
238
+
239
+ rs = (
240
+ sess.query(RateScript)
241
+ .filter(
242
+ RateScript.contract == contract,
243
+ RateScript.start_date <= hh_date,
244
+ or_(
245
+ RateScript.finish_date == null(),
246
+ RateScript.finish_date >= hh_date,
247
+ ),
248
+ )
249
+ .first()
250
+ )
221
251
 
222
- rates = loads(rs.script)
252
+ rate = cache["timestamps"][hh_date]
223
253
 
224
254
  try:
225
- rts = rates["tlms"]
255
+ existing = rate["tlms"][key]
226
256
  except KeyError:
227
- rts = rates["tlms"] = {}
228
-
229
- yr_cache[hh_date.month] = rs, rates, rts
230
- sess.rollback()
231
-
232
- key = key_format(hh_date)
233
- try:
234
- existing = rts[key]
235
- except KeyError:
236
- existing = rts[key] = {}
257
+ existing = rate["tlms"][key] = {}
237
258
 
238
- try:
239
- group = existing[gsp_group_code]
240
- except KeyError:
241
- group = existing[gsp_group_code] = {}
259
+ try:
260
+ group = existing[gsp_group_code]
261
+ except KeyError:
262
+ group = existing[gsp_group_code] = {}
242
263
 
243
- if run not in group:
244
264
  group[run] = {"off_taking": off_taking, "delivering": delivering}
245
265
 
246
266
  log_func(
@@ -10,8 +10,7 @@
10
10
  {% endblock %}
11
11
 
12
12
  {% block content %}
13
- {% if contract.name in [
14
- 'bank_holidays', 'bmarketidx', 'rcrc', 'system_price', 'tlms'] %}
13
+ {% if contract.name in ['bank_holidays', 'bmarketidx'] %}
15
14
  <p>
16
15
  <a href="/non_core_contracts/{{contract.id}}/auto_importer">Automatic Importer</a>
17
16
  </p>
@@ -34,6 +33,10 @@
34
33
  <li><a href="/national_grid">Forecast Rates</a></li>
35
34
  </ul>
36
35
  </p>
36
+ {% elif contract.name in ['rcrc', 'system_price', 'tlms'] %}
37
+ <p>
38
+ <a href="/e/elexon">Automatic Importer</a>
39
+ </p>
37
40
  {% endif %}
38
41
 
39
42
 
@@ -68,8 +68,8 @@ to the 'urls' list. */
68
68
  {% elif contract.name == 'tlms' %}
69
69
  <h4>Example</h4>
70
70
  <pre>{
71
- "enabled": true,
72
- "url": "https://downloads.elexonportal.co.uk/"}
71
+ "enabled": true,
72
+ }
73
73
 
74
74
  /* Requires the 'elexonportal_scripting_key' to be set in the 'configuration'
75
75
  non-core contract */
@@ -10,7 +10,6 @@ def test_process(sess, mocker):
10
10
  participant.insert_party(sess, market_role_Z, "non-core", from_date, None, None)
11
11
  system_price_properties = {
12
12
  "enabled": True,
13
- "url": "https://example.com",
14
13
  }
15
14
  rate_script_properties = {"gbp_per_nbp_mwh": {}}
16
15
  Contract.insert_non_core(
@@ -47,11 +46,13 @@ def test_process(sess, mocker):
47
46
  mock_response.reason = "OK"
48
47
 
49
48
  mock_set_progress = mocker.Mock()
50
- elexon_import(sess, log_f, mock_set_progress, mock_s)
49
+ scripting_key = "xxx"
50
+ elexon_import(sess, log_f, mock_set_progress, mock_s, scripting_key)
51
51
 
52
52
  assert log == [
53
53
  "Starting to check System Prices.",
54
- "Downloading from https://example.comfile/download/BESTVIEWPRICES_FILE?"
54
+ "Downloading from "
55
+ "https://downloads.elexonportal.co.uk/file/download/BESTVIEWPRICES_FILE?"
55
56
  "key=xxx and extracting data from 2001-04-01 01:00",
56
57
  "Received 200 OK",
57
58
  "Successfully extracted data.",
@@ -214,5 +214,6 @@ def test_elexon_import(sess, mocker):
214
214
  lines = [b"", b""]
215
215
  mock_response.iter_lines = mocker.Mock(return_value=lines)
216
216
  s.get = mocker.Mock(return_value=mock_response)
217
+ scripting_key = mocker.Mock()
217
218
 
218
- elexon_import(sess, log, set_progress, s)
219
+ elexon_import(sess, log, set_progress, s, scripting_key)
@@ -1 +0,0 @@
1
- __version__ = "1706260266.0.0"