是否有更简洁的方式来创建msg
?对于每个事件(Ping,Pull请求,Issue,Issue comment,Repo,Create,Delete,Pull requset review,Push,Commit comment)都有一个if子句,用于检查事件并根据事件的动作创建消息。
data = request.json
event = request.headers['X-Github-Event']
msg = ""
...
# Pull request
elif event == "pull_request":
if data['action'] == "opened":
msg = PullRequest(data).opened()
elif data['action'] == "closed":
msg = PullRequest(data).closed()
elif data['action'] == "assigned":
msg = PullRequest(data).assigned()
# Issue
elif event == "issues":
if data['action'] == "opened":
msg = Issue(data).opened()
elif data['action'] == "reopened":
msg = Issue(data).reopened()
elif data['action'] == "closed":
msg = Issue(data).closed()
elif data['action'] == "labeled":
msg = Issue(data).labeled()
elif data['action'] == "assigned":
msg = Issue(data).assigned()
...
答案 0 :(得分:2)
如何动态地这样做,例如
getattr(PullRequest(data), data['action'], lambda:None)()
总结
elif event == "pull_request":
getattr(PullRequest(data), data['action'], lambda:None)()
elif event == "issues":
getattr(Issue(data), data['action'], lambda:None)()
lambda:None
背后的想法是,如果data['action']
实际上不是PullRequest(data)
或Issue(data)
的方法,则代表默认可调用。
或者如果您不喜欢if-else
语句,例如
callables = {
"pull_request":PullRequest,
"issues":Issue,
}
getattr(callables[event](data), data['action'], lambda:None)()