def download_report(self, *event): """Generate and download final report""" report_stream = io.BytesIO() reports.generate( self._report_cfg.generator, template_url=self._report_cfg.template, cfg=self._report_cfg, data=self.data, output_path=report_stream, ) try: session_id = pn.state.curdoc.session_context.id logger.insights( f"New report with GeoXID: {self.geox_id}, SessionID: {session_id}" ) except AttributeError as e: logger.insights(f"New report with GeoXID: {self.geox_id}") logger.error(f"SessionID not available: {e}") # Clear scenarios from state self._state["scenarios"].clear() # Reset report byte stream to start before passing it back report_stream.seek(0) return report_stream
async def log_dep(token, session_id): if not get_log_settings().log_user_info: return user_token = await oauth.obo(token, scope="User.Read") dep = await _user_department(user_token, config.api.ms_graph.url) if dep is not None: logger.insights(f"Department: {dep}, SessionID: {session_id}") return None
def __init__(self, report_from_composition, net_gross): """Set initial values based on previous stage""" super().__init__() self._state = state.get_user_state().setdefault(APP, {}) self._state.setdefault("scenarios", {}) self._current_scenario_name = None self.net_gross = net_gross self.report_from_composition = report_from_composition self.scenario_name = f"Scenario {len(self._state['scenarios']) + 1}" self.data = charts.data_as_dataframe(report_from_composition, CFG.columns) try: session_id = pn.state.curdoc.session_context.id logger.insights(f"New result: {self.net_gross}, SessionID: {session_id}") logger.insights( f"SessionID: {session_id}, Choices: {report_from_composition}" ) except AttributeError as e: logger.error(f"SessionID not available: {e}") logger.insights(f"New result: {self.net_gross}") logger.insights(f"Choices: {report_from_composition}")