# coding=utf-8
"""
Google Calendar 連携用 Backend
`kawaz.core.google.calendar` に依存し settings.GOOGLE_CALENDAR_BACKEND で指定
されている
"""
from django.conf import settings
from django.contrib.sites.models import Site
from google_calendar.backend import Backend
[ドキュメント]def get_base_url():
cache_name = '_cached_base_url'
if not hasattr(get_base_url, cache_name):
cs = Site.objects.get(pk=settings.SITE_ID)
setattr(get_base_url, cache_name, 'http://{}'.format(cs))
return getattr(get_base_url, cache_name)
[ドキュメント]class KawazGoogleCalendarBackend(Backend):
[ドキュメント] def translate(self, event):
"""
Kawaz3のEventモデルをGoogle Calendar API Version3のBodyパラメーターに変換します
Params:
event [Event] Eventモデルインスタンス
Return:
[dict] パラメーター
"""
# translation lambda functions
to_datetime = lambda x: {'dateTime': self.__class__.strftime(x)}
to_visibility = lambda x: 'public' if x == 'public' else 'private'
to_source = lambda x: {'url': get_base_url() + x()}
to_attendees = lambda x: [dict(email=a.email, displayName=a.nickname)
for a in x.iterator()]
# translate
translation_table = (
('summary', 'title', str),
('description', 'body', str),
('location', 'place', str),
('start', 'period_start', to_datetime),
('end', 'period_end', to_datetime),
('visibility', 'pub_state', to_visibility),
('source', 'get_absolute_url', to_source),
('attendees', 'attendees', to_attendees),
)
return {k: fn(getattr(event, a)) for k, a, fn in translation_table}
[ドキュメント] def is_valid(self, event, raise_exception=False):
"""
Kawaz3のEventモデルインスタンスが、Google Calendar API Version3の
Bodyパラメーターと適合しているかをチェックします
"""
if not event.period_start or not event.period_end:
if raise_exception:
raise AttributeError('`period_start` and `period_end` '
'attributes are required to be filled.')
return False
elif event.pub_state == 'draft':
if raise_exception:
raise AttributeError('`pub_state` attribute is required not '
'to be "draft".')
return False
return True