我正在使用一个基于图形的框架,该框架由多种类型的节点和关系组成。每种类型都有一些我希望能够轻松访问的元属性。为了表示这些类型,我认为枚举是最好的选择。
我对 Python 还比较陌生,但我知道 Java 等其他语言的枚举。我想这个问题实际上可以归结为Python 中枚举的使用是否合适。我这样代表我的类型:
class Grammar(Enum):
VERB = 'verb'
NOUN = 'noun'
# END Grammar
class _Word():
def __init__(self, name, meta):
self.name = name
self.meta = meta
# END __init__
# END _Word
class Word(Enum):
TYPE_A = _Word('foo', Grammar.VERB)
TYPE_B = _Word('bar', Grammar.NOUN)
# END Word
Run Code Online (Sandbox Code Playgroud)
因此,我的每个 Word 值都分配了一个 _Word 对象,这是一个复杂类型。这在大多数使用 Enum 的情况下都可以正常工作。然而,我的同事指出,Spyder 在检查存在枚举实例的对象时抛出异常:(ValueError(): is not a valid Word注意冒号后面的空格)。
这让我认为我使用枚举的方式不是最佳实践。我错过了什么吗?
我正在尝试使用Web Worker在Angular 8应用程序中运行耗时的数据分析脚本,但是在捆绑该Worker时遇到了一些麻烦。我正在寻找帮助以找出我所缺少的东西。
我已使用Angular-CLI 8.0.2随附的示意图为我的项目生成了一个新工作线程:
ng g webWorker suggestions --project=my-project
Run Code Online (Sandbox Code Playgroud)
这会产生一个新的suggestions.worker.ts和tsconfig.worker.ts,并更新我的tsconfig.app.json, angular.json和package.json。这些对我来说看起来不错,但是如果需要,我可以提供详细信息。
我已将我移动suggestions.worker.ts到与实例化工作程序的服务相同的文件夹中。实例化工作程序的函数如下所示:
async calculateSuggestions<T>(
data: T[]
): Promise<Suggestions<T>> {
const worker = new Worker('./suggestions.worker', {
type: 'module',
});
const result = new Promise((resolve, reject) => {
worker.onmessage = ({ data }) => {
resolve(data);
};
worker.onerror = ({ error }) => {
reject(error);
};
}) as Promise<Suggestions<T>>;
worker.postMessage({
data: data
});
return result;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我构建项目时,出现以下警告和错误:
WARNING in new …Run Code Online (Sandbox Code Playgroud) 我想在Superset环境中使用keycloak对我的用户进行身份验证.
Superset使用flask-openid,如在flask-security中实现的:
要启用与常规用户身份验证(数据库)不同的用户身份验证,您需要覆盖superset_config.py文件中的AUTH_TYPE参数.您还需要提供对openid-connect领域的引用并启用用户注册.据我了解,它应该看起来像这样:
from flask_appbuilder.security.manager import AUTH_OID
AUTH_TYPE = AUTH_OID
OPENID_PROVIDERS = [
{ 'name':'keycloak', 'url':'http://localhost:8080/auth/realms/superset' }
]
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = 'Gamma'
Run Code Online (Sandbox Code Playgroud)
使用此配置,登录页面将更改为用户可以选择所需OpenID提供程序的提示(在我们的示例中为keycloak).我们还有两个按钮,一个用于登录(对于现有用户),另一个用于注册为新用户.
我希望这些按钮中的任何一个都能带我到我的keycloak登录页面.但是,这不会发生.相反,我被重定向回到登录页面.
在我按下注册按钮的情况下,我收到一条消息"此刻无法注册您,请稍后再试".当我按下登录按钮时,不会显示任何消息.Superset日志显示加载登录页面的请求,但没有对keycloak的请求.我使用Google OpenID提供程序尝试了相同的操作,该工作正常.
由于我没有看到对keycloak的请求,这让我觉得我要么在某处丢失配置设置,要么我使用了错误的设置.你能帮我弄清楚我应该使用哪些设置吗?
python flask-security openid-connect keycloak apache-superset
我正在做一个项目来了解有关使用 Python 的更多信息dataclasses。具体来说,我试图将 API 响应表示为一个dataclass对象。但是,由于 API 响应的结构,我遇到了一个问题。
以下是 API 的响应示例:
{
"@identifier": "example",
"@name": "John Doe",
}
Run Code Online (Sandbox Code Playgroud)
有些字段的名称中包含特殊字符。这意味着我无法直接映射 my 的属性dataclass,因为@属性名称中不允许使用特殊字符 ( SyntaxError)。
有没有办法为我的属性定义别名dataclass,以便我可以将 API 响应直接映射到dataclass对象?或者是否有必要先清理响应?
我希望对在Python 2.7及更高版本中运行的API函数进行输入类型检查.API将epoch作为参数,以毫秒为单位采用时间戳.我需要确保输入是正数.
根据值,Python 2.7将时间戳表示为a integer或a long.所以类型检查看起来像这样:
isinstance(timestamp, (int, long))
Run Code Online (Sandbox Code Playgroud)
但是,该long类型与intPython 3 合并.实际上,long类型不再存在.因此上述行会导致异常.相反,检查将如下所示:
isinstance(timestamp, int)
Run Code Online (Sandbox Code Playgroud)
为了与Python 2.7兼容,我尝试将时间戳转换为int.但是,long如果值超出integer范围,则转换操作仍会返回a .这意味着检查将在之后的任何时间戳失败Sun Jan 25 1970 20:31:23.另见这个问题的答案.
在两个版本的Python中使用这个通用检查的最佳方法是什么?
python ×4
angular ×1
angular-cli ×1
enums ×1
keycloak ×1
python-2.7 ×1
python-3.x ×1
spyder ×1
typescript ×1
web-worker ×1