可以从命名空间对象生成自动完成吗?



>想象一下,我有一个看起来像这样的.env文件。

EARTH_SYNONYM1 = "World"
EARTH_SYNONYM2 = "Planet"
EARTH_SYNONYM3 = "Globe"

我已经设法将其加载到命名空间中。

import json
from pathlib import Path
from types import SimpleNamespace
from dotenv.main import dotenv_values # dotenv package needs to be installed.

def json_to_python(json_str):
return json.loads(json_str, object_hook=lambda d: SimpleNamespace(**d))

dotenv_path = Path(".") / ".env"
dotenv_vars_list = dotenv_values(dotenv_path)
dotenv_vars_as_json = json.dumps(dotenv_vars_list)
dotenv_vars = json_to_python(dotenv_vars_as_json)
print(dotenv_vars)

哪些打印

namespace(EARTH_SYNONYM1='World', EARTH_SYNONYM2='Planet', EARTH_SYNONYM3='Globe')

现在我可以做这样的事情

print(f"Hello {dotenv_vars.EARTH_SYNONYM1}")

哪些打印

Hello World

我想完成的是将其变成一个类模块(我认为(。
我想

import dotenv_vars

然后键入

dotenv_vars.

并显示自动完成选项列表。
继续此示例,每个EARTH_SYNONYMx将显示为自动完成选项。

如何使命名空间对象提供自动完成功能?

我一直认为dotenv是一个非常愚蠢的库,并且过于复杂化了如此简单的东西。使用 Python 的导入系统将 var 加载到模块命名空间中。

import imp
dotenv_vars = imp.load_source('dotenv_vars', '.env')

最新更新