energy-reports-pkg 0.6.14__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. energy_reports_pkg-0.6.14.dist-info/METADATA +10 -0
  2. energy_reports_pkg-0.6.14.dist-info/RECORD +221 -0
  3. energy_reports_pkg-0.6.14.dist-info/WHEEL +5 -0
  4. energy_reports_pkg-0.6.14.dist-info/top_level.txt +1 -0
  5. mindsett_energy_reports_pkg/config/__init__.py +6 -0
  6. mindsett_energy_reports_pkg/config/email/__init__.py +37 -0
  7. mindsett_energy_reports_pkg/config/monday/__init__.py +8 -0
  8. mindsett_energy_reports_pkg/config/monday/auth/__init__.py +7 -0
  9. mindsett_energy_reports_pkg/config/monday/columns_concerned/__init__.py +22 -0
  10. mindsett_energy_reports_pkg/config/postgresdb/__init__.py +33 -0
  11. mindsett_energy_reports_pkg/config/postgresdb/table/__init__.py +2 -0
  12. mindsett_energy_reports_pkg/config/postgresdb/table_building/__init__.py +1 -0
  13. mindsett_energy_reports_pkg/config/postgresdb/table_building_total/__init__.py +1 -0
  14. mindsett_energy_reports_pkg/config/postgresdb/table_cache/__init__.py +30 -0
  15. mindsett_energy_reports_pkg/config/postgresdb/table_iot/__init__.py +1 -0
  16. mindsett_energy_reports_pkg/config/postgresdb/table_mailing/__init__.py +15 -0
  17. mindsett_energy_reports_pkg/config/postgresdb/table_meta/__init__.py +2 -0
  18. mindsett_energy_reports_pkg/config/postgresdb/table_occupancy/__init__.py +3 -0
  19. mindsett_energy_reports_pkg/config/postgresdb/table_on_off/__init__.py +2 -0
  20. mindsett_energy_reports_pkg/config/postgresdb/table_org/__init__.py +1 -0
  21. mindsett_energy_reports_pkg/config/postgresdb/table_price/__init__.py +2 -0
  22. mindsett_energy_reports_pkg/config/postgresdb/table_schedule/__init__.py +1 -0
  23. mindsett_energy_reports_pkg/config/postgresdb/table_sqm/__init__.py +2 -0
  24. mindsett_energy_reports_pkg/config/postgresdb/table_timezone/__init__.py +2 -0
  25. mindsett_energy_reports_pkg/config/sharepoint/__init__.py +12 -0
  26. mindsett_energy_reports_pkg/config/sharepoint/excel/__init__.py +5 -0
  27. mindsett_energy_reports_pkg/config/sharepoint/excel/columns_concerned/__init__.py +7 -0
  28. mindsett_energy_reports_pkg/config/smtp/__init__.py +10 -0
  29. mindsett_energy_reports_pkg/jobs/databricks_job.py +31 -0
  30. mindsett_energy_reports_pkg/libs/MondayProcessor/DataProcessor/__init__.py +14 -0
  31. mindsett_energy_reports_pkg/libs/MondayProcessor/DataProcessor/launchInteractiveProcess.py +6 -0
  32. mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorBoardColumnNotMatch/__init__.py +6 -0
  33. mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorBoardNotFound/__init__.py +5 -0
  34. mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorException/__init__.py +4 -0
  35. mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorNoColumInBoard/__init__.py +5 -0
  36. mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorNoGroupsInBoard/__init__.py +5 -0
  37. mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorNoItemInGroup/__init__.py +6 -0
  38. mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorPageNotSupported/__init__.py +7 -0
  39. mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/__init__.py +8 -0
  40. mindsett_energy_reports_pkg/libs/MondayProcessor/__init__.py +40 -0
  41. mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchBoardById.py +13 -0
  42. mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchBoardLogsById.py +33 -0
  43. mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchColumnValueByGroup.py +103 -0
  44. mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchGroups.py +19 -0
  45. mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchPrismConf.py +10 -0
  46. mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchPrismConfByBoard.py +83 -0
  47. mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchPrismConfByGroup.py +89 -0
  48. mindsett_energy_reports_pkg/libs/MondayProcessor/_searchColumnIdsByName.py +23 -0
  49. mindsett_energy_reports_pkg/libs/MondayProcessor/_searchConfColumnIds.py +30 -0
  50. mindsett_energy_reports_pkg/libs/MondayProcessor/_searchConfColumnIdsMatch.py +20 -0
  51. mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/__init__.py +11 -0
  52. mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/__init__.py +12 -0
  53. mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/__init__.py +11 -0
  54. mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/__init__.py +10 -0
  55. mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/items/__init__.py +12 -0
  56. mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/items/column_values/__init__.py +10 -0
  57. mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/items/column_values/column/__init__.py +2 -0
  58. mindsett_energy_reports_pkg/libs/MondayProcessor/launchInteractiveProcess.py +7 -0
  59. mindsett_energy_reports_pkg/libs/__init__.py +4 -0
  60. mindsett_energy_reports_pkg/libs/cache_return/__init__.py +47 -0
  61. mindsett_energy_reports_pkg/libs/fetch_monday_info/__init__.py +29 -0
  62. mindsett_energy_reports_pkg/libs/fetch_monday_info/load_cf_from_db/__init__.py +17 -0
  63. mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/__init__.py +52 -0
  64. mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/cache_cf_to_db/__init__.py +11 -0
  65. mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/cache_cf_to_db/append_df_to_table/__init__.py +29 -0
  66. mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/cache_cf_to_db/empty_table/__init__.py +11 -0
  67. mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/__init__.py +57 -0
  68. mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/get_mailing_list/__init__.py +25 -0
  69. mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/load_mailing_list/__init__.py +50 -0
  70. mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/load_mailing_list/columns_concerned/__init__.py +22 -0
  71. mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/get_last_update_time/__init__.py +26 -0
  72. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/__init__.py +27 -0
  73. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/load_cf_from_db/__init__.py +17 -0
  74. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/__init__.py +28 -0
  75. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/cache_cf_to_db/__init__.py +11 -0
  76. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/cache_cf_to_db/append_df_to_table/__init__.py +29 -0
  77. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/cache_cf_to_db/empty_table/__init__.py +11 -0
  78. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/__init__.py +13 -0
  79. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/__init__.py +57 -0
  80. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/columns_concerned/__init__.py +8 -0
  81. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/extract_id/# __init__.py +11 -0
  82. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/extract_id/__init__.py +19 -0
  83. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/get_mailing_list/__init__.py +10 -0
  84. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/uuid_for_nona/__init__.py +12 -0
  85. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/load_mailing_list/__init__.py +30 -0
  86. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/load_mailing_list/get_excel_file_from_link/__init__.py +30 -0
  87. mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/load_mailing_list/load_excel_as_df/__init__.py +45 -0
  88. mindsett_energy_reports_pkg/libs/generate_dag_id/__init__.py +20 -0
  89. mindsett_energy_reports_pkg/libs/get_conn_by_id/__init__.py +42 -0
  90. mindsett_energy_reports_pkg/libs/get_conn_by_id/__version__.py +8 -0
  91. mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_airflow/__init__.py +47 -0
  92. mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/__init__.py +25 -0
  93. mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/get_credential_url/__init__.py +17 -0
  94. mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/get_credential_url/databricks/__init__.py +10 -0
  95. mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/get_credential_url/local/__init__.py +13 -0
  96. mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_synapse/__init__.py +15 -0
  97. mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_synapse/connect_lake_and_fetch_json/__init__.py +19 -0
  98. mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_synapse/datalake/__init__.py +7 -0
  99. mindsett_energy_reports_pkg/mdl/__init__.py +2 -0
  100. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/__init__.py +119 -0
  101. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_end_time/__init__.py +8 -0
  102. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_period_range/__init__.py +8 -0
  103. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_schedule_records/__init__.py +34 -0
  104. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_start_time/__init__.py +6 -0
  105. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_start_time_co2_barchart/__init__.py +7 -0
  106. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/__init__.py +93 -0
  107. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/email_report/__init__.py +47 -0
  108. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/__init__.py +75 -0
  109. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/apply_price_from_db/__init__.py +13 -0
  110. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/apply_price_from_db/load_energy_price/__init__.py +14 -0
  111. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/attach_id_to_buildings/__init__.py +24 -0
  112. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/attach_id_to_buildings/load_building/__init__.py +19 -0
  113. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/attach_id_to_buildings/load_org/__init__.py +13 -0
  114. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/check_and_keep_valid/__init__.py +36 -0
  115. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/load_sqm/__init__.py +11 -0
  116. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/load_timezone/__init__.py +11 -0
  117. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/__init__.py +43 -0
  118. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/__init__.py +47 -0
  119. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/__init__.py +40 -0
  120. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/__init__.py +71 -0
  121. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/plot_temperature_graph/__init__.py +35 -0
  122. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/plot_the_legend/__init__.py +26 -0
  123. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_x_tick_lim/__init__.py +26 -0
  124. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_x_tick_lim/generate_day_code/__init__.py +18 -0
  125. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_x_tick_lim/generate_day_code/generate_day_code_list/__init__.py +38 -0
  126. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_y_label_and_get_pos_bot_range/__init__.py +40 -0
  127. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_y_label_and_get_pos_bot_range/get_pos_bot_and_ylim/__init__.py +30 -0
  128. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_y_tick_lim_label_zero_line/__init__.py +23 -0
  129. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/preprocessing_for_barchart/__init__.py +21 -0
  130. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/preprocessing_for_barchart/groupby_date_and_ooh_current_period/__init__.py +39 -0
  131. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/preprocessing_for_barchart/patch_missing_columns_for_ooh_and_sign/__init__.py +18 -0
  132. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/preprocessing_for_barchart/patch_missing_dates/__init__.py +28 -0
  133. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/__init__.py +42 -0
  134. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/energy_meter_with_benchmarking/__init__.py +66 -0
  135. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/energy_meter_with_benchmarking/benchmarking_design/__init__.py +194 -0
  136. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/energy_meter_with_benchmarking/benchmarking_design/ruler_anno_shink_cf/__init__.py +24 -0
  137. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/energy_meter_with_benchmarking/energy_meter_design/__init__.py +233 -0
  138. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/preprocessing_for_energy_meter_with_benchmarking/__init__.py +23 -0
  139. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/__init__.py +42 -0
  140. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/insight_statements/__init__.py +41 -0
  141. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/insight_statements/statement_for_avg_action_time/__init__.py +61 -0
  142. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/insight_statements/statement_for_biggest_ooh/__init__.py +31 -0
  143. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/insight_statements/statement_for_total_ooh/__init__.py +18 -0
  144. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/preprocessing_for_statement/__init__.py +85 -0
  145. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/__init__.py +29 -0
  146. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/plot_shifted_period_barchart/__init__.py +49 -0
  147. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/plot_shifted_period_barchart/set_x_label_prepare_xtick/__init__.py +24 -0
  148. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/plot_shifted_period_barchart/set_x_tick_and_lim/__init__.py +26 -0
  149. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/plot_shifted_period_barchart/setup_y_tick_lim_label_zero_line/__init__.py +31 -0
  150. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/preprocessing_for_period_barchart/__init__.py +43 -0
  151. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/preprocessing_for_period_barchart/patch_missing_ooh_periods_sign/__init__.py +23 -0
  152. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/__init__.py +56 -0
  153. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/__init__.py +109 -0
  154. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/colors/__init__.py +28 -0
  155. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/hatches/__init__.py +2 -0
  156. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_centre_pct/__init__.py +28 -0
  157. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/__init__.py +42 -0
  158. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/get_phase_markers/__init__.py +28 -0
  159. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/get_tick_values/__init__.py +44 -0
  160. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/plot_phase_balance_part/__init__.py +108 -0
  161. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/plot_phase_balance_part/ruler_anno_shink_cf/__init__.py +29 -0
  162. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/plot_phase_balance_part/ruler_symbol_cf/__init__.py +35 -0
  163. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/__init__.py +87 -0
  164. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/adjust_gap_for_visibility/__init__.py +19 -0
  165. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/adjust_to_inner_ring/__init__.py +32 -0
  166. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/adjust_values_for_better_visibility/__init__.py +27 -0
  167. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/annotate_pct_on_pies/__init__.py +21 -0
  168. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/generate_pct_fmt/__init__.py +8 -0
  169. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/__init__.py +36 -0
  170. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/__init__.py +50 -0
  171. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/get_formatted_arrow/__init__.py +18 -0
  172. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/get_formatted_name/__init__.py +14 -0
  173. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/get_formatted_pct/__init__.py +44 -0
  174. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/get_formatted_sum/__init__.py +31 -0
  175. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/get_legend_handles/__init__.py +22 -0
  176. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_phases/__init__.py +37 -0
  177. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/__init__.py +26 -0
  178. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/group_and_pivot/__init__.py +24 -0
  179. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/__init__.py +30 -0
  180. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_change_pct_and_sort_and_trim_cols/__init__.py +34 -0
  181. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_entries_to_display/__init__.py +34 -0
  182. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_rank_overall_protect/__init__.py +14 -0
  183. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_subgroup_sum_and_rank/__init__.py +22 -0
  184. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_sum_for_curr_and_prev/__init__.py +20 -0
  185. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_report/PDF/__init__.py +44 -0
  186. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_report/PDF/write_multicell_with_styles.py +30 -0
  187. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_report/__init__.py +162 -0
  188. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/__init__.py +78 -0
  189. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/__init__.py +32 -0
  190. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/__init__.py +47 -0
  191. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/load_iot_data/__init__.py +28 -0
  192. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/load_iot_data/load_iot_data_partition/__init__.py +24 -0
  193. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/load_metadata/__init__.py +34 -0
  194. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/load_metadata/get_meta_statement/__init__.py +32 -0
  195. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/query_building_total/__init__.py +40 -0
  196. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/refine_group_name/__init__.py +20 -0
  197. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/refine_group_name/exchange_group_name_column/__init__.py +10 -0
  198. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/validate_data_not_empty/__init__.py +9 -0
  199. mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/select_sites_and_emails/__init__.py +19 -0
  200. mindsett_energy_reports_pkg/mdl/utils_/__init__.py +17 -0
  201. mindsett_energy_reports_pkg/mdl/utils_/cache_df_to_db/__init__.py +11 -0
  202. mindsett_energy_reports_pkg/mdl/utils_/cache_df_to_db/append_df_to_table/__init__.py +29 -0
  203. mindsett_energy_reports_pkg/mdl/utils_/cache_df_to_db/empty_table/__init__.py +11 -0
  204. mindsett_energy_reports_pkg/mdl/utils_/cache_obj/__init__.py +50 -0
  205. mindsett_energy_reports_pkg/mdl/utils_/color_dict/__init__.py +13 -0
  206. mindsett_energy_reports_pkg/mdl/utils_/delete_files_in_directory/__init__.py +15 -0
  207. mindsett_energy_reports_pkg/mdl/utils_/enriching_time_features/__init__.py +66 -0
  208. mindsett_energy_reports_pkg/mdl/utils_/enriching_time_features/__version__.py +4 -0
  209. mindsett_energy_reports_pkg/mdl/utils_/generate_time_partition_list/__init__.py +14 -0
  210. mindsett_energy_reports_pkg/mdl/utils_/get_group_with_others/__init__.py +7 -0
  211. mindsett_energy_reports_pkg/mdl/utils_/get_pos_bot_range_unit_format/__init__.py +37 -0
  212. mindsett_energy_reports_pkg/mdl/utils_/get_pos_bot_range_unit_format/get_pos_bot_and_ylim/__init__.py +31 -0
  213. mindsett_energy_reports_pkg/mdl/utils_/modify_group_names/__init__.py +17 -0
  214. mindsett_energy_reports_pkg/mdl/utils_/patch_missing_periods/__init__.py +34 -0
  215. mindsett_energy_reports_pkg/mdl/utils_/plot_stacked_barchart/__init__.py +50 -0
  216. mindsett_energy_reports_pkg/mdl/utils_/send_email/__init__.py +73 -0
  217. mindsett_energy_reports_pkg/mdl/utils_/setup_table/__init__.py +40 -0
  218. mindsett_energy_reports_pkg/mdl/utils_/setup_table/check_table_existence/__init__.py +25 -0
  219. mindsett_energy_reports_pkg/mdl/utils_/setup_table/create_new_schema/__init__.py +8 -0
  220. mindsett_energy_reports_pkg/mdl/utils_/setup_table/create_table/__init__.py +73 -0
  221. mindsett_energy_reports_pkg/mdl/utils_/setup_table/empty_table/__init__.py +11 -0
@@ -0,0 +1,20 @@
1
+
2
+
3
+ def get_sum_for_curr_and_prev(df_pivot_asset_group_by_period):
4
+
5
+ # get the exact values of current period and period to be compared
6
+ period_range = df_pivot_asset_group_by_period.columns
7
+ period_current = period_range[-1]
8
+
9
+ # for avoiding the case that we don't have data for the previous week
10
+ if len(period_range) < 2:
11
+ period_tobe_compared = period_range[-1]
12
+ else:
13
+ period_tobe_compared = period_range[-2]
14
+
15
+ # get the total of current period and previous period, and the difference between the two periods
16
+ df_pivot_asset_group_by_period_renamed = df_pivot_asset_group_by_period.loc[:,period_current].to_frame().rename(columns={period_current: "sum"})
17
+ df_pivot_asset_group_by_period_renamed["sum_pre"] = df_pivot_asset_group_by_period.loc[:,period_tobe_compared]
18
+ df_pivot_asset_group_by_period_renamed['sub'] = df_pivot_asset_group_by_period.loc[:,period_current] - df_pivot_asset_group_by_period.loc[:,period_tobe_compared]
19
+
20
+ return df_pivot_asset_group_by_period_renamed
@@ -0,0 +1,44 @@
1
+ from fpdf import FPDF
2
+ from PIL import ImageColor
3
+ import os
4
+
5
+ import colorsys
6
+
7
+ from mdl.utils_ import color_dict
8
+
9
+ cd = color_dict
10
+
11
+ assets_folder = os.path.join(os.path.dirname(__file__), '_assets_/')
12
+
13
+ class PDF(FPDF):
14
+
15
+ # def __init__(self, asset_folder):
16
+ # FPDF.__init__(self)
17
+ # self.assets_folder = assets_folder
18
+
19
+ def header(self):
20
+ #Logo
21
+ self.image(assets_folder+'LetterHead - header - Mindsett_weekly.png', 0, 0, self.w)
22
+ #Fontsize and type
23
+ self.set_font('Arial', 'B', 15)
24
+ self.image(assets_folder+"2024_Mindsett_Logo_White.png", 10, 8, 60)
25
+ # self.image(assets_folder+"mindsett_logo_white_transparent.png", 15, 15, 45)
26
+
27
+ def footer(self):
28
+ #Logo
29
+ footer_height = 32
30
+ img_path = assets_folder+'LetterHead - Footer - Mindsett_weekly.png'
31
+ footer_width = 210
32
+ self.image(img_path, 0, self.h-footer_height, footer_width)
33
+ self.set_font('Arial', 'B', 15)
34
+
35
+ self.set_y(self.h-footer_height + 5)
36
+ self.set_x(20)
37
+ self.set_font('Arial', "I", 8)
38
+ color_rgb = ImageColor.getcolor(cd["Mindsett Blue"], "RGB")
39
+ color_hsv = colorsys.rgb_to_hsv(*color_rgb)
40
+ color_rgb_changed = colorsys.hsv_to_rgb(color_hsv[0], color_hsv[1], color_hsv[2])
41
+ self.set_text_color(*color_rgb_changed)
42
+ #self.cell(pdf.w - 30, 10, '**BBP benchmarking (REEB) ', 0, 0, 'B')
43
+
44
+ from .write_multicell_with_styles import write_multicell_with_styles
@@ -0,0 +1,30 @@
1
+
2
+
3
+ def write_multicell_with_styles(self, max_width, cell_height, text_list):
4
+
5
+ # Source:https://stackoverflow.com/questions/60736940/how-to-make-inline-bold-text-using-pyfpdf#
6
+ startx = self.get_x()
7
+ self.set_font('Arial', '', 12)
8
+
9
+ #loop through differenct sections in different styles
10
+ for text_part in text_list:
11
+ #check and set style
12
+ try:
13
+ current_style = text_part['style']
14
+ self.set_font('Arial', current_style, 12)
15
+ except KeyError:
16
+ self.set_font('Arial', '', 12)
17
+
18
+ #loop through words and write them down
19
+ space_width = self.get_string_width(' ')
20
+ for word in text_part['text'].split(' '):
21
+ current_pos = self.get_x()
22
+ word_width = self.get_string_width(word)
23
+ #check for newline
24
+ if (current_pos + word_width) > (startx + max_width):
25
+ #return
26
+ self.set_y(self.get_y() + cell_height)
27
+ self.set_x(startx)
28
+ self.cell(word_width, 5, word)
29
+ #add a space
30
+ self.set_x(self.get_x() + space_width)
@@ -0,0 +1,162 @@
1
+ import pickle
2
+ from PIL import ImageColor
3
+ import os
4
+ import io
5
+
6
+ import colorsys
7
+
8
+ from mdl.utils_ import color_dict
9
+ from .PDF import PDF
10
+
11
+ cd = color_dict
12
+
13
+ def generate_report(site_name, period,
14
+ statements_list=None,
15
+ organisation=None,
16
+ components=None,
17
+ files_folder=None,
18
+ figures_folder=None,
19
+ report_file_folder=None,
20
+ assets_folder=None):
21
+
22
+ if assets_folder == None:
23
+ assets_folder = os.path.join(os.path.dirname(__file__), '_assets_/')
24
+
25
+ pdf = PDF()
26
+ pdf.add_page()
27
+
28
+ pdf.image(assets_folder+'Screenshot_by_date_weekly.png', 0.3, 70, 8)
29
+ pdf.image(assets_folder+'Screenshot_by_asset_weekly.png', 0.3, 70+65, 8)
30
+ pdf.image(assets_folder+'Screenshot_insights_weekly.png', 0.3, 70+130, 8)
31
+ pdf.set_font('Arial', "B", 28)
32
+ # Line break
33
+ pdf.ln(19)
34
+
35
+ color_rgb = ImageColor.getcolor(cd["Mindsett Blue"], "RGB")
36
+ color_hsv = colorsys.rgb_to_hsv(*color_rgb)
37
+ color_rgb_changed = colorsys.hsv_to_rgb(color_hsv[0], color_hsv[1]*1.2, color_hsv[2]*0.85)
38
+ pdf.set_text_color(*color_rgb_changed)
39
+
40
+ pdf.cell(pdf.w - 28, 10, 'Energy Consumption', 0, 0, 'R')
41
+ pdf.set_font('Arial', "I", 16)
42
+ # Line break
43
+ pdf.ln(13)
44
+
45
+ color_rgb = ImageColor.getcolor(cd["darkgrey"], "RGB")
46
+ color_hsv = colorsys.rgb_to_hsv(*color_rgb)
47
+ color_rgb_changed = colorsys.hsv_to_rgb(color_hsv[0], color_hsv[1], color_hsv[2])
48
+ pdf.set_text_color(*color_rgb_changed)
49
+
50
+ # generate period name
51
+
52
+ if period.freqstr == "M":
53
+
54
+ period_str = period.strftime('%b %Y')
55
+ else:
56
+ # add 1 week to the current_period_obj so that the start week is not Week 00
57
+ period_week_str = period.strftime('%W')
58
+ period_year_str = period.strftime('%Y')
59
+ period_str = f'Wk {(int(period_week_str)+1):02d}, {period_year_str}'
60
+
61
+ REPLACEMENTS = {"""''""": """'""",
62
+ "Mecca Bingo": "MB",
63
+ "Grosvenor": "GC",
64
+ # "The Rank Group": "Rank",
65
+ "Marina Bay Financial Center, Tower 2": "MBFC T2"}
66
+
67
+ for item in REPLACEMENTS:
68
+ site_name = site_name.replace(item, REPLACEMENTS[item])
69
+
70
+ site_name_update = site_name
71
+ sub_title_name = f'{site_name_update} - {period_str} '
72
+
73
+ if organisation is not None:
74
+ for item in REPLACEMENTS:
75
+ organisation = organisation.replace(item, REPLACEMENTS[item])
76
+ organisation_update = organisation
77
+ sub_title_name = f'{organisation_update} - {sub_title_name}'
78
+
79
+ report_file_name = 'Mindsett_Energy_Report_' + sub_title_name.strip().replace(" - ", "_").replace(" ", "_").replace(",", "") + '.pdf'
80
+
81
+ pdf.cell(pdf.w - 27, 10, sub_title_name, 0, 0, 'R')
82
+
83
+ # if components != None:
84
+
85
+ consumption_by_assetclass_piechart_with_phase = components['consumption_by_assetclass_piechart_with_phase.png']
86
+ period_barchart = components['period_barchart.png']
87
+ monthly_total_and_bm_latest = components['monthly_total_and_bm_latest.png']
88
+ daily_barchart_with_temp = components['daily_barchart_with_temp.png']
89
+ auto_statements_list_or_path = components['statements.pkl']
90
+
91
+ if isinstance(auto_statements_list_or_path, str):
92
+ with open(auto_statements_list_or_path, 'rb') as f:
93
+ auto_statements_list = pickle.load(f)
94
+ else:
95
+ auto_statements_list = auto_statements_list_or_path
96
+ # else:
97
+ # consumption_by_assetclass_piechart_mindsett = figures_folder+'consumption_by_assetclass_piechart_mindsett.png'
98
+ # total_consumption_barchart_with_co2 = figures_folder+'total_consumption_barchart_with_co2.png'
99
+ # monthly_total_and_bm_latest = figures_folder+'monthly_total_and_bm_latest.png'
100
+ # daily_consumption_barchart_with_occupancy_mar_with_pattern_mwh = figures_folder+'daily_consumption_barchart_with_occupancy_mar_with_pattern_mwh.png'
101
+
102
+ # with open(files_folder+'statements.pkl', 'rb') as f:
103
+ # auto_statements_list = pickle.load(f)
104
+
105
+ pdf.image(consumption_by_assetclass_piechart_with_phase, 14 + 0.2, 55+69+4, 144)
106
+ pdf.image(period_barchart, 136, 55+82-1, 60)
107
+ pdf.image(monthly_total_and_bm_latest, 14.5, 48+9+3.5, 65-7) # here 3.5 is added to make space for the subtitle
108
+
109
+ pdf.ln(151) #Contol on paragraphs
110
+ pdf.set_x(29)
111
+ pdf.image(daily_barchart_with_temp, 71, 62+3.5, 135) # here 3.5 is added to make space for the subtitle
112
+
113
+ # Insights statements
114
+
115
+ if statements_list is not None:
116
+
117
+ insight_statements_list = statements_list
118
+
119
+ pdf.ln(5)
120
+ pdf.set_x(20)
121
+ pdf.set_font('Arial', 'I', 12)
122
+ pdf.set_text_color(0,0,0)
123
+ pdf.multi_cell(pdf.w - 50, 10, 'Insights: \n')
124
+
125
+ text_list = []
126
+
127
+ for statement in insight_statements_list:
128
+
129
+ statement_text = [{'text': '- '+statement+' '}]
130
+ text_list += statement_text
131
+
132
+ pdf.set_x(29)
133
+ pdf.write_multicell_with_styles(pdf.w-50,6,text_list)
134
+
135
+ # Automated Observations statements
136
+ pdf.ln(5)
137
+ pdf.set_x(20)
138
+ pdf.set_font('Arial', 'I', 12)
139
+ pdf.set_text_color(0,0,0)
140
+ pdf.multi_cell(pdf.w - 50, 10, 'Automated Observations: \n')
141
+
142
+ text_list = []
143
+
144
+ for statement in auto_statements_list:
145
+
146
+ statement_text = [{'text': '- '+statement+' '}]
147
+ text_list += statement_text
148
+
149
+ pdf.set_x(29)
150
+ pdf.write_multicell_with_styles(pdf.w-50,6,text_list) #6
151
+
152
+
153
+ if report_file_folder == None:
154
+
155
+ pdf_object = io.BytesIO()
156
+ pdf.output(pdf_object, 'F')
157
+ return {report_file_name: pdf_object}
158
+ else:
159
+
160
+ report_file_dir = report_file_folder + report_file_name
161
+ pdf.output(report_file_dir, 'F')
162
+ return {report_file_name: report_file_dir}
@@ -0,0 +1,78 @@
1
+ # from pathlib import Path
2
+ from os import path
3
+ import pandas as pd
4
+ from cache_return import cache_return
5
+
6
+ from mdl.utils_ import enriching_time_features
7
+ from mdl.utils_ import patch_missing_periods
8
+
9
+ # from .unify_db_interface import unify_db_interface
10
+ from .load_source_data import load_source_data
11
+
12
+ from .validate_data_not_empty import validate_data_not_empty
13
+ from .refine_group_name import refine_group_name
14
+ # from .patch_missing_periods import patch_missing_periods
15
+
16
+ @cache_return
17
+ def preparing_source_data(postgresdb,
18
+ site_obj,
19
+ debug=False,
20
+ chunksize=10):
21
+
22
+ # get the specific time for the individual site
23
+ start_time = site_obj.get_start_time()
24
+ start_time_co2_barchart = site_obj.get_start_time_co2_barchart()
25
+ end_time = site_obj.get_end_time()
26
+ schedule_records = site_obj.get_schedule_records(postgresdb)
27
+
28
+ df_meta_with_value, df_meta_with_value_building = load_source_data(postgresdb,
29
+ start_time,
30
+ start_time_co2_barchart,
31
+ end_time,
32
+ site_obj.building_id,
33
+ chunksize=chunksize,
34
+ exception=site_obj.exception,
35
+ timezone=site_obj.timezone,
36
+ caching=debug)
37
+
38
+ # print('df_meta_with_value.shape: ', df_meta_with_value.shape)
39
+ validate_data_not_empty(df_meta_with_value, df_meta_with_value_building)
40
+
41
+ # print('df_meta_with_value.info: ', df_meta_with_value.info())
42
+
43
+ df_meta_with_value = patch_missing_periods(df_meta_with_value, start_time, end_time,
44
+ time_col='time',
45
+ value_col='W',
46
+ period_freq=site_obj.period_freq,
47
+ timezone=site_obj.timezone)
48
+
49
+ df_meta_with_value_building = patch_missing_periods(df_meta_with_value_building, start_time_co2_barchart, end_time,
50
+ time_col='time',
51
+ value_col='kwh',
52
+ period_freq=site_obj.period_freq,
53
+ timezone=site_obj.timezone)
54
+
55
+ df_meta_with_value = refine_group_name(df_meta_with_value,
56
+ site_obj.asset_group,
57
+ site_obj.group_name_column_exchange,
58
+ site_obj.fillna_value,
59
+ site_obj.group_name_modification)
60
+
61
+ df_meta_with_value = enriching_time_features(df_meta_with_value,
62
+ schedule_records= schedule_records,
63
+ period_freq=site_obj.period_freq,
64
+ weekend=site_obj.weekend,
65
+ working_end_time=site_obj.working_end_time,
66
+ working_start_time=site_obj.working_start_time,
67
+ timezone=site_obj.timezone)
68
+
69
+ df_meta_with_value_building = enriching_time_features(df_meta_with_value_building,
70
+ schedule_records= schedule_records,
71
+ period_freq=site_obj.period_freq,
72
+ weekend=site_obj.weekend,
73
+ working_end_time=site_obj.working_end_time,
74
+ working_start_time=site_obj.working_start_time,
75
+ timezone=site_obj.timezone)
76
+
77
+ # print('df_meta_with_value.shape: ', df_meta_with_value.shape)
78
+ return df_meta_with_value, df_meta_with_value_building
@@ -0,0 +1,32 @@
1
+ from os import path
2
+ import pandas as pd
3
+
4
+ from .query_building_total import query_building_total
5
+ from .import_data_with_meta_postgres import import_data_with_meta_postgres
6
+
7
+ from cache_return import cache_return
8
+
9
+ @cache_return
10
+ def load_source_data(postgresdb,
11
+ start_time,
12
+ start_time_co2_barchart,
13
+ end_time,
14
+ building_id,
15
+ exception=None,
16
+ chunksize=10,
17
+ timezone='UTC'):
18
+
19
+ df_meta_with_value = import_data_with_meta_postgres(postgresdb,
20
+ start_time,
21
+ end_time,
22
+ building_id,
23
+ exception=exception,
24
+ chunksize=chunksize,
25
+ timezone=timezone)
26
+ df_meta_with_value_building = query_building_total(postgresdb,
27
+ start_time=start_time_co2_barchart,
28
+ end_time=end_time,
29
+ building_id=building_id, # please note that this is a postition arg
30
+ timezone=timezone)
31
+
32
+ return df_meta_with_value, df_meta_with_value_building
@@ -0,0 +1,47 @@
1
+ import pandas as pd
2
+
3
+ from .load_metadata import load_metadata
4
+ from .load_iot_data import load_iot_data
5
+
6
+ def import_data_with_meta_postgres(db, start_time, end_time, building_id,
7
+ # organisation=None,
8
+ exception=None,
9
+ chunksize=10,
10
+ # meta_columns_for_join=['nid', 'channel_number'],
11
+ # iot_columns_for_join=['nid', 'channel'],
12
+ # reading_interval_in_mins=10,
13
+ timezone='UTC'): # the resampling operation should be implemented later
14
+
15
+ # format the time range
16
+ query_start_time = pd.Timestamp(start_time, tz=timezone)
17
+ query_end_time = pd.Timestamp(end_time, tz=timezone)
18
+
19
+ query_start_time_str = query_start_time.strftime("%Y-%m-%d %H:%M:%S.%f%z")
20
+ query_end_time_str = query_end_time.strftime("%Y-%m-%d %H:%M:%S.%f%z")
21
+
22
+ time_range = [query_start_time_str, query_end_time_str]
23
+
24
+ engine = db.engine
25
+ table_name_iot = db.table_iot.name
26
+ table_name_meta = db.table_meta.name
27
+ # table_name_link = db.table_name_link
28
+
29
+ df_meta = load_metadata(engine, table_name_meta, building_id,
30
+ # organisation=organisation,
31
+ exception=exception)
32
+
33
+ if df_meta.shape[0] == 0:
34
+
35
+ raise Exception('There is not metadata found for this building!')
36
+
37
+ # print('df_meta: ', df_meta)
38
+
39
+ id_list = df_meta.id.to_list()
40
+
41
+ df_emd = load_iot_data(engine, time_range, table_name_iot, id_list, chunksize=chunksize)
42
+
43
+ df_meta_with_value = df_emd.merge(df_meta, on='id').drop(columns=['id']).rename(columns={'w': 'W'})
44
+
45
+ # print('df_meta_with_value.shape: ', df_meta_with_value.shape)
46
+
47
+ return df_meta_with_value
@@ -0,0 +1,28 @@
1
+
2
+ import pandas as pd
3
+ from tqdm import tqdm
4
+
5
+ from .load_iot_data_partition import load_iot_data_partition
6
+
7
+ def load_iot_data(engine, time_range, iot_table_name, id_list, chunksize=10):
8
+
9
+ # time_partition_list = generate_time_partition_list(time_range, freq=partition_freq)
10
+
11
+ df_iot = pd.DataFrame([])
12
+
13
+ id_list_partitions = [id_list[x:x+chunksize] for x in range(0, len(id_list), chunksize)]
14
+
15
+ no_partition = len(id_list_partitions)
16
+
17
+ # for id_list_part in tqdm(id_list_partitions):
18
+ for batch, id_list_part in enumerate(id_list_partitions):
19
+
20
+ print(f'batch: {batch+1}/{no_partition}')
21
+ df_iot_part = load_iot_data_partition(engine, time_range, iot_table_name, id_list_part)
22
+ # df_iot_part = load_iot_data_partition(engine, time_partition, iot_table_name, meta_table_name, statement_full)
23
+
24
+ df_iot = pd.concat([df_iot, df_iot_part])
25
+
26
+ return df_iot
27
+
28
+ # load_iot_data_partition(engine, time_partition, iot_table_name, meta_table_name, statement_full)
@@ -0,0 +1,24 @@
1
+
2
+ import pandas as pd
3
+
4
+ def load_iot_data_partition(engine, time_range, iot_table_name, id_list_part):
5
+
6
+ time_condition = f""" ((time >= '{time_range[0]}') and (time < '{time_range[1]}')) """
7
+
8
+ id_list_str = str(tuple(id_list_part)).replace('),)', '))')
9
+
10
+ data_query = f"""select time, id, kwh*6000 as W from {iot_table_name}
11
+ where id in {id_list_str}
12
+ and {time_condition};"""
13
+
14
+ # print('data_query: ', data_query)
15
+
16
+ with engine.connect() as conn:
17
+ df_iot_part_iter = pd.read_sql_query(data_query, con=conn, chunksize=5000)
18
+
19
+ df_iot_part = pd.DataFrame([])
20
+
21
+ for df_iot_part_i in df_iot_part_iter:
22
+ df_iot_part = pd.concat([df_iot_part, df_iot_part_i])
23
+
24
+ return df_iot_part
@@ -0,0 +1,34 @@
1
+
2
+ import pandas as pd
3
+
4
+ from .get_meta_statement import get_meta_statement
5
+
6
+ def load_metadata(engine, table_name_meta, building_id,
7
+ # organisation=None,
8
+ exception=None):
9
+
10
+ statement_full = get_meta_statement(building_id,
11
+ # organisation=organisation,
12
+ exception=exception, # the filter will be applied to link type
13
+ )
14
+
15
+ # print('statement_full: ', statement_full)
16
+
17
+ meta_query = f"""select id,
18
+ org,
19
+ building_name,
20
+ thing_name,
21
+ thing_type,
22
+ thing_category,
23
+ variable,
24
+ phase,
25
+ nid,
26
+ channel,
27
+ hardware_id
28
+ from {table_name_meta}
29
+ where {statement_full};"""
30
+
31
+ with engine.connect() as conn:
32
+ df_meta = pd.read_sql_query(meta_query, con=conn)
33
+
34
+ return df_meta
@@ -0,0 +1,32 @@
1
+
2
+
3
+ def get_meta_statement(building_id,
4
+ # organisation=None,
5
+ exception=None,
6
+ ):
7
+
8
+ statement_list = [f"""root_id='{building_id}'""", "thing_id is not null", "thing_name is not null"] # please note that the mt. lt. shortname for tables are still coupled with function load_metadata. Update - 20240814, resolved.
9
+
10
+ # if organisation != None:
11
+ # statement_new = f"""btrim(org) = '{organisation}'"""
12
+ # statement_list.append(statement_new)
13
+
14
+ if exception != None:
15
+ for key in exception:
16
+ is_list = isinstance(exception[key], list)
17
+
18
+ if is_list:
19
+ exc_list = exception[key]
20
+ else:
21
+ exc_list = [exception[key]]
22
+
23
+ exc_list_with_quote = [f"'{item}'" for item in exc_list]
24
+
25
+ exc_concat_str = ', '.join(exc_list_with_quote)
26
+
27
+ statement_new = f"""{key} not in ({exc_concat_str})"""
28
+ statement_list.append(statement_new)
29
+
30
+ statement_full = " and ".join(statement_list)
31
+
32
+ return statement_full
@@ -0,0 +1,40 @@
1
+ import pandas as pd
2
+
3
+ def query_building_total(db, start_time, end_time, building_id,
4
+ # organisation=None,
5
+ timezone='UTC'):
6
+
7
+ query_start_time = pd.Timestamp(start_time, tz=timezone)
8
+ query_end_time = pd.Timestamp(end_time, tz=timezone)
9
+
10
+ query_start_time_str = query_start_time.strftime("%Y-%m-%d %H:%M:%S.%f%z")
11
+ query_end_time_str = query_end_time.strftime("%Y-%m-%d %H:%M:%S.%f%z")
12
+
13
+ # print('query_start_time_str: ', query_start_time_str)
14
+ # print('query_end_time_str: ', query_end_time_str)
15
+
16
+
17
+ time_period = f"""(time >= '{query_start_time_str}') and (time < '{query_end_time_str}')"""
18
+
19
+ statement_list = [f"""building_id = '{building_id}'"""]
20
+
21
+ # if organisation != None:
22
+ # statement_new = f"""btrim("organisation") = '{organisation}'"""
23
+ # statement_list.append(statement_new)
24
+
25
+ statement_full = ' and '.join(statement_list)
26
+
27
+ query = f"""select time, kwh from {db.table_building_total.name} where {statement_full} and {time_period};"""
28
+
29
+ # year, month, building_name, organisation, building_id, org_id
30
+
31
+ # print('building_total query: ', query)
32
+
33
+ engine = db.engine
34
+
35
+ with engine.connect() as conn:
36
+
37
+ df_meta_with_value = pd.read_sql_query(query, con=conn)
38
+
39
+
40
+ return df_meta_with_value
@@ -0,0 +1,20 @@
1
+
2
+ from mdl.utils_ import modify_group_names
3
+ from .exchange_group_name_column import exchange_group_name_column
4
+
5
+ def refine_group_name(df_meta_with_value,
6
+ asset_group,
7
+ group_name_column_exchange,
8
+ fillna_value,
9
+ group_name_modification):
10
+
11
+ df_meta_with_value = exchange_group_name_column(df_meta_with_value,
12
+ group_name_column_exchange,
13
+ asset_group)
14
+
15
+ df_meta_with_value[asset_group] = df_meta_with_value[asset_group].fillna(fillna_value)
16
+
17
+ df_meta_with_value = modify_group_names(df_meta_with_value,
18
+ group_name_column=asset_group,
19
+ modification_dict=group_name_modification)
20
+ return df_meta_with_value
@@ -0,0 +1,10 @@
1
+
2
+
3
+ def exchange_group_name_column(df_meta_with_value, group_name_column_exchange, asset_group_column):
4
+
5
+ # for the special groups where we need to use a different column_name as group_name
6
+ for special_group_name in group_name_column_exchange:
7
+ special_group_index = (df_meta_with_value[asset_group_column] == special_group_name)
8
+ df_meta_with_value.loc[special_group_index, asset_group_column] = df_meta_with_value.loc[special_group_index, group_name_column_exchange[special_group_name]]
9
+
10
+ return df_meta_with_value
@@ -0,0 +1,9 @@
1
+
2
+
3
+ def validate_data_not_empty(df_meta_with_value, df_meta_with_value_building):
4
+
5
+ if df_meta_with_value.shape[0] == 0:
6
+ raise Exception(f'The dataframe [df_meta_with_value] is empty!')
7
+
8
+ if df_meta_with_value_building.shape[0] == 0:
9
+ raise Exception(f'The dataframe [df_meta_with_value_building] is empty!')
@@ -0,0 +1,19 @@
1
+
2
+ from cache_return import cache_return
3
+
4
+ @cache_return
5
+ def select_sites_and_emails(df_config, mode, reviewer_emails):
6
+
7
+ if mode == 'publish':
8
+ df_config_select = df_config.loc[df_config.publish]
9
+ df_config_select['send_to'] = df_config_select.mailing_list
10
+ elif mode == 'review':
11
+ df_config_select = df_config.loc[df_config.publish]
12
+ df_config_select['send_to'] = [reviewer_emails for _ in df_config_select.index] # assigning the same emails to every site
13
+ elif mode == 'testing':
14
+ df_config_select = df_config.loc[df_config.testing]
15
+ df_config_select['send_to'] = [reviewer_emails for _ in df_config_select.index]
16
+ else:
17
+ raise Exception('Please provide the right mode [publish, review, testing].')
18
+
19
+ return df_config_select
@@ -0,0 +1,17 @@
1
+
2
+ from .send_email import send_email
3
+ from .get_group_with_others import get_group_with_others
4
+ from .enriching_time_features import enriching_time_features
5
+ from .modify_group_names import modify_group_names
6
+ from .delete_files_in_directory import delete_files_in_directory
7
+ from .color_dict import color_dict
8
+ from .generate_time_partition_list import generate_time_partition_list
9
+ from .cache_obj import cache_obj
10
+ from .setup_table import setup_table
11
+ from .setup_table import empty_table
12
+ from .patch_missing_periods import patch_missing_periods
13
+ from .cache_df_to_db import cache_df_to_db
14
+ from .plot_stacked_barchart import plot_stacked_barchart
15
+ from .get_pos_bot_range_unit_format import get_pos_bot_range_unit_format
16
+
17
+