Exemple #1
0
    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()
Exemple #2
0
    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")
Exemple #3
0
 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
Exemple #4
0
    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")
Exemple #5
0
    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))