def get_connection(self) -> MongoClient:
   try:
     conn = MongoClient(self.uri, serverSelectionTimeoutMS=1)
     conn.server_info()
     try:
       conn.admin.command("ismaster")
     except ConnectionFailure:
       logger.error(f"Could not connect to MongoDB: {error}")
     finally:
       try:
         conn["admin"].command("serverStatus")
       except Exception as error:
         logger.error(f"General Exception Mongo - {error}")
       else:
         logger.info("You are connected!")
       return conn
   except ServerSelectionTimeoutError  as error:
     logger.error(f"Server Timeout Error - {error}")
def consumer() -> NoReturn:
    logger.info(f"This is {realtime}...")
    consumer = TwitterConsumer(broker, tweets_topic).consumer
    if consumer.bootstrap_connected():
        logger.info("Connection okay.")
        for messagem in consumer:
            logger.info(messagem.value)
    else:
        logger.error("Failed to connect to service")
 def get(self):
     logger.info("GET - covid tweets...")
     tweets = tweet_clean.filter_tweets(Twitter().search(**query_tweets))
     mongo_client = mongo.get_connection()
     db = mongo_client["twitter"]
     collection = db["covid"]
     if tweets:
         logger.info("200 - GET - successfully get covid tweets")
         for tweet in tweets:
             try:
                 found = collection.find({
                     "_id": dict(tweet)["_id"]
                 }).limit(1).count()
                 if found > 0:
                     logger.info(
                         "Data alredy exist in MongoDB. Continue...")
                     continue
                 else:
                     insert = collection.insert_one(tweet)
                     if insert.inserted_id:
                         logger.info(
                             "Insert data covid tweet in MongoDB - Successfully insert data!"
                         )
                     else:
                         logger.error(
                             "Insert data covid tweet in MongoDB - Bad insert data..."
                         )
             except DuplicateKeyError as error:
                 logger.error("400 - GET - no covid tweets")
                 logger.error(f"DuplicateKeyError - {error}")
                 return {"message": responses[400], "count": 0}, 400
         return {"message": responses[200], "count": len(tweets)}, 200
     else:
         logger.error("400 - GET - no covid tweets")
         return {"message": responses[400], "count": 0}, 400
     mongo.close_connection(mongo_client)
 def list_databases(self) -> NoReturn:
   for index, value in enumerate(self.client.list_database_names(), start=1):
     logger.info(f"Database {index} - {value}")
 def close_connection(self, client: Callable) -> NoReturn:
   logger.info("Connection getting closed")
   client.close()
 def get(self):
     logger.info("GET - sentimental analysis of covid tweets...")
     mongo_client = mongo.get_connection()
     db = mongo_client["twitter"]
     collection_covid = db["covid"]
     collection_sentimental = db["sentimental"]
     if collection_sentimental.count() == 0:
         logger.info("Sentimental collection is empty")
         if "sentimental" in db.list_collection_names():
             logger.info("Sentimental collection exist")
         else:
             logger.info("Sentimental collection not exist")
     else:
         logger.info("Sentimental collection is not empty")
     try:
         tweets = [[
             tweet["_id"], tweet["full_text"]
         ] for tweet in [tweet for tweet in collection_covid.find()]]
         if len(tweets) == 0:
             logger.warning("No covid tweets. Empty information")
     except Exception as error:
         logger.error("400 - GET - {}".format(error))
         return {"message": str(error), "count": 0}, 400
     if tweets:
         sentiments = analyzer.get_tweets_sentiment(tweets, sentiment=None)
         if sentiments:
             logger.info(
                 "200 - GET - successfully get sentimental analysis of covid tweets"
             )
             neg = analyzer.get_tweets_sentiment(tweets, sentiment="neg")
             pos = analyzer.get_tweets_sentiment(tweets, sentiment="pos")
             neutros = analyzer.get_tweets_sentiment(tweets,
                                                     sentiment="neutros")
             for tweet in sentiments:
                 try:
                     found = collection_sentimental.find({
                         "tweet_id":
                         dict(tweet)["tweet_id"]
                     }).limit(1).count()
                     if found > 0:
                         logger.info(
                             "Data alredy exist in MongoDB. Continue...")
                         continue
                     else:
                         insert = collection_sentimental.insert_one(tweet)
                         if insert.inserted_id:
                             logger.info(
                                 "Insert data sentimental analysis in MongoDB - Successfully insert data!"
                             )
                         else:
                             logger.error(
                                 "Insert data sentimental analysis in MongoDB - Bad insert data..."
                             )
                 except pymongo.errors.DuplicateKeyError as error:
                     logger.error(
                         "400 - GET - no data sentimental analysis of covid tweets"
                     )
                     logger.error(f"DuplicateKeyError - {error}")
                     return {"message": responses[400], "count": 0}, 400
             return {
                 "message": responses[200],
                 "count": len(sentiments)
             }, 200
         else:
             logger.error(
                 "400 - GET - no data sentimental analysis of covid tweets")
             return {
                 "message": responses[400],
                 "count": 0,
             }, 400
     else:
         logger.info("400 - GET - no covid tweets")
         return {
             "message": responses[400],
             "data": [],
             "count": 0,
         }, 400
     mongo.close_connection(mongo_client)
 def on_connect(self) -> NoReturn:
   logger.info("You are now connected to twitter streaming API.")