chellow 1710934022.0.0__tar.gz → 1712589951.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 (471) hide show
  1. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/PKG-INFO +1 -1
  2. chellow-1712589951.0.0/VERSION +1 -0
  3. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/__init__.py +4 -3
  4. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/dloads.py +5 -3
  5. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/views.py +5 -1
  6. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/models.py +14 -6
  7. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_181.py +10 -9
  8. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_241.py +23 -32
  9. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_asset_comparison.py +9 -11
  10. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_csv_llfcs.py +10 -9
  11. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_csv_site_snags.py +9 -13
  12. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_g_virtual_bills.py +10 -13
  13. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_sscs.py +3 -8
  14. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_supply_contacts.py +3 -14
  15. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/conftest.py +4 -1
  16. chellow-1712589951.0.0/test/reports/test_g_virtual_bills.py +24 -0
  17. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_181.py +22 -7
  18. chellow-1712589951.0.0/test/reports/test_report_241.py +215 -0
  19. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_291.py +6 -13
  20. chellow-1712589951.0.0/test/reports/test_report_asset_comparison.py +61 -0
  21. chellow-1712589951.0.0/test/reports/test_report_csv_llfcs.py +15 -0
  22. chellow-1712589951.0.0/test/reports/test_report_csv_site_snags.py +15 -0
  23. chellow-1712589951.0.0/test/reports/test_report_sscs.py +16 -0
  24. chellow-1712589951.0.0/test/reports/test_report_supply_contacts.py +24 -0
  25. chellow-1710934022.0.0/VERSION +0 -1
  26. chellow-1710934022.0.0/chellow/reports/report_177.py +0 -285
  27. chellow-1710934022.0.0/chellow/reports/report_215.py +0 -176
  28. chellow-1710934022.0.0/test/reports/test_report_asset_comparison.py +0 -22
  29. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/.ebextensions/chellow.config +0 -0
  30. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/.github/workflows/chellow.yml +0 -0
  31. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/.gitignore +0 -0
  32. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/README.md +0 -0
  33. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/application.py +0 -0
  34. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/bin/chellow_service_monitor.sh +0 -0
  35. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/bin/chellow_start.sh +0 -0
  36. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/api.py +0 -0
  37. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/bank_holidays.py +0 -0
  38. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/commands.py +0 -0
  39. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/__init__.py +0 -0
  40. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/aahedc.py +0 -0
  41. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_importer.py +0 -0
  42. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/__init__.py +0 -0
  43. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/activity_mop_stark_xlsx.py +0 -0
  44. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/annual_mop_stark_xlsx.py +0 -0
  45. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/bgb_edi.py +0 -0
  46. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/csv.py +0 -0
  47. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/engie_edi.py +0 -0
  48. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/engie_xls.py +0 -0
  49. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/engie_xlsx.py +0 -0
  50. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/gdf_csv.py +0 -0
  51. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/haven_csv.py +0 -0
  52. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/haven_edi.py +0 -0
  53. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/haven_edi_tprs.py +0 -0
  54. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/mm.py +0 -0
  55. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/nonsettlement_dc_stark_xlsx.py +0 -0
  56. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/settlement_dc_stark_xlsx.py +0 -0
  57. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/sse_edi.py +0 -0
  58. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bill_parsers/sww_xls.py +0 -0
  59. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bmarketidx.py +0 -0
  60. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/bsuos.py +0 -0
  61. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/ccl.py +0 -0
  62. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/cfd.py +0 -0
  63. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/computer.py +0 -0
  64. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/dno_rate_parser.py +0 -0
  65. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/duos.py +0 -0
  66. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/elexon.py +0 -0
  67. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/energy_management.py +0 -0
  68. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/hh_importer.py +0 -0
  69. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/hh_parser_bg_csv.py +0 -0
  70. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/hh_parser_df2.py +0 -0
  71. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/hh_parser_simple_csv.py +0 -0
  72. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/laf_import.py +0 -0
  73. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/lcc.py +0 -0
  74. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/mdd_importer.py +0 -0
  75. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/rcrc.py +0 -0
  76. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/ro.py +0 -0
  77. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/scenario.py +0 -0
  78. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/system_price.py +0 -0
  79. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/tlms.py +0 -0
  80. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/tnuos.py +0 -0
  81. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/e/triad.py +0 -0
  82. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/edi_lib.py +0 -0
  83. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/gas/bill_import.py +0 -0
  84. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/gas/bill_parser_csv.py +0 -0
  85. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/gas/bill_parser_engie_edi.py +0 -0
  86. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/gas/ccl.py +0 -0
  87. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/gas/cv.py +0 -0
  88. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/gas/dn_rate_parser.py +0 -0
  89. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/gas/engine.py +0 -0
  90. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/gas/transportation.py +0 -0
  91. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/gas/views.py +0 -0
  92. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/general_import.py +0 -0
  93. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/national_grid.py +0 -0
  94. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/proxy.py +0 -0
  95. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/rate_server.py +0 -0
  96. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/__init__.py +0 -0
  97. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_109.py +0 -0
  98. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_111.py +0 -0
  99. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_169.py +0 -0
  100. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_183.py +0 -0
  101. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_187.py +0 -0
  102. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_219.py +0 -0
  103. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_231.py +0 -0
  104. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_233.py +0 -0
  105. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_247.py +0 -0
  106. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_29.py +0 -0
  107. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_291.py +0 -0
  108. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_33.py +0 -0
  109. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_387.py +0 -0
  110. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_41.py +0 -0
  111. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_429.py +0 -0
  112. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_59.py +0 -0
  113. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_81.py +0 -0
  114. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_87.py +0 -0
  115. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_batches.py +0 -0
  116. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_bills.py +0 -0
  117. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_csv_site_hh_data.py +0 -0
  118. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_ecoes_comparison.py +0 -0
  119. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_g_monthly_duration.py +0 -0
  120. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_g_supplies_snapshot.py +0 -0
  121. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_g_supply_virtual_bill.py +0 -0
  122. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/reports/report_g_virtual_bills_hh.py +0 -0
  123. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/static/css/chellow.css +0 -0
  124. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/static/images/favicon.svg +0 -0
  125. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/static/images/favicon_test.svg +0 -0
  126. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/static/images/logo.png +0 -0
  127. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/static/js/htmx.min.js +0 -0
  128. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/403.html +0 -0
  129. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/base.html +0 -0
  130. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/bill_type.html +0 -0
  131. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/bill_types.html +0 -0
  132. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/chain.html +0 -0
  133. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/csv_sites_monthly_duration.html +0 -0
  134. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/downloads.html +0 -0
  135. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/asset_comparison.html +0 -0
  136. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/channel.html +0 -0
  137. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/channel_add.html +0 -0
  138. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/channel_edit.html +0 -0
  139. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/channel_snag.html +0 -0
  140. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/channel_snag_edit.html +0 -0
  141. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/channel_snags.html +0 -0
  142. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/comm.html +0 -0
  143. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/comms.html +0 -0
  144. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/cop.html +0 -0
  145. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/cops.html +0 -0
  146. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/csv_bills.html +0 -0
  147. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/csv_register_reads.html +0 -0
  148. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/csv_sites_hh_data.html +0 -0
  149. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/csv_sites_triad.html +0 -0
  150. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/csv_supplies_hh_data.html +0 -0
  151. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/csv_supplies_snapshot.html +0 -0
  152. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/csv_supplies_triad.html +0 -0
  153. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_auto_importer.html +0 -0
  154. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_batch.html +0 -0
  155. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_batch_add.html +0 -0
  156. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_batch_edit.html +0 -0
  157. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_batch_file.html +0 -0
  158. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_batch_file_edit.html +0 -0
  159. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_batch_upload_file.html +0 -0
  160. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_batches.html +0 -0
  161. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_bill.html +0 -0
  162. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_bill_add.html +0 -0
  163. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_bill_edit.html +0 -0
  164. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_bill_import.html +0 -0
  165. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_bill_imports.html +0 -0
  166. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_contract.html +0 -0
  167. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_contract_edit.html +0 -0
  168. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_contract_hh_import.html +0 -0
  169. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_contract_hh_imports.html +0 -0
  170. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_contracts.html +0 -0
  171. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_contracts_add.html +0 -0
  172. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_rate_script.html +0 -0
  173. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_rate_script_add.html +0 -0
  174. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dc_rate_script_edit.html +0 -0
  175. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dno.html +0 -0
  176. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dno_rate_script.html +0 -0
  177. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dno_rate_script_add.html +0 -0
  178. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dno_rate_script_edit.html +0 -0
  179. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dnos.html +0 -0
  180. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dtc_meter_type.html +0 -0
  181. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/dtc_meter_types.html +0 -0
  182. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/duration_report.html +0 -0
  183. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/elexon.html +0 -0
  184. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/em_hh_data.html +0 -0
  185. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/em_months.html +0 -0
  186. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/em_site.html +0 -0
  187. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/em_totals.html +0 -0
  188. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/energisation_status.html +0 -0
  189. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/energisation_statuses.html +0 -0
  190. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/era_edit.html +0 -0
  191. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/era_edit_form.html +0 -0
  192. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/era_supplier_bill_add.html +0 -0
  193. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/generator_type.html +0 -0
  194. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/generator_types.html +0 -0
  195. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/gsp_group.html +0 -0
  196. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/gsp_groups.html +0 -0
  197. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/hh_datum_edit.html +0 -0
  198. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/lafs.html +0 -0
  199. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/lcc.html +0 -0
  200. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/llfc.html +0 -0
  201. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/llfc_edit.html +0 -0
  202. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/llfcs.html +0 -0
  203. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/market_role.html +0 -0
  204. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/market_roles.html +0 -0
  205. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/meter_payment_type.html +0 -0
  206. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/meter_payment_types.html +0 -0
  207. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/meter_type.html +0 -0
  208. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/meter_types.html +0 -0
  209. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_batch.html +0 -0
  210. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_batch_add.html +0 -0
  211. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_batch_edit.html +0 -0
  212. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_batch_file.html +0 -0
  213. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_batch_file_edit.html +0 -0
  214. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_batch_upload_file.html +0 -0
  215. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_batches.html +0 -0
  216. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_bill.html +0 -0
  217. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_bill_add.html +0 -0
  218. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_bill_edit.html +0 -0
  219. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_bill_import.html +0 -0
  220. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_bill_imports.html +0 -0
  221. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_contract.html +0 -0
  222. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_contract_add.html +0 -0
  223. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_contract_edit.html +0 -0
  224. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_contracts.html +0 -0
  225. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_rate_script.html +0 -0
  226. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_rate_script_add.html +0 -0
  227. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mop_rate_script_edit.html +0 -0
  228. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mtc.html +0 -0
  229. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mtc_llfc.html +0 -0
  230. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mtc_llfc_ssc.html +0 -0
  231. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mtc_llfc_ssc_pc.html +0 -0
  232. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mtc_llfc_ssc_pcs.html +0 -0
  233. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mtc_llfc_sscs.html +0 -0
  234. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mtc_llfcs.html +0 -0
  235. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mtc_participant.html +0 -0
  236. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mtc_participants.html +0 -0
  237. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mtc_ssc.html +0 -0
  238. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mtc_sscs.html +0 -0
  239. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/mtcs.html +0 -0
  240. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/ods_monthly_duration.html +0 -0
  241. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/participant.html +0 -0
  242. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/participants.html +0 -0
  243. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/parties.html +0 -0
  244. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/party.html +0 -0
  245. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/pc.html +0 -0
  246. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/pcs.html +0 -0
  247. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/read_add.html +0 -0
  248. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/read_edit.html +0 -0
  249. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/read_type.html +0 -0
  250. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/read_types.html +0 -0
  251. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/scenario.html +0 -0
  252. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/scenario_add.html +0 -0
  253. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/scenario_docs.html +0 -0
  254. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/scenario_edit.html +0 -0
  255. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/scenarios.html +0 -0
  256. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/site_add_e_supply.html +0 -0
  257. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/site_add_e_supply_form.html +0 -0
  258. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/site_hh_data.html +0 -0
  259. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/site_site_snags.html +0 -0
  260. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/site_snag.html +0 -0
  261. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/site_snag_edit.html +0 -0
  262. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/site_snags.html +0 -0
  263. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/site_snags_edit.html +0 -0
  264. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/source.html +0 -0
  265. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/sources.html +0 -0
  266. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/ssc.html +0 -0
  267. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/sscs.html +0 -0
  268. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_batch.html +0 -0
  269. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_batch_add.html +0 -0
  270. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_batch_edit.html +0 -0
  271. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_batch_file.html +0 -0
  272. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_batch_file_add.html +0 -0
  273. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_batch_file_edit.html +0 -0
  274. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_batch_upload_file.html +0 -0
  275. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_batches.html +0 -0
  276. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_bill.html +0 -0
  277. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_bill_add.html +0 -0
  278. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_bill_edit.html +0 -0
  279. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_bill_import.html +0 -0
  280. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_bill_imports.html +0 -0
  281. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_contract.html +0 -0
  282. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_contract_add.html +0 -0
  283. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_contract_edit.html +0 -0
  284. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_contracts.html +0 -0
  285. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_rate_script.html +0 -0
  286. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_rate_script_add.html +0 -0
  287. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supplier_rate_script_edit.html +0 -0
  288. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supply.html +0 -0
  289. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supply_edit.html +0 -0
  290. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supply_eras.html +0 -0
  291. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supply_hh_data.html +0 -0
  292. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supply_months.html +0 -0
  293. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supply_note_add.html +0 -0
  294. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supply_note_edit.html +0 -0
  295. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supply_notes.html +0 -0
  296. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supply_post.html +0 -0
  297. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/supply_virtual_bill.html +0 -0
  298. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/tpr.html +0 -0
  299. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/e/tprs.html +0 -0
  300. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/edi_viewer.html +0 -0
  301. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/batch.html +0 -0
  302. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/batch_add.html +0 -0
  303. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/batch_edit.html +0 -0
  304. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/batches.html +0 -0
  305. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/bill.html +0 -0
  306. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/bill_add.html +0 -0
  307. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/bill_edit.html +0 -0
  308. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/bill_import.html +0 -0
  309. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/bill_imports.html +0 -0
  310. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/dn.html +0 -0
  311. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/dns.html +0 -0
  312. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/era_edit.html +0 -0
  313. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/exit_zone.html +0 -0
  314. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/industry_auto_importer.html +0 -0
  315. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/industry_contract.html +0 -0
  316. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/industry_contract_add.html +0 -0
  317. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/industry_contract_edit.html +0 -0
  318. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/industry_contracts.html +0 -0
  319. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/industry_rate_script.html +0 -0
  320. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/industry_rate_script_add.html +0 -0
  321. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/industry_rate_script_edit.html +0 -0
  322. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/ldz.html +0 -0
  323. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/read_add.html +0 -0
  324. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/read_edit.html +0 -0
  325. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/read_type.html +0 -0
  326. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/read_types.html +0 -0
  327. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/reading_frequencies.html +0 -0
  328. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/reading_frequency.html +0 -0
  329. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/reports.html +0 -0
  330. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/supplier_contract.html +0 -0
  331. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/supplier_contract_add.html +0 -0
  332. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/supplier_contract_edit.html +0 -0
  333. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/supplier_contracts.html +0 -0
  334. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/supplier_rate_script.html +0 -0
  335. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/supplier_rate_script_add.html +0 -0
  336. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/supplier_rate_script_edit.html +0 -0
  337. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/supplies.html +0 -0
  338. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/supply.html +0 -0
  339. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/supply_edit.html +0 -0
  340. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/supply_note_add.html +0 -0
  341. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/supply_note_edit.html +0 -0
  342. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/supply_notes.html +0 -0
  343. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/unit.html +0 -0
  344. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/g/units.html +0 -0
  345. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/general_import.html +0 -0
  346. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/general_imports.html +0 -0
  347. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/home.html +0 -0
  348. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/input_date.html +0 -0
  349. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/local_report.html +0 -0
  350. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/local_reports.html +0 -0
  351. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/macros.html +0 -0
  352. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/national_grid.html +0 -0
  353. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/non_core_auto_importer.html +0 -0
  354. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/non_core_contract.html +0 -0
  355. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/non_core_contract_edit.html +0 -0
  356. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/non_core_contracts.html +0 -0
  357. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/non_core_rate_script.html +0 -0
  358. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/non_core_rate_script_add.html +0 -0
  359. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/non_core_rate_script_edit.html +0 -0
  360. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/object_summary.html +0 -0
  361. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/rate_server.html +0 -0
  362. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/report_run.html +0 -0
  363. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/report_run_asset_comparison.html +0 -0
  364. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/report_run_bill_check.html +0 -0
  365. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/report_run_ecoes_comparison.html +0 -0
  366. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/report_run_row.html +0 -0
  367. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/report_run_row_bill_check.html +0 -0
  368. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/report_run_supply_contacts.html +0 -0
  369. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/report_runs.html +0 -0
  370. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/site.html +0 -0
  371. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/site_add.html +0 -0
  372. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/site_edit.html +0 -0
  373. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/site_gen_graph.html +0 -0
  374. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/site_hh_data.html +0 -0
  375. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/site_months.html +0 -0
  376. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/site_used_graph.html +0 -0
  377. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/sites.html +0 -0
  378. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/supplies.html +0 -0
  379. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/system.html +0 -0
  380. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/tester.html +0 -0
  381. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/user.html +0 -0
  382. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/user_roles.html +0 -0
  383. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/templates/users.html +0 -0
  384. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/testing.py +0 -0
  385. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/utils.py +0 -0
  386. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/chellow/views.py +0 -0
  387. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/gpl.txt +0 -0
  388. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/pyproject.toml +0 -0
  389. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/requirements.txt +0 -0
  390. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/setup.cfg +0 -0
  391. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/systemd/chellow.service +0 -0
  392. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/systemd/chellow_upgrader.service +0 -0
  393. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/systemd/chellow_upgrader.timer +0 -0
  394. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_activity_mop_stark_xlsx.py +0 -0
  395. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_annual_mop_stark_xlsx.py +0 -0
  396. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_csv.py +0 -0
  397. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_engie_edi.py +0 -0
  398. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_engie_xls.py +0 -0
  399. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_engie_xlsx.py +0 -0
  400. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_haven_csv.py +0 -0
  401. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_haven_edi.py +0 -0
  402. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_haven_edi_tprs.py +0 -0
  403. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_nonsettlement_dc_stark_xlsx/bills.nonsettlement.dc.stark.xlsx +0 -0
  404. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_nonsettlement_dc_stark_xlsx/bills_old.nonsettlement.dc.stark.xlsx +0 -0
  405. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_nonsettlement_dc_stark_xlsx/test_bill_parser_nonsettlement_dc_stark_xlsx.py +0 -0
  406. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_settlement_dc_stark_xlsx/bills.settlement.dc.stark.xlsx +0 -0
  407. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_settlement_dc_stark_xlsx/test_bill_parser_settlement_dc_stark_xlsx.py +0 -0
  408. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_sse_edi.py +0 -0
  409. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/bill_parsers/test_bill_parser_sww_xls.py +0 -0
  410. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/system_price/prices.xls +0 -0
  411. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/system_price/test_system_price.py +0 -0
  412. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_aahedc.py +0 -0
  413. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_bill_importer.py +0 -0
  414. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_bsuos.py +0 -0
  415. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_ccl.py +0 -0
  416. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_cfd.py +0 -0
  417. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_computer.py +0 -0
  418. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_dno_rate_parser.py +0 -0
  419. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_duos.py +0 -0
  420. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_e_views.py +0 -0
  421. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_hh_importer.py +0 -0
  422. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_laf_importer.py +0 -0
  423. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_mdd_importer.py +0 -0
  424. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_rcrc_importer.py +0 -0
  425. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_ro.py +0 -0
  426. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_scenario.py +0 -0
  427. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_tlms.py +0 -0
  428. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_tnuos.py +0 -0
  429. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/e/test_triad.py +0 -0
  430. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/gas/bill_parsers/test_g_bill_parser_engie_edi.py +0 -0
  431. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/gas/test_dn_rate_parser.py +0 -0
  432. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/gas/test_engine.py +0 -0
  433. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/gas/test_g_cv.py +0 -0
  434. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/gas/test_gas_views.py +0 -0
  435. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/gas/test_transportation.py +0 -0
  436. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_g_monthly_duration.py +0 -0
  437. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_g_supplies_snapshot.py +0 -0
  438. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_g_supply_virtual_bill.py +0 -0
  439. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_g_virtual_bills_hh.py +0 -0
  440. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_109.py +0 -0
  441. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_111.py +0 -0
  442. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_169.py +0 -0
  443. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_183.py +0 -0
  444. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_187.py +0 -0
  445. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_219.py +0 -0
  446. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_231.py +0 -0
  447. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_233.py +0 -0
  448. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_247.py +0 -0
  449. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_29.py +0 -0
  450. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_33.py +0 -0
  451. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_387.py +0 -0
  452. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_41.py +0 -0
  453. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_429.py +0 -0
  454. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_59.py +0 -0
  455. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_81.py +0 -0
  456. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_87.py +0 -0
  457. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_batches.py +0 -0
  458. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_bills.py +0 -0
  459. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_csv_site_hh_data.py +0 -0
  460. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_dno_vl_parser.py +0 -0
  461. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/reports/test_report_ecoes_comparison.py +0 -0
  462. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/test_chellow.py +0 -0
  463. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/test_dloads.py +0 -0
  464. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/test_edi_viewer.py +0 -0
  465. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/test_general_import.py +0 -0
  466. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/test_models.py +0 -0
  467. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/test_rate_server.py +0 -0
  468. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/test_testing.py +0 -0
  469. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/test_utils.py +0 -0
  470. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/test_views.py +0 -0
  471. {chellow-1710934022.0.0 → chellow-1712589951.0.0}/test/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: chellow
3
- Version: 1710934022.0.0
3
+ Version: 1712589951.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)
@@ -0,0 +1 @@
1
+ __version__ = "1712589951.0.0"
@@ -63,8 +63,8 @@ def get_importer_modules():
63
63
  )
64
64
 
65
65
 
66
- def create_app(testing=False):
67
- app = Flask("chellow", instance_relative_config=True)
66
+ def create_app(testing=False, instance_path=None):
67
+ app = Flask("chellow", instance_relative_config=True, instance_path=instance_path)
68
68
  app.wsgi_app = MsProxy(app.wsgi_app)
69
69
  app.secret_key = os.urandom(24)
70
70
  start_sqlalchemy()
@@ -79,7 +79,6 @@ def create_app(testing=False):
79
79
 
80
80
  if not testing:
81
81
  db_upgrade(app.root_path)
82
- chellow.dloads.startup(Path(app.instance_path))
83
82
  chellow.e.hh_importer.startup()
84
83
 
85
84
  with Session() as sess:
@@ -90,6 +89,8 @@ def create_app(testing=False):
90
89
  api_props = props.get("api", {})
91
90
  api.description = api_props.get("description", "Access Chellow data")
92
91
 
92
+ chellow.dloads.startup(Path(app.instance_path), run_deleter=(not testing))
93
+
93
94
  for module in get_importer_modules():
94
95
  if not testing:
95
96
  module.startup()
@@ -20,12 +20,14 @@ download_path = None
20
20
  SERIAL_DIGITS = 5
21
21
 
22
22
 
23
- def startup(instance_path):
23
+ def startup(instance_path, run_deleter=True):
24
24
  global file_deleter
25
25
  global download_id
26
26
  global download_path
27
- file_deleter = FileDeleter()
28
- file_deleter.start()
27
+
28
+ if run_deleter:
29
+ file_deleter = FileDeleter()
30
+ file_deleter.start()
29
31
 
30
32
  download_path = instance_path / "downloads"
31
33
  download_path.mkdir(parents=True, exist_ok=True)
@@ -1569,7 +1569,6 @@ def era_edit_form_get(era_id):
1569
1569
  try:
1570
1570
  era = Era.get_by_id(g.sess, era_id)
1571
1571
  ct_now = ct_datetime_now()
1572
- cops = g.sess.scalars(select(Cop).order_by(Cop.code))
1573
1572
  comms = g.sess.scalars(select(Comm).order_by(Comm.code))
1574
1573
  energisation_statuses = g.sess.scalars(
1575
1574
  select(EnergisationStatus).order_by(EnergisationStatus.code)
@@ -1781,6 +1780,11 @@ def era_edit_form_get(era_id):
1781
1780
  else:
1782
1781
  mtc_participant = None
1783
1782
 
1783
+ if mtc_participant is None:
1784
+ cops = g.sess.scalars(select(Cop).order_by(Cop.code))
1785
+ else:
1786
+ cops = Cop.get_valid(g.sess, mtc_participant.meter_type)
1787
+
1784
1788
  if pc.code == "00":
1785
1789
  imp_llfcs_q = (
1786
1790
  select(Llfc)
@@ -510,6 +510,17 @@ class Cop(Base, PersistentClass):
510
510
  raise BadRequest(f"The CoP with code {code} can't be found.")
511
511
  return typ
512
512
 
513
+ @staticmethod
514
+ def get_valid(sess, meter_type):
515
+
516
+ if meter_type.code == "C5":
517
+ q = select(Cop).where(Cop.code.in_(["1", "2", "3", "4", "5"]))
518
+ elif meter_type.code in ["6A", "6B", "6C", "6D"]:
519
+ q = select(Cop).where(Cop.code == meter_type.code.lower())
520
+ else:
521
+ q = select(Cop)
522
+ return sess.scalars(q.order_by(Cop.code))
523
+
513
524
  __tablename__ = "cop"
514
525
  id = Column(Integer, primary_key=True)
515
526
  code = Column(String, unique=True, nullable=False)
@@ -3700,12 +3711,9 @@ class Era(Base, PersistentClass):
3700
3711
  f"{hh_format(finish_date)}."
3701
3712
  )
3702
3713
 
3703
- if (
3704
- self.mtc_participant.meter_type.code == "C5"
3705
- and cop.code not in ["1", "2", "3", "4", "5"]
3706
- or self.mtc_participant.meter_type.code in ["6A", "6B", "6C", "6D"]
3707
- and cop.code.upper() != self.mtc_participant.meter_type.code
3708
- ):
3714
+ if cop.code not in [
3715
+ c.code for c in Cop.get_valid(sess, self.mtc_participant.meter_type)
3716
+ ]:
3709
3717
  raise BadRequest(
3710
3718
  f"The CoP of {cop.code} is not compatible with the meter type code "
3711
3719
  f"of {self.mtc_participant.meter_type.code}."
@@ -1,5 +1,4 @@
1
1
  import csv
2
- import os
3
2
  import threading
4
3
  import traceback
5
4
 
@@ -10,11 +9,11 @@ from sqlalchemy.sql.expression import null
10
9
 
11
10
  from werkzeug.exceptions import BadRequest
12
11
 
13
- import chellow.dloads
14
12
  import chellow.e.computer
15
13
  import chellow.e.duos
16
14
  import chellow.e.tnuos
17
- from chellow.models import Era, Pc, Session, Site, SiteEra, Source, Supply
15
+ from chellow.dloads import open_file
16
+ from chellow.models import Era, Pc, Session, Site, SiteEra, Source, Supply, User
18
17
  from chellow.utils import (
19
18
  HH,
20
19
  c_months_u,
@@ -144,28 +143,30 @@ def _write_sites(sess, caches, writer, year, site_id):
144
143
  sess.rollback()
145
144
 
146
145
 
147
- def content(year, site_id, user):
146
+ def content(year, site_id, user_id):
148
147
  caches = {}
149
148
  f = writer = None
150
149
  try:
151
150
  with Session() as sess:
152
- running_name, finished_name = chellow.dloads.make_names("output.csv", user)
153
- f = open(running_name, mode="w", newline="")
151
+ user = User.get_by_id(sess, user_id)
152
+ f = open_file("output.csv", user, mode="w", newline="")
154
153
  writer = csv.writer(f, lineterminator="\n")
155
154
  _write_sites(sess, caches, writer, year, site_id)
156
155
 
157
156
  except BadRequest as e:
158
157
  writer.writerow([e.description])
159
158
  except BaseException:
160
- writer.writerow([traceback.format_exc()])
159
+ msg = traceback.format_exc()
160
+ print(msg)
161
+ if writer is not None:
162
+ writer.writerow([msg])
161
163
  finally:
162
164
  if f is not None:
163
165
  f.close()
164
- os.rename(running_name, finished_name)
165
166
 
166
167
 
167
168
  def do_get(sess):
168
169
  site_id = req_int("site_id") if "site_id" in request.values else None
169
170
  year = req_int("year")
170
- threading.Thread(target=content, args=(year, site_id, g.user)).start()
171
+ threading.Thread(target=content, args=(year, site_id, g.user.id)).start()
171
172
  return chellow_redirect("/downloads", 303)
@@ -1,5 +1,4 @@
1
1
  import csv
2
- import os
3
2
  import threading
4
3
  import traceback
5
4
  from datetime import datetime as Datetime
@@ -14,8 +13,9 @@ from sqlalchemy.sql.expression import null, or_, true
14
13
 
15
14
  from werkzeug.exceptions import BadRequest
16
15
 
17
- import chellow.computer
18
- from chellow.models import Era, Session, Site, SiteEra, Supply
16
+ from chellow.dloads import open_file
17
+ from chellow.e.computer import SupplySource, contract_func, forecast_date
18
+ from chellow.models import Era, Session, Site, SiteEra, Supply, User
19
19
  from chellow.utils import HH, csv_make_val, hh_format, hh_max, hh_min, req_bool, req_int
20
20
  from chellow.views import chellow_redirect
21
21
 
@@ -29,15 +29,13 @@ def content(
29
29
  finish_day,
30
30
  is_import,
31
31
  supply_id,
32
- user,
32
+ user_id,
33
33
  ):
34
34
  caches = {}
35
35
  try:
36
36
  with Session() as sess:
37
- running_name, finished_name = chellow.dloads.make_names(
38
- "daily_supplier_virtual_bill.csv", user
39
- )
40
- f = open(running_name, mode="w", newline="")
37
+ user = User.get_by_id(sess, user_id)
38
+ f = open_file("daily_supplier_virtual_bill.csv", user, mode="w", newline="")
41
39
  writer = csv.writer(f, lineterminator="\n")
42
40
  start_date = Datetime(start_year, start_month, start_day, tzinfo=pytz.utc)
43
41
  finish_date = (
@@ -47,7 +45,7 @@ def content(
47
45
  )
48
46
 
49
47
  supply = Supply.get_by_id(sess, supply_id)
50
- forecast_date = chellow.computer.forecast_date()
48
+ fd = forecast_date()
51
49
  day_start = start_date
52
50
  header_titles = [
53
51
  "MPAN Core",
@@ -71,9 +69,7 @@ def content(
71
69
  else:
72
70
  cont = era.exp_supplier_contract
73
71
 
74
- for title in chellow.computer.contract_func(
75
- caches, cont, "virtual_bill_titles"
76
- )():
72
+ for title in contract_func(caches, cont, "virtual_bill_titles")():
77
73
  if title not in bill_titles:
78
74
  bill_titles.append(title)
79
75
 
@@ -94,11 +90,11 @@ def content(
94
90
  chunk_start = hh_max(era.start_date, day_start)
95
91
  chunk_finish = hh_min(era.finish_date, day_finish)
96
92
 
97
- ss = chellow.computer.SupplySource(
93
+ ss = SupplySource(
98
94
  sess,
99
95
  chunk_start,
100
96
  chunk_finish,
101
- forecast_date,
97
+ fd,
102
98
  era,
103
99
  is_import,
104
100
  caches,
@@ -120,9 +116,7 @@ def content(
120
116
  ss.years_back > 0,
121
117
  ]
122
118
 
123
- chellow.computer.contract_func(
124
- caches, ss.supplier_contract, "virtual_bill"
125
- )(ss)
119
+ contract_func(caches, ss.supplier_contract, "virtual_bill")(ss)
126
120
  bill = ss.supplier_bill
127
121
  for title in bill_titles:
128
122
  if title in bill:
@@ -144,7 +138,6 @@ def content(
144
138
  finally:
145
139
  if f is not None:
146
140
  f.close()
147
- os.rename(running_name, finished_name)
148
141
 
149
142
 
150
143
  def do_get(sess):
@@ -159,18 +152,16 @@ def do_get(sess):
159
152
  is_import = req_bool("is_import")
160
153
  supply_id = req_int("supply_id")
161
154
 
162
- threading.Thread(
163
- target=content,
164
- args=(
165
- start_year,
166
- start_month,
167
- start_day,
168
- finish_year,
169
- finish_month,
170
- finish_day,
171
- is_import,
172
- supply_id,
173
- g.user,
174
- ),
175
- ).start()
155
+ args = (
156
+ start_year,
157
+ start_month,
158
+ start_day,
159
+ finish_year,
160
+ finish_month,
161
+ finish_day,
162
+ is_import,
163
+ supply_id,
164
+ g.user.id,
165
+ )
166
+ threading.Thread(target=content, args=args).start()
176
167
  return chellow_redirect("/downloads", 303)
@@ -1,5 +1,4 @@
1
1
  import csv
2
- import os
3
2
  import sys
4
3
  import threading
5
4
  import traceback
@@ -13,8 +12,8 @@ from sqlalchemy.sql.expression import null
13
12
 
14
13
  from werkzeug.exceptions import BadRequest
15
14
 
16
- import chellow.dloads
17
- from chellow.models import Contract, Era, ReportRun, Session, Site, SiteEra
15
+ from chellow.dloads import open_file
16
+ from chellow.models import Contract, Era, ReportRun, Session, Site, SiteEra, User
18
17
  from chellow.views import chellow_redirect
19
18
 
20
19
  STATUSES_ACTIVE = ("IN USE / IN SERVICE", "STORED SPARE")
@@ -147,13 +146,12 @@ def _process_sites(sess, file_like, writer, props, report_run):
147
146
  FNAME = "asset_comparison"
148
147
 
149
148
 
150
- def content(user, file_like, report_run_id):
149
+ def content(user_id, file_like, report_run_id):
150
+ f = report_run = writer = None
151
151
  try:
152
152
  with Session() as sess:
153
- running_name, finished_name = chellow.dloads.make_names(
154
- f"{FNAME}.csv", user
155
- )
156
- f = open(running_name, mode="w", newline="")
153
+ user = User.get_by_id(sess, user_id)
154
+ f = open_file(f"{FNAME}.csv", user, mode="w", newline="")
157
155
  writer = csv.writer(f, lineterminator="\n")
158
156
  report_run = ReportRun.get_by_id(sess, report_run_id)
159
157
 
@@ -171,11 +169,11 @@ def content(user, file_like, report_run_id):
171
169
  report_run.insert_row(sess, "", ["error"], {"error": msg}, {})
172
170
  sess.commit()
173
171
  sys.stderr.write(msg)
174
- writer.writerow([msg])
172
+ if writer is not None:
173
+ writer.writerow([msg])
175
174
  finally:
176
175
  if f is not None:
177
176
  f.close()
178
- os.rename(running_name, finished_name)
179
177
 
180
178
 
181
179
  def do_post(sess):
@@ -194,6 +192,6 @@ def do_post(sess):
194
192
  },
195
193
  )
196
194
  sess.commit()
197
- args = user, StringIO(file_item.read().decode("utf8")), report_run.id
195
+ args = user.id, StringIO(file_item.read().decode("utf8")), report_run.id
198
196
  threading.Thread(target=content, args=args).start()
199
197
  return chellow_redirect(f"/report_runs/{report_run.id}", 303)
@@ -1,5 +1,4 @@
1
1
  import csv
2
- import os
3
2
  import threading
4
3
  import traceback
5
4
 
@@ -7,18 +6,18 @@ from flask import g
7
6
 
8
7
  from sqlalchemy.orm import joinedload
9
8
 
10
- import chellow.dloads
11
- from chellow.models import Llfc, Session
9
+ from chellow.dloads import open_file
10
+ from chellow.models import Llfc, Session, User
12
11
  from chellow.utils import hh_format
13
12
  from chellow.views import chellow_redirect
14
13
 
15
14
 
16
- def content(user):
15
+ def content(user_id):
17
16
  f = writer = None
18
17
  try:
19
18
  with Session() as sess:
20
- running_name, finished_name = chellow.dloads.make_names("llfcs.csv", user)
21
- f = open(running_name, mode="w", newline="")
19
+ user = User.get_by_id(sess, user_id)
20
+ f = open_file("llfcs.csv", user, mode="w", newline="")
22
21
  writer = csv.writer(f, lineterminator="\n")
23
22
  writer.writerow(
24
23
  (
@@ -53,14 +52,16 @@ def content(user):
53
52
  )
54
53
  )
55
54
  except BaseException:
56
- writer.writerow([traceback.format_exc()])
55
+ msg = traceback.format_exc()
56
+ print(msg)
57
+ if writer is not None:
58
+ writer.writerow([msg])
57
59
  finally:
58
60
  if f is not None:
59
61
  f.close()
60
- os.rename(running_name, finished_name)
61
62
 
62
63
 
63
64
  def do_get(sess):
64
- args = (g.user,)
65
+ args = (g.user.id,)
65
66
  threading.Thread(target=content, args=args).start()
66
67
  return chellow_redirect("/downloads", 303)
@@ -1,6 +1,4 @@
1
1
  import csv
2
- import os
3
- import sys
4
2
  import threading
5
3
  import traceback
6
4
  from datetime import datetime as Datetime, timedelta as Timedelta
@@ -12,20 +10,18 @@ import pytz
12
10
  from sqlalchemy.orm import joinedload
13
11
  from sqlalchemy.sql.expression import null
14
12
 
15
- import chellow.dloads
16
- from chellow.models import Session, Site, Snag
13
+ from chellow.dloads import open_file
14
+ from chellow.models import Session, Site, Snag, User
17
15
  from chellow.utils import hh_format
18
16
  from chellow.views import chellow_redirect
19
17
 
20
18
 
21
- def content(user):
19
+ def content(user_id):
22
20
  f = writer = None
23
21
  try:
24
22
  with Session() as sess:
25
- running_name, finished_name = chellow.dloads.make_names(
26
- "site_snags.csv", user
27
- )
28
- f = open(running_name, mode="w", newline="")
23
+ user = User.get_by_id(sess, user_id)
24
+ f = open_file("site_snags.csv", user, mode="w", newline="")
29
25
  writer = csv.writer(f, lineterminator="\n")
30
26
  writer.writerow(
31
27
  (
@@ -74,15 +70,15 @@ def content(user):
74
70
  )
75
71
  except BaseException:
76
72
  msg = traceback.format_exc()
77
- sys.stderr.write(msg)
78
- writer.writerow([msg])
73
+ print(msg)
74
+ if writer is not None:
75
+ writer.writerow([msg])
79
76
  finally:
80
77
  if f is not None:
81
78
  f.close()
82
- os.rename(running_name, finished_name)
83
79
 
84
80
 
85
81
  def do_get(sess):
86
- args = (g.user,)
82
+ args = (g.user.id,)
87
83
  threading.Thread(target=content, args=args).start()
88
84
  return chellow_redirect("/downloads", 303)
@@ -1,5 +1,4 @@
1
1
  import csv
2
- import os
3
2
  import sys
4
3
  import threading
5
4
  import traceback
@@ -12,10 +11,10 @@ from sqlalchemy.sql.expression import null, true
12
11
 
13
12
  from werkzeug.exceptions import BadRequest
14
13
 
15
- import chellow.dloads
14
+ from chellow.dloads import open_file
16
15
  from chellow.e.computer import contract_func, forecast_date
17
16
  from chellow.gas.engine import GDataSource
18
- from chellow.models import GContract, GEra, Session, Site, SiteGEra
17
+ from chellow.models import GContract, GEra, Session, Site, SiteGEra, User
19
18
  from chellow.utils import (
20
19
  c_months_u,
21
20
  hh_format,
@@ -29,14 +28,13 @@ from chellow.utils import (
29
28
  from chellow.views import chellow_redirect
30
29
 
31
30
 
32
- def content(start_date, finish_date, g_contract_id, user):
31
+ def content(start_date, finish_date, g_contract_id, user_id):
33
32
  report_context = {}
33
+ f = writer = None
34
34
  try:
35
35
  with Session() as sess:
36
- running_name, finished_name = chellow.dloads.make_names(
37
- "gas_virtual_bills.csv", user
38
- )
39
- f = open(running_name, mode="w", newline="")
36
+ user = User.get_by_id(sess, user_id)
37
+ f = open_file("gas_virtual_bills.csv", user, mode="w", newline="")
40
38
  writer = csv.writer(f, lineterminator="\n")
41
39
 
42
40
  g_contract = GContract.get_by_id(sess, g_contract_id)
@@ -125,11 +123,11 @@ def content(start_date, finish_date, g_contract_id, user):
125
123
  except BaseException:
126
124
  msg = traceback.format_exc()
127
125
  sys.stderr.write(msg)
128
- writer.writerow([msg])
126
+ if writer is not None:
127
+ writer.writerow([msg])
129
128
  finally:
130
129
  if f is not None:
131
130
  f.close()
132
- os.rename(running_name, finished_name)
133
131
 
134
132
 
135
133
  def do_get(sess):
@@ -137,7 +135,6 @@ def do_get(sess):
137
135
  finish_date = req_date("finish")
138
136
  g_contract_id = req_int("g_contract_id")
139
137
 
140
- threading.Thread(
141
- target=content, args=(start_date, finish_date, g_contract_id, g.user)
142
- ).start()
138
+ args = start_date, finish_date, g_contract_id, g.user.id
139
+ threading.Thread(target=content, args=args).start()
143
140
  return chellow_redirect("/downloads", 303)
@@ -1,4 +1,3 @@
1
- import os
2
1
  import sys
3
2
  import threading
4
3
  import traceback
@@ -13,7 +12,7 @@ from sqlalchemy.orm import joinedload
13
12
 
14
13
  from werkzeug.exceptions import BadRequest
15
14
 
16
- import chellow.dloads
15
+ from chellow.dloads import open_file
17
16
  from chellow.models import MeasurementRequirement, Session, Ssc, Tpr, User
18
17
  from chellow.utils import req_bool
19
18
  from chellow.views import chellow_redirect
@@ -54,9 +53,7 @@ def content(
54
53
  with Session() as sess:
55
54
  user = User.get_by_id(sess, user_id)
56
55
 
57
- running_name, finished_name = chellow.dloads.make_names("sscs.ods", user)
58
-
59
- rf = open(running_name, "wb")
56
+ rf = open_file("sscs.ods", user, "wb")
60
57
 
61
58
  for ssc in sess.scalars(select(Ssc).order_by(Ssc.code)):
62
59
  ssc_rows.append(
@@ -100,8 +97,7 @@ def content(
100
97
  ssc_rows.append(["Problem " + msg])
101
98
  if rf is None:
102
99
  msg = traceback.format_exc()
103
- r_name, f_name = chellow.dloads.make_names("error.txt", None)
104
- ef = open(r_name, "w")
100
+ ef = open_file("error.txt", None, "w")
105
101
  ef.write(msg + "\n")
106
102
  ef.close()
107
103
  else:
@@ -109,7 +105,6 @@ def content(
109
105
  finally:
110
106
  if rf is not None:
111
107
  rf.close()
112
- os.rename(running_name, finished_name)
113
108
 
114
109
 
115
110
  def do_get(sess):
@@ -1,5 +1,4 @@
1
1
  import csv
2
- import os
3
2
  import sys
4
3
  import threading
5
4
  import traceback
@@ -10,7 +9,7 @@ from sqlalchemy import select
10
9
  from sqlalchemy.orm import joinedload
11
10
  from sqlalchemy.sql.expression import null
12
11
 
13
- import chellow.dloads
12
+ from chellow.dloads import open_file
14
13
  from chellow.models import (
15
14
  Contract,
16
15
  Era,
@@ -33,10 +32,7 @@ def content(user_id, report_run_id):
33
32
  try:
34
33
  with Session() as sess:
35
34
  user = User.get_by_id(sess, user_id)
36
- running_name, finished_name = chellow.dloads.make_names(
37
- f"{FNAME}.csv", user
38
- )
39
- f = open(running_name, mode="w", newline="")
35
+ f = open_file(f"{FNAME}.csv", user, mode="w", newline="")
40
36
  report_run = ReportRun.get_by_id(sess, report_run_id)
41
37
 
42
38
  _process(sess, f, report_run)
@@ -56,7 +52,6 @@ def content(user_id, report_run_id):
56
52
  finally:
57
53
  if f is not None:
58
54
  f.close()
59
- os.rename(running_name, finished_name)
60
55
 
61
56
 
62
57
  def _process(sess, f, report_run):
@@ -129,13 +124,7 @@ def _process(sess, f, report_run):
129
124
 
130
125
 
131
126
  def do_get(sess):
132
- report_run = ReportRun.insert(
133
- sess,
134
- FNAME,
135
- g.user,
136
- FNAME,
137
- {},
138
- )
127
+ report_run = ReportRun.insert(sess, FNAME, g.user, FNAME, {})
139
128
  sess.commit()
140
129
  threading.Thread(target=content, args=(g.user.id, report_run.id)).start()
141
130
  return chellow_redirect(f"/report_runs/{report_run.id}", 303)
@@ -1,3 +1,5 @@
1
+ from tempfile import TemporaryDirectory
2
+
1
3
  from flask.testing import FlaskClient
2
4
 
3
5
  from jinja2 import Environment, PackageLoader, select_autoescape
@@ -39,7 +41,8 @@ def fresh_db():
39
41
  def app(fresh_db):
40
42
  chellow.e.bill_importer.import_id = 0
41
43
  chellow.e.bill_importer.imports.clear()
42
- return create_app(testing=True)
44
+ with TemporaryDirectory() as td:
45
+ yield create_app(testing=True, instance_path=td)
43
46
 
44
47
 
45
48
  @pytest.fixture
@@ -0,0 +1,24 @@
1
+ import chellow.dloads
2
+ from chellow.models import (
3
+ GContract,
4
+ User,
5
+ UserRole,
6
+ )
7
+ from chellow.reports.report_g_virtual_bills import content
8
+ from chellow.utils import ct_datetime, to_utc
9
+
10
+
11
+ def test_content(sess):
12
+ editor = UserRole.insert(sess, "editor")
13
+ user = User.insert(sess, "admin@example.com", "xxx", editor, None)
14
+ user_id = user.id
15
+ vf = to_utc(ct_datetime(2020, 1, 1))
16
+ g_contract = GContract.insert(sess, False, "Fusion 2020", "", {}, vf, None, {})
17
+ sess.commit()
18
+
19
+ start_date = to_utc(ct_datetime(2020, 1, 1))
20
+ finish_date = to_utc(ct_datetime(2020, 1, 31, 23, 30))
21
+ content(start_date, finish_date, g_contract.id, user_id)
22
+
23
+ files = list(p.name for p in chellow.dloads.download_path.iterdir())
24
+ assert files == ["00000_FINISHED_adminexamplecom_gas_virtual_bills.csv"]