def __load_database(self) -> None: try: data_ = self._session.execute( text("SELECT data FROM persistence")).first() data = data_[0] if data_ is not None else {} self.logger.info("Loading database....") self._chat_data = defaultdict( dict, self._key_mapper(data.get("chat_data", {}), int)) self._user_data = defaultdict( dict, self._key_mapper(data.get("user_data", {}), int)) self._bot_data = data.get("bot_data", {}) self._conversations = decode_conversations_from_json( data.get("conversations", "{}")) self.logger.info("Database loaded successfully!") # if it is a fresh setup we'll add some placeholder data so we # can perform `UPDATE` opearations on it, cause SQL only allows # `UPDATE` operations if column have some data already present inside it. if not data: insert_qry = "INSERT INTO persistence (data) VALUES (:jsondata)" self._session.execute(text(insert_qry), {"jsondata": "{}"}) self._session.commit() finally: self._session.close()
def __init__(self, store_user_data=True, store_chat_data=True, user_data_json='', chat_data_json='', conversations_json=''): self.store_user_data = store_user_data self.store_chat_data = store_chat_data self._user_data = None self._chat_data = None self._conversations = None self._user_data_json = None self._chat_data_json = None self._conversations_json = None if user_data_json: try: self._user_data = decode_user_chat_data_from_json(user_data_json) self._user_data_json = user_data_json except (ValueError, AttributeError): raise TypeError("Unable to deserialize user_data_json. Not valid JSON") if chat_data_json: try: self._chat_data = decode_user_chat_data_from_json(chat_data_json) self._chat_data_json = chat_data_json except (ValueError, AttributeError): raise TypeError("Unable to deserialize chat_data_json. Not valid JSON") if conversations_json: try: self._conversations = decode_conversations_from_json(conversations_json) self._conversations_json = conversations_json except (ValueError, AttributeError): raise TypeError("Unable to deserialize conversations_json. Not valid JSON")
def load_conversation_data(self, filename): try: node_data, stat = self.zoo_client.get(filename).decode('utf-8') json_data = decode_conversations_from_json(node_data) return json_data except Exception as ex: logger.error('Error read data from node %s with Exception: %s' % (filename, ex)) return None
def __init__(self, store_user_data=True, store_chat_data=True, store_bot_data=True, user_data_json='', chat_data_json='', bot_data_json='', conversations_json=''): super().__init__(store_user_data=store_user_data, store_chat_data=store_chat_data, store_bot_data=store_bot_data) self._user_data = None self._chat_data = None self._bot_data = None self._conversations = None self._user_data_json = None self._chat_data_json = None self._bot_data_json = None self._conversations_json = None if user_data_json: try: self._user_data = decode_user_chat_data_from_json( user_data_json) self._user_data_json = user_data_json except (ValueError, AttributeError): raise TypeError( "Unable to deserialize user_data_json. Not valid JSON") if chat_data_json: try: self._chat_data = decode_user_chat_data_from_json( chat_data_json) self._chat_data_json = chat_data_json except (ValueError, AttributeError): raise TypeError( "Unable to deserialize chat_data_json. Not valid JSON") if bot_data_json: try: self._bot_data = json.loads(bot_data_json) self._bot_data_json = bot_data_json except (ValueError, AttributeError): raise TypeError( "Unable to deserialize bot_data_json. Not valid JSON") if not isinstance(self._bot_data, dict): raise TypeError("bot_data_json must be serialized dict") if conversations_json: try: self._conversations = decode_conversations_from_json( conversations_json) self._conversations_json = conversations_json except (ValueError, AttributeError): raise TypeError( "Unable to deserialize conversations_json. Not valid JSON")
def __load_database(self) -> None: try: data_ = self._session.execute( text("SELECT data FROM persistence")).first() data = data_[0] if data_ is not None else {} self.logger.info("Loading database \n%s", data) self._chat_data = defaultdict( dict, self._key_mapper(data.get("chat_data", {}), int)) self._user_data = defaultdict( dict, self._key_mapper(data.get("user_data", {}), int)) self._bot_data = data.get("bot_data", {}) self._conversations = decode_conversations_from_json( data.get("conversations", "{}")) self.logger.info("Database loaded successfully!") finally: self._session.close()
def __init__( self, store_user_data: bool = True, store_chat_data: bool = True, store_bot_data: bool = True, user_data_json: str = '', chat_data_json: str = '', bot_data_json: str = '', conversations_json: str = '', store_callback_data: bool = False, callback_data_json: str = '', ): super().__init__( store_user_data=store_user_data, store_chat_data=store_chat_data, store_bot_data=store_bot_data, store_callback_data=store_callback_data, ) self._user_data = None self._chat_data = None self._bot_data = None self._callback_data = None self._conversations = None self._user_data_json = None self._chat_data_json = None self._bot_data_json = None self._callback_data_json = None self._conversations_json = None if user_data_json: try: self._user_data = decode_user_chat_data_from_json( user_data_json) self._user_data_json = user_data_json except (ValueError, AttributeError) as exc: raise TypeError( "Unable to deserialize user_data_json. Not valid JSON" ) from exc if chat_data_json: try: self._chat_data = decode_user_chat_data_from_json( chat_data_json) self._chat_data_json = chat_data_json except (ValueError, AttributeError) as exc: raise TypeError( "Unable to deserialize chat_data_json. Not valid JSON" ) from exc if bot_data_json: try: self._bot_data = json.loads(bot_data_json) self._bot_data_json = bot_data_json except (ValueError, AttributeError) as exc: raise TypeError( "Unable to deserialize bot_data_json. Not valid JSON" ) from exc if not isinstance(self._bot_data, dict): raise TypeError("bot_data_json must be serialized dict") if callback_data_json: try: data = json.loads(callback_data_json) except (ValueError, AttributeError) as exc: raise TypeError( "Unable to deserialize callback_data_json. Not valid JSON" ) from exc # We are a bit more thorough with the checking of the format here, because it's # more complicated than for the other things try: if data is None: self._callback_data = None else: self._callback_data = cast( CDCData, ([(one, float(two), three) for one, two, three in data[0]], data[1]), ) self._callback_data_json = callback_data_json except (ValueError, IndexError) as exc: raise TypeError( "callback_data_json is not in the required format" ) from exc if self._callback_data is not None and (not all( isinstance(entry[2], dict) and isinstance(entry[0], str) for entry in self._callback_data[0]) or not isinstance( self._callback_data[1], dict)): raise TypeError( "callback_data_json is not in the required format") if conversations_json: try: self._conversations = decode_conversations_from_json( conversations_json) self._conversations_json = conversations_json except (ValueError, AttributeError) as exc: raise TypeError( "Unable to deserialize conversations_json. Not valid JSON" ) from exc
def get_conversations() -> dict: """load conversations from database""" conversations = get_persistence_row(name=consts.CONVERSATIONS).data if conversations is None: return {} return decode_conversations_from_json(json.dumps(conversations))