Add Redis support

This commit is contained in:
2026-04-20 16:42:53 +03:00
parent 95768e8dfd
commit f4146ea167
4 changed files with 78 additions and 3 deletions
+60
View File
@@ -12,6 +12,7 @@ from PyQt5.QtCore import QSize, Qt
from PyQt5.QtWidgets import QApplication, QGridLayout, QHeaderView, QMainWindow, QTableWidget, QTableWidgetItem, QWidget
MongoClient = importlib.import_module("pymongo").MongoClient
Redis = importlib.import_module("redis").Redis
load_dotenv()
@@ -45,6 +46,12 @@ MONGO_URI = os.getenv("MONGO_URI", "mongodb://localhost:27017")
MONGO_DB = os.getenv("MONGO_DB", "movie_data")
MONGO_COLLECTION = os.getenv("MONGO_COLLECTION", "movies")
REDIS_ACTIVE = os.getenv("REDIS_ACTIVE", "false").lower() == "true"
REDIS_HOST = os.getenv("REDIS_HOST", "localhost")
REDIS_PORT = int(os.getenv("REDIS_PORT", "6379"))
REDIS_DB = int(os.getenv("REDIS_DB", "0"))
REDIS_PASS = os.getenv("REDIS_PASS")
USER_SEED_DATA = [
(1, "Ivan", 15),
(2, "Igor", 22),
@@ -239,6 +246,46 @@ def select_mongo_movies(collection):
return [document["title"] for document in cursor]
def connect_redis():
return Redis(
host=REDIS_HOST,
port=REDIS_PORT,
db=REDIS_DB,
password=REDIS_PASS if REDIS_PASS else None,
decode_responses=True,
)
def insert_redis_movies(client):
if client.exists("movies:seeded"):
print("Redis data is already seeded.")
return
seed_movies = {
"Apollo 13": 1995,
"The Matrix": 1999,
"City of Angels": 1998,
"Toy Story": 1995,
"Alien": 1979,
}
for title, released in seed_movies.items():
client.hset(f"movie:{title}", mapping={"title": title, "released": released})
client.set("movies:seeded", "1")
print("Redis movies inserted.")
def select_redis_movies(client):
titles = []
for key in client.scan_iter(match="movie:*"):
movie = client.hgetall(key)
if not movie:
continue
released = int(movie.get("released", 0))
if 1990 <= released < 2000:
titles.append(movie.get("title", ""))
return sorted(title for title in titles if title)
def load_users():
admin_conn = connect_postgres("postgres")
try:
@@ -428,4 +475,17 @@ if __name__ == "__main__":
except Exception as error:
print(f"MongoDB load failed: {error}")
if REDIS_ACTIVE:
try:
redis_client = connect_redis()
insert_redis_movies(redis_client)
redis_movies = select_redis_movies(redis_client)
redis_window = DataWindow("redis", ["Info"], main_window, len(graph_windows))
redis_window.load_data([(title,) for title in redis_movies])
redis_window.show()
graph_windows.append(redis_window)
except Exception as error:
print(f"Redis load failed: {error}")
sys.exit(app.exec())