newTao/modules/mongo_config.py

86 lines
3.9 KiB
Python

from pymongo import MongoClient
from configparser import ConfigParser
import os
class MongoConfig:
_instance = None # 클래스 레벨의 인스턴스 변수
def __new__(cls):
if cls._instance is None:
cls._instance = super(MongoConfig, cls).__new__(cls)
cls._instance.init_config()
return cls._instance
def init_config(self):
self.config = ConfigParser()
config_path = os.path.join(os.path.dirname(__file__), 'config.ini')
self.config.read(config_path)
print(config_path)
self.client = None # MongoDB 클라이언트 초기화
self.load_config()
def load_config(self):
if not self.config.has_section('MongoDB'):
raise Exception('서버 설정파일이 없습니다.config.ini 파일을 체크하세요.')
if self.config.has_section('MongoDB'):
address = self.config.get('MongoDB', 'address', fallback='localhost')
port = self.config.get('MongoDB', 'port', fallback='27017')
user = self.config.get('MongoDB', 'user', fallback='')
password = self.config.get('MongoDB', 'password', fallback='')
if not all([address, port, user, password]):
raise Exception('Incomplete MongoDB configuration. Please check your config.ini file.')
return address, port, user, password
# def connect(self):
# self.client = MongoClient(f'mongodb://{self.user}:{self.password}@{self.address}:{self.port}/')
# self.db = self.client['taobao_project']
@staticmethod
def get_db():
return MongoConfig()._instance.db
def save_config(self, address, port, user, password):
self.config['MongoDB'] = {
'address': address,
'port': port,
'user': user,
'password': password
}
with open('config.ini', 'w') as configfile:
self.config.write(configfile)
def try_connect(self, address, port, user, password):
address, port, user, password = self.load_config()
print(f"{address},{port},{user},{password}")
if not all([address, port, user, password]):
print("Configuration missing. Please check your config.ini file.")
return False
try:
self.client = MongoClient(f'mongodb://{user}:{password}@{address}:{port}/')
self.db = self.client['taobao_project'] # 여기에서 추가 연결 확인 작업을 수행할 수 있습니다.
print("MongoDB 연결 성공.")
return True
except Exception as e:
print(f"MongoDB 연결 실패: {e}")
return False
def load_synology_config(self):
# if not self.config.has_section('SynologyDrive'):
# raise Exception('SynologyDrive 설정 섹션이 config.ini 파일에 없습니다.')
# url = self.config.get('SynologyDrive', 'url', fallback='')
# account = self.config.get('SynologyDrive', 'account', fallback='')
# password = self.config.get('SynologyDrive', 'password', fallback='')
# if not all([url, account, password]):
# raise Exception('Incomplete SynologyDrive configuration in config.ini.')
# self.synology_url = url
# self.synology_account = account
# self.synology_password = password
if self.config.has_section('SynologyDrive'):
url = self.config.get('SynologyDrive', 'url')
account = self.config.get('SynologyDrive', 'account')
password = self.config.get('SynologyDrive', 'password')
return {'url': url, 'account': account, 'password': password}
else:
print("SynologyDrive 설정이 config.ini 파일에 없습니다.")
return None # 여기서 None을 반환하는 대신, 적절한 기본값을 제공하거나 예외를 발생시키는 것을 고려해볼 수 있습니다.