可以从名称空间对象生成自动完成功能吗?

时间:2018-09-06 04:36:24

标签: python python-3.x visual-studio-code

想象一下,我有一个.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都将显示为自动完成选项。

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

1 个答案:

答案 0 :(得分:1)

我一直认为dotenv是一个非常愚蠢的库,过于简单了。使用Python的导入系统将vars加载到模块名称空间中。

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