什么是Pythonic方式"配置"一个模块?

时间:2016-08-26 18:50:52

标签: python configuration

我有一个Flask应用程序,其中包含用作业务逻辑服务层的模块。其中之一是用户模块。该模块与多个后端数据源交互,例如MongoDB,OpenStack Keystone等。

我很好奇最苛刻的" Pythonic"管理这些模块配置的方法是。例如,在C中,创建一个" context"然后将其传递给各种功能。如果要连接到其他数据库,则只需创建一个新上下文并将其传递给下一个函数。

作为一个例子......

class BaseConfig(object):
    MONGODB_URL = '127.0.0.1'
    MONGODB_PORT = 27017

def mongodb_connect():
    return MongoClient(
        BaseConfig.MONGODB_URL,
        BaseConfig.MONGODB_PORT
    )

class User(object):
    def __init__(self, user_id):
        self.user_id = user_id
        self.mongodb_client = mongodb_connect()

        self.mongo_doc = self.mongo_client.auth.users.find_one({'id': self.user_id})
        self.email = self.mongo_doc['email']
        self.fname = self.mongo_doc['fname']
        self.lname = self.mongo_doc['lname']

        self.mongodb_client.close()

这种设计在灵活性方面没有多大帮助。如果你想得到一个"用户"从'127.0.0.1'托管的数据库以外的数据库中,除了更新BaseConfig类之外别无选择。此外,向User类添加参数似乎不正确,因为......

current_user = User('1234', database_ip='192.168.0.5')

...没有"感觉"对。为什么User类需要知道数据库IP?

我已经意识到像ConfigParser这样的东西,但同样的基本问题在于有一个配置"对象"你引用了。我只是想确保这是解决这个问题的可接受方式,还有其他替代方法。

0 个答案:

没有答案