import pymongo | |
import os | |
import pandas as pd | |
from config import DATABASE, COLLECTION | |
from logger import get_logger | |
logger = get_logger() | |
class DBRead: | |
""" | |
Reads news from MongoDB | |
""" | |
def __init__(self): | |
self.url = os.getenv('DB_URL') | |
self.database = DATABASE | |
self.collection = COLLECTION | |
self.__client = None | |
self.__error = 0 | |
def __connect(self): | |
try: | |
self.__client = pymongo.MongoClient(self.url) | |
_ = self.__client.list_database_names() | |
except Exception as conn_exception: | |
self.__error = 1 | |
self.__client = None | |
raise | |
def __read(self): | |
try: | |
db = self.__client[self.database] | |
coll = db[self.collection] | |
docs = [] | |
for doc in coll.find(): | |
docs.append(doc) | |
rss_df = pd.DataFrame(docs) | |
except Exception as insert_err: | |
self.__error = 1 | |
rss_df = pd.DataFrame() | |
return rss_df | |
def __close_connection(self): | |
if self.__client is not None: | |
self.__client.close() | |
self.__client = None | |
def read_news_from_db(self): | |
logger.warning('Entering read_news_from_db() to read old news') | |
rss_df = pd.DataFrame() | |
if self.url is not None: | |
if self.__error == 0: | |
self.__connect() | |
if self.__error == 0: | |
rss_df = self.__read() | |
if self.__error == 0: | |
logger.warning(f"Read Successful. Read {len(rss_df)} documents.") | |
if self.__client is not None: | |
self.__close_connection() | |
logger.warning(f'Exiting read_news_from_db()') | |
if len(rss_df) == 0: | |
rss_df = None | |
return rss_df |