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.
- energy_reports_pkg-0.6.14.dist-info/METADATA +10 -0
- energy_reports_pkg-0.6.14.dist-info/RECORD +221 -0
- energy_reports_pkg-0.6.14.dist-info/WHEEL +5 -0
- energy_reports_pkg-0.6.14.dist-info/top_level.txt +1 -0
- mindsett_energy_reports_pkg/config/__init__.py +6 -0
- mindsett_energy_reports_pkg/config/email/__init__.py +37 -0
- mindsett_energy_reports_pkg/config/monday/__init__.py +8 -0
- mindsett_energy_reports_pkg/config/monday/auth/__init__.py +7 -0
- mindsett_energy_reports_pkg/config/monday/columns_concerned/__init__.py +22 -0
- mindsett_energy_reports_pkg/config/postgresdb/__init__.py +33 -0
- mindsett_energy_reports_pkg/config/postgresdb/table/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_building/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_building_total/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_cache/__init__.py +30 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_iot/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_mailing/__init__.py +15 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_meta/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_occupancy/__init__.py +3 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_on_off/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_org/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_price/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_schedule/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_sqm/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_timezone/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/sharepoint/__init__.py +12 -0
- mindsett_energy_reports_pkg/config/sharepoint/excel/__init__.py +5 -0
- mindsett_energy_reports_pkg/config/sharepoint/excel/columns_concerned/__init__.py +7 -0
- mindsett_energy_reports_pkg/config/smtp/__init__.py +10 -0
- mindsett_energy_reports_pkg/jobs/databricks_job.py +31 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/DataProcessor/__init__.py +14 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/DataProcessor/launchInteractiveProcess.py +6 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorBoardColumnNotMatch/__init__.py +6 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorBoardNotFound/__init__.py +5 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorException/__init__.py +4 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorNoColumInBoard/__init__.py +5 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorNoGroupsInBoard/__init__.py +5 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorNoItemInGroup/__init__.py +6 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorPageNotSupported/__init__.py +7 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/__init__.py +8 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/__init__.py +40 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchBoardById.py +13 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchBoardLogsById.py +33 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchColumnValueByGroup.py +103 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchGroups.py +19 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchPrismConf.py +10 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchPrismConfByBoard.py +83 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchPrismConfByGroup.py +89 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_searchColumnIdsByName.py +23 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_searchConfColumnIds.py +30 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_searchConfColumnIdsMatch.py +20 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/__init__.py +12 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/__init__.py +10 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/items/__init__.py +12 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/items/column_values/__init__.py +10 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/items/column_values/column/__init__.py +2 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/launchInteractiveProcess.py +7 -0
- mindsett_energy_reports_pkg/libs/__init__.py +4 -0
- mindsett_energy_reports_pkg/libs/cache_return/__init__.py +47 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/__init__.py +29 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/load_cf_from_db/__init__.py +17 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/__init__.py +52 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/cache_cf_to_db/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/cache_cf_to_db/append_df_to_table/__init__.py +29 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/cache_cf_to_db/empty_table/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/__init__.py +57 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/get_mailing_list/__init__.py +25 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/load_mailing_list/__init__.py +50 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/load_mailing_list/columns_concerned/__init__.py +22 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/get_last_update_time/__init__.py +26 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/__init__.py +27 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/load_cf_from_db/__init__.py +17 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/__init__.py +28 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/cache_cf_to_db/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/cache_cf_to_db/append_df_to_table/__init__.py +29 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/cache_cf_to_db/empty_table/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/__init__.py +13 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/__init__.py +57 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/columns_concerned/__init__.py +8 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/extract_id/# __init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/extract_id/__init__.py +19 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/get_mailing_list/__init__.py +10 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/uuid_for_nona/__init__.py +12 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/load_mailing_list/__init__.py +30 -0
- 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
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/load_mailing_list/load_excel_as_df/__init__.py +45 -0
- mindsett_energy_reports_pkg/libs/generate_dag_id/__init__.py +20 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/__init__.py +42 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/__version__.py +8 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_airflow/__init__.py +47 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/__init__.py +25 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/get_credential_url/__init__.py +17 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/get_credential_url/databricks/__init__.py +10 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/get_credential_url/local/__init__.py +13 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_synapse/__init__.py +15 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_synapse/connect_lake_and_fetch_json/__init__.py +19 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_synapse/datalake/__init__.py +7 -0
- mindsett_energy_reports_pkg/mdl/__init__.py +2 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/__init__.py +119 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_end_time/__init__.py +8 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_period_range/__init__.py +8 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_schedule_records/__init__.py +34 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_start_time/__init__.py +6 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_start_time_co2_barchart/__init__.py +7 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/__init__.py +93 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/email_report/__init__.py +47 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/__init__.py +75 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/apply_price_from_db/__init__.py +13 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/apply_price_from_db/load_energy_price/__init__.py +14 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/attach_id_to_buildings/__init__.py +24 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/attach_id_to_buildings/load_building/__init__.py +19 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/attach_id_to_buildings/load_org/__init__.py +13 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/check_and_keep_valid/__init__.py +36 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/load_sqm/__init__.py +11 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/load_timezone/__init__.py +11 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/__init__.py +43 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/__init__.py +47 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/__init__.py +40 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/__init__.py +42 -0
- 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
- 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
- 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
- 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
- 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
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/__init__.py +42 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/insight_statements/__init__.py +41 -0
- 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
- 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
- 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
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/preprocessing_for_statement/__init__.py +85 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/__init__.py +29 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/plot_shifted_period_barchart/__init__.py +49 -0
- 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
- 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
- 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
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/preprocessing_for_period_barchart/__init__.py +43 -0
- 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
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/__init__.py +56 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_phases/__init__.py +37 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/__init__.py +26 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_report/PDF/__init__.py +44 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_report/PDF/write_multicell_with_styles.py +30 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_report/__init__.py +162 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/__init__.py +78 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/__init__.py +32 -0
- 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
- 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
- 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
- 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
- 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
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/query_building_total/__init__.py +40 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/refine_group_name/__init__.py +20 -0
- 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
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/validate_data_not_empty/__init__.py +9 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/select_sites_and_emails/__init__.py +19 -0
- mindsett_energy_reports_pkg/mdl/utils_/__init__.py +17 -0
- mindsett_energy_reports_pkg/mdl/utils_/cache_df_to_db/__init__.py +11 -0
- mindsett_energy_reports_pkg/mdl/utils_/cache_df_to_db/append_df_to_table/__init__.py +29 -0
- mindsett_energy_reports_pkg/mdl/utils_/cache_df_to_db/empty_table/__init__.py +11 -0
- mindsett_energy_reports_pkg/mdl/utils_/cache_obj/__init__.py +50 -0
- mindsett_energy_reports_pkg/mdl/utils_/color_dict/__init__.py +13 -0
- mindsett_energy_reports_pkg/mdl/utils_/delete_files_in_directory/__init__.py +15 -0
- mindsett_energy_reports_pkg/mdl/utils_/enriching_time_features/__init__.py +66 -0
- mindsett_energy_reports_pkg/mdl/utils_/enriching_time_features/__version__.py +4 -0
- mindsett_energy_reports_pkg/mdl/utils_/generate_time_partition_list/__init__.py +14 -0
- mindsett_energy_reports_pkg/mdl/utils_/get_group_with_others/__init__.py +7 -0
- mindsett_energy_reports_pkg/mdl/utils_/get_pos_bot_range_unit_format/__init__.py +37 -0
- mindsett_energy_reports_pkg/mdl/utils_/get_pos_bot_range_unit_format/get_pos_bot_and_ylim/__init__.py +31 -0
- mindsett_energy_reports_pkg/mdl/utils_/modify_group_names/__init__.py +17 -0
- mindsett_energy_reports_pkg/mdl/utils_/patch_missing_periods/__init__.py +34 -0
- mindsett_energy_reports_pkg/mdl/utils_/plot_stacked_barchart/__init__.py +50 -0
- mindsett_energy_reports_pkg/mdl/utils_/send_email/__init__.py +73 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/__init__.py +40 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/check_table_existence/__init__.py +25 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/create_new_schema/__init__.py +8 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/create_table/__init__.py +73 -0
- 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)
|
mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_report/__init__.py
ADDED
@@ -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
|
+
|