python - 将 DRY 应用于数据来自不同变量的字典
问题描述
我有两个函数可以将 dict 传递event_data = {[...]}
给 Google API。唯一的区别是update_calendar_event
数据来自dict
. 因为create_calendar_event
它是一个obj
.
考虑到这是这两种不同的类型,您是否知道如何在这里应用 DRY?
class GoogleCalendarAPI:
def __init__(self) -> None:
# cache_discovery=False to avoid ImportError
self.service = build(
"calendar", "v3", credentials=credentials, cache_discovery=False
)
def _event_link(self, event_slug: str) -> str:
return "https://example.com/events/" + event_slug
def update_calendar_event(
self, calendar_event_id: str, validated_data: Dict[str, Any], event_slug: str
) -> None:
event_data = {
"summary": validated_data.get("name"),
"description": validated_data.get("description")
+ "\n\nEvent link: "
+ self._event_link(event_slug),
"start": {
"dateTime": validated_data.get("start_date").isoformat(),
"timeZone": validated_data.get("timezone"),
},
"end": {
"dateTime": validated_data.get("end_date").isoformat(),
"timeZone": validated_data.get("timezone"),
},
}
self.service.events().patch(
calendarId=CALENDAR_ID, eventId=calendar_event_id, body=event_data
).execute()
def create_calendar_event(self, event_instance) -> str:
event_data = {
"summary": event_instance.name,
"description": event_instance.description
+ "\n\nEvent link: "
+ self._event_link(event_instance.slug),
"start": {
"dateTime": event_instance.start_date.isoformat(),
"timeZone": event_instance.timezone,
},
"end": {
"dateTime": event_instance.end_date.isoformat(),
"timeZone": event_instance.timezone,
},
}
event = (
self.service.events()
.insert(calendarId=CALENDAR_ID, body=event_data)
.execute()
)
return event.get("id")
解决方案
推荐阅读
- python - 在 Python 中将纪元时间转换为本地时间的困惑
- android - 不能使用提供的参数调用以下函数?
- python - model.fit() 中的开销来源
- html - 嵌套元素的 CSS 选择器
- python - 正则表达式在一行中的任意位置准确找到六个引号
- python - 如何在 Python 中将字符串转换为字节(已关闭)
- windows - Windows 调度程序如何加载下一个进程以在 CPU 上运行?
- typo3 - Typo3 选择填充来自 sys_category 的子类别
- puppet - 在模块/lib/facter/* 下的文件中找到的事实将以什么顺序加载到 puppet 客户端上?
- java - 关于使用模拟条带进行 e2e 测试