#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @version : 0.0.1
# @File : DBConfig.py
# @Time : 2018/8/30 0030 下午 2:46
# @Site :
# @Software: PyCharm
# @Author : singebogo
# @Author_email: singbogo@163.com
# @description:
# 主要功能:
# 1、生成ini文件
# 1、定义数据源
# 2、解析数据
# 3、生成ini文件
# 2、读取ini文件
# 1、读取文件
# 2、获取数据,key-value
#
# DBconfig
# /\ /\
# | |
# | |
# DBConfigRead DBConfigSet
#
# 基本数据定义:
# enum dbtypes {}
#
# DBconfig: 抽象类
#
# 1、属性: dbtype、host、user、password、database、charset
# 2、ABs set get map(key-value)
# 3、Mkdir DbConfig
import os
from new_frame.api.filegener.path.proj import ProjPath
from new_frame.util.STL.dictmaintain import MapCommon,DEFAULTTARGETTYPE
from new_frame.util.logutil.log import logger
from new_frame.util.config.ini import IniConfig
dbConfigName = 'DBConfig.ini'
#---------------------------------------------------------------------------
# Level related stuff
#---------------------------------------------------------------------------
#
# Default levels and level names, these can be replaced with any positive set
# of values having corresponding names. There is a pseudo-level, NOTSET, which
# is only really there as a lower limit for user-defined levels. Handlers and
# loggers are initialized with NOTSET so that they will log all messages, even
# at user-defined levels.
#
mysql = 0
oracle = 1
sqlserver = 2
access = 3
db2 = 4
sybase = 5
foxbase = 6
# 非关系型数据库
redis = 7
mongodb = 8
DBTYPES = {
mysql : 'mysql',
oracle : 'oracle',
sqlserver : 'sqlserver',
access : 'access',
db2 : 'db2',
sybase : 'sybase',
foxbase: 'foxbase',
redis: 'redis',
mongodb: 'mongodb',
'mysql': mysql,
'oracle': oracle,
'sqlserver': sqlserver,
'access': access,
'db2': db2,
'sybase': sybase,
'foxbase': foxbase,
'redis': redis,
'mongodb': mongodb,
}
targettype = 'dict'
class DBConfig(object):
configdict = {'dbtype':'','host':'','user' :'','port': '','password':'','database':'','charset':''}
def __init__(self):
self.__mkConfigDir()
def __mkConfigDir(self):
'''
创建db配置文件
@param filename: 文件路径
@return: True:创建成功 False:创建失败
'''
filename = DBConfig.getDbConfigDir()
print(filename)
if filename is not None:
filebase = FileBase(filename)
if not filebase.isExist():
return filebase.fileCreate()
return False
@staticmethod
def getDbConfigDir():
'''
静态方法,获取配置文件路径
@return: 返回文件路径
'''
configdir = ProjPath.getConfigFile()
if dbConfigName is not None:
return os.path.join(configdir, dbConfigName)
from new_frame.api.filegener.fileoperator.filebase import FileBase
class DBConfigRead(DBConfig):
configfilepath = ''
def __new__(cls, *args, **kwargs):
if len(args) == 0:
filepath = DBConfigRead.getDbConfigDir()
if not FileBase(filepath).isExist():
DBConfigRead.configfilepath = filepath
return object.__new__(cls)
else:
logger.error('Config File not exits ' + filepath)
return
elif len(args) == 1:
print FileBase(args[0]).isExist()
if FileBase(args[0]).isExist():
DBConfigRead.configfilepath = args[0]
return object.__new__(cls)
else:
logger.error('Config File not exits ' + args[0])
return
else:
return
def __init__(self, path):
super(DBConfigRead, self).__init__()
def readInI(self):
inicfg = IniConfig(DBConfigRead.configfilepath)
return inicfg.getAll()
'''
[mysql]
dbtype = MySql
host = 127.0.0.1
port = 3306
user = root
password = 123456
database = test
charset = utf8
'''
# {'mysql': {'database': 'selling_expenses_dev', 'dbtype': 'mysql', 'charset': 'utf8', 'host': '127.0.0.1', 'user': 'root', 'password': '123456', 'port': '3306'}}
# *args **kwargs
class DBConfigSet(DBConfig):
def __init__(self):
DBConfig.configdict['dbtype'] = 'mysql'
DBConfig.configdict['host'] = "127.0.0.1"
DBConfig.configdict['port'] = 3306
DBConfig.configdict['user'] = "root"
DBConfig.configdict['password'] = "123456"
DBConfig.configdict['database'] = "test"
DBConfig.configdict['charset'] = "utf8"
super(DBConfigSet, self).__init__()
def setInI(self):
mapcommon = MapCommon(type(DBTYPES).__name__, DEFAULTTARGETTYPE, DBTYPES)
if mapcommon is None:
return
if DBConfig.configdict['dbtype'] == mapcommon.getKeyName(mapcommon.getKeyName(DBConfig.configdict['dbtype'])):
inicfg = IniConfig(DBConfig.getDbConfigDir())
root = mapcommon.getKeyName(mapcommon.getKeyName(DBConfig.configdict['dbtype']))
inicfg.add(root)
for key, value in DBConfig.configdict.items():
inicfg.add(root, key, value)
if __name__ == '__main__':
# print (type(DBTYPES).__name__ == 'dict')
# print (isinstance(DBTYPES, dict))
# # 传入的是类型
# AA = MapCommon(type(DBTYPES).__name__, targettype, DBTYPES )
# print(AA)
# print(AA.getKeyName("mongodb"))
# BB = 10
# AA.addKeylName(BB, "CC")
# AA.addKeylName("CC", BB)
# DBTYPES = AA.getDict()
# print(DBTYPES)
# # print (AA.checkKey(key='VV'))
# dbconfig = DBConfig()
# print (dbconfig)
# dbset = DBConfigSet()
# print(dbset.setInI())
path = "D:\\pyt\\new_frame\\config\\DBConfig.ini"
dbread = DBConfigRead(path)
print (dbread.readInI())