bots/incident-response-slackbot/incident_response_slackbot/db/database.py (36 lines of code) (raw):
import os
import pickle
class Database:
"""
This class represents a database for storing user messages.
The data is stored in a pickle file.
"""
def __init__(self):
"""
Initialize the database. Load data from the pickle file if it exists,
otherwise create an empty dictionary.
"""
current_dir = os.path.dirname(os.path.realpath(__file__))
self.file_path = os.path.join(current_dir, "data.pkl")
self.data = {}
def _load_data(self):
"""
Load data from the pickle file if it exists,
otherwise return an empty dictionary.
"""
if os.path.exists(self.file_path):
with open(self.file_path, "rb") as f:
return pickle.load(f)
else:
return {}
def _save(self):
"""
Save the current state of the database to the pickle file.
"""
with open(self.file_path, "wb") as f:
pickle.dump(self.data, f)
# Add a new entry to the database
def add(self, user_id, message_ts):
"""
Add a new entry to the database. If the user_id already exists,
update the message timestamp. Otherwise, create a new entry.
"""
self.data = self._load_data()
self.data.setdefault(user_id, {})["message_ts"] = message_ts
self._save()
# Delete an entry from the database
def delete(self, user_id):
"""
Delete an entry from the database using the user_id as the key.
"""
self.data = self._load_data()
self.data.pop(user_id, None)
self._save()
# Check if user_id exists in the database
def user_exists(self, user_id):
"""
Check if the user_id exists in the database.
"""
self.data = self._load_data()
return user_id in self.data
# Return the message timestamp for a given user_id
def get_ts(self, user_id):
"""
Return the message timestamp for a given user_id.
"""
self.data = self._load_data()
return self.data[user_id]["message_ts"]
# Return the user_id given a message_ts
def get_user_id(self, message_ts):
"""
Return the user_id given a message_ts.
"""
self.data = self._load_data()
for user_id, data in self.data.items():
if data["message_ts"] == message_ts:
return user_id
return None