/gdata/calendar/__init__.py
http://radioappz.googlecode.com/ · Python · 1044 lines · 775 code · 169 blank · 100 comment · 75 complexity · aebdd96ddb094b4b7061eb56909b042a MD5 · raw file
- #!/usr/bin/python
- #
- # Copyright (C) 2006 Google Inc.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- """Contains extensions to ElementWrapper objects used with Google Calendar."""
- __author__ = 'api.vli (Vivian Li), api.rboyd (Ryan Boyd)'
- try:
- from xml.etree import cElementTree as ElementTree
- except ImportError:
- try:
- import cElementTree as ElementTree
- except ImportError:
- try:
- from xml.etree import ElementTree
- except ImportError:
- from elementtree import ElementTree
- import atom
- import gdata
- # XML namespaces which are often used in Google Calendar entities.
- GCAL_NAMESPACE = 'http://schemas.google.com/gCal/2005'
- GCAL_TEMPLATE = '{http://schemas.google.com/gCal/2005}%s'
- WEB_CONTENT_LINK_REL = '%s/%s' % (GCAL_NAMESPACE, 'webContent')
- GACL_NAMESPACE = gdata.GACL_NAMESPACE
- GACL_TEMPLATE = gdata.GACL_TEMPLATE
- class ValueAttributeContainer(atom.AtomBase):
- """A parent class for all Calendar classes which have a value attribute.
- Children include Color, AccessLevel, Hidden
- """
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _attributes['value'] = 'value'
- def __init__(self, value=None, extension_elements=None,
- extension_attributes=None, text=None):
- self.value = value
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- class Color(ValueAttributeContainer):
- """The Google Calendar color element"""
- _tag = 'color'
- _namespace = GCAL_NAMESPACE
- _children = ValueAttributeContainer._children.copy()
- _attributes = ValueAttributeContainer._attributes.copy()
- class AccessLevel(ValueAttributeContainer):
- """The Google Calendar accesslevel element"""
- _tag = 'accesslevel'
- _namespace = GCAL_NAMESPACE
- _children = ValueAttributeContainer._children.copy()
- _attributes = ValueAttributeContainer._attributes.copy()
- class Hidden(ValueAttributeContainer):
- """The Google Calendar hidden element"""
- _tag = 'hidden'
- _namespace = GCAL_NAMESPACE
- _children = ValueAttributeContainer._children.copy()
- _attributes = ValueAttributeContainer._attributes.copy()
- class Selected(ValueAttributeContainer):
- """The Google Calendar selected element"""
- _tag = 'selected'
- _namespace = GCAL_NAMESPACE
- _children = ValueAttributeContainer._children.copy()
- _attributes = ValueAttributeContainer._attributes.copy()
- class Timezone(ValueAttributeContainer):
- """The Google Calendar timezone element"""
- _tag = 'timezone'
- _namespace = GCAL_NAMESPACE
- _children = ValueAttributeContainer._children.copy()
- _attributes = ValueAttributeContainer._attributes.copy()
- class Where(atom.AtomBase):
- """The Google Calendar Where element"""
- _tag = 'where'
- _namespace = gdata.GDATA_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _attributes['valueString'] = 'value_string'
- def __init__(self, value_string=None, extension_elements=None,
- extension_attributes=None, text=None):
- self.value_string = value_string
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- class CalendarListEntry(gdata.GDataEntry, gdata.LinkFinder):
- """A Google Calendar meta Entry flavor of an Atom Entry """
- _tag = gdata.GDataEntry._tag
- _namespace = gdata.GDataEntry._namespace
- _children = gdata.GDataEntry._children.copy()
- _attributes = gdata.GDataEntry._attributes.copy()
- _children['{%s}color' % GCAL_NAMESPACE] = ('color', Color)
- _children['{%s}accesslevel' % GCAL_NAMESPACE] = ('access_level',
- AccessLevel)
- _children['{%s}hidden' % GCAL_NAMESPACE] = ('hidden', Hidden)
- _children['{%s}selected' % GCAL_NAMESPACE] = ('selected', Selected)
- _children['{%s}timezone' % GCAL_NAMESPACE] = ('timezone', Timezone)
- _children['{%s}where' % gdata.GDATA_NAMESPACE] = ('where', Where)
- def __init__(self, author=None, category=None, content=None,
- atom_id=None, link=None, published=None,
- title=None, updated=None,
- color=None, access_level=None, hidden=None, timezone=None,
- selected=None,
- where=None,
- extension_elements=None, extension_attributes=None, text=None):
- gdata.GDataEntry.__init__(self, author=author, category=category,
- content=content, atom_id=atom_id, link=link,
- published=published, title=title,
- updated=updated, text=None)
- self.color = color
- self.access_level = access_level
- self.hidden = hidden
- self.selected = selected
- self.timezone = timezone
- self.where = where
- class CalendarListFeed(gdata.GDataFeed, gdata.LinkFinder):
- """A Google Calendar meta feed flavor of an Atom Feed"""
- _tag = gdata.GDataFeed._tag
- _namespace = gdata.GDataFeed._namespace
- _children = gdata.GDataFeed._children.copy()
- _attributes = gdata.GDataFeed._attributes.copy()
- _children['{%s}entry' % atom.ATOM_NAMESPACE] = ('entry', [CalendarListEntry])
- class Scope(atom.AtomBase):
- """The Google ACL scope element"""
- _tag = 'scope'
- _namespace = GACL_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _attributes['value'] = 'value'
- _attributes['type'] = 'type'
- def __init__(self, extension_elements=None, value=None, scope_type=None,
- extension_attributes=None, text=None):
- self.value = value
- self.type = scope_type
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- class Role(ValueAttributeContainer):
- """The Google Calendar timezone element"""
- _tag = 'role'
- _namespace = GACL_NAMESPACE
- _children = ValueAttributeContainer._children.copy()
- _attributes = ValueAttributeContainer._attributes.copy()
- class CalendarAclEntry(gdata.GDataEntry, gdata.LinkFinder):
- """A Google Calendar ACL Entry flavor of an Atom Entry """
- _tag = gdata.GDataEntry._tag
- _namespace = gdata.GDataEntry._namespace
- _children = gdata.GDataEntry._children.copy()
- _attributes = gdata.GDataEntry._attributes.copy()
- _children['{%s}scope' % GACL_NAMESPACE] = ('scope', Scope)
- _children['{%s}role' % GACL_NAMESPACE] = ('role', Role)
- def __init__(self, author=None, category=None, content=None,
- atom_id=None, link=None, published=None,
- title=None, updated=None,
- scope=None, role=None,
- extension_elements=None, extension_attributes=None, text=None):
- gdata.GDataEntry.__init__(self, author=author, category=category,
- content=content, atom_id=atom_id, link=link,
- published=published, title=title,
- updated=updated, text=None)
- self.scope = scope
- self.role = role
- class CalendarAclFeed(gdata.GDataFeed, gdata.LinkFinder):
- """A Google Calendar ACL feed flavor of an Atom Feed"""
- _tag = gdata.GDataFeed._tag
- _namespace = gdata.GDataFeed._namespace
- _children = gdata.GDataFeed._children.copy()
- _attributes = gdata.GDataFeed._attributes.copy()
- _children['{%s}entry' % atom.ATOM_NAMESPACE] = ('entry', [CalendarAclEntry])
- class CalendarEventCommentEntry(gdata.GDataEntry, gdata.LinkFinder):
- """A Google Calendar event comments entry flavor of an Atom Entry"""
- _tag = gdata.GDataEntry._tag
- _namespace = gdata.GDataEntry._namespace
- _children = gdata.GDataEntry._children.copy()
- _attributes = gdata.GDataEntry._attributes.copy()
- class CalendarEventCommentFeed(gdata.GDataFeed, gdata.LinkFinder):
- """A Google Calendar event comments feed flavor of an Atom Feed"""
- _tag = gdata.GDataFeed._tag
- _namespace = gdata.GDataFeed._namespace
- _children = gdata.GDataFeed._children.copy()
- _attributes = gdata.GDataFeed._attributes.copy()
- _children['{%s}entry' % atom.ATOM_NAMESPACE] = ('entry',
- [CalendarEventCommentEntry])
- class ExtendedProperty(gdata.ExtendedProperty):
- """A transparent subclass of gdata.ExtendedProperty added to this module
- for backwards compatibility."""
- class Reminder(atom.AtomBase):
- """The Google Calendar reminder element"""
- _tag = 'reminder'
- _namespace = gdata.GDATA_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _attributes['absoluteTime'] = 'absolute_time'
- _attributes['days'] = 'days'
- _attributes['hours'] = 'hours'
- _attributes['minutes'] = 'minutes'
- _attributes['method'] = 'method'
- def __init__(self, absolute_time=None,
- days=None, hours=None, minutes=None, method=None,
- extension_elements=None,
- extension_attributes=None, text=None):
- self.absolute_time = absolute_time
- if days is not None:
- self.days = str(days)
- else:
- self.days = None
- if hours is not None:
- self.hours = str(hours)
- else:
- self.hours = None
- if minutes is not None:
- self.minutes = str(minutes)
- else:
- self.minutes = None
- self.method = method
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- class When(atom.AtomBase):
- """The Google Calendar When element"""
- _tag = 'when'
- _namespace = gdata.GDATA_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _children['{%s}reminder' % gdata.GDATA_NAMESPACE] = ('reminder', [Reminder])
- _attributes['startTime'] = 'start_time'
- _attributes['endTime'] = 'end_time'
- def __init__(self, start_time=None, end_time=None, reminder=None,
- extension_elements=None, extension_attributes=None, text=None):
- self.start_time = start_time
- self.end_time = end_time
- self.reminder = reminder or []
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- class Recurrence(atom.AtomBase):
- """The Google Calendar Recurrence element"""
- _tag = 'recurrence'
- _namespace = gdata.GDATA_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- class UriEnumElement(atom.AtomBase):
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- def __init__(self, tag, enum_map, attrib_name='value',
- extension_elements=None, extension_attributes=None, text=None):
- self.tag=tag
- self.enum_map=enum_map
- self.attrib_name=attrib_name
- self.value=None
- self.text=text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- def findKey(self, value):
- res=[item[0] for item in self.enum_map.items() if item[1] == value]
- if res is None or len(res) == 0:
- return None
- return res[0]
- def _ConvertElementAttributeToMember(self, attribute, value):
- # Special logic to use the enum_map to set the value of the object's value member.
- if attribute == self.attrib_name and value != '':
- self.value = self.enum_map[value]
- return
- # Find the attribute in this class's list of attributes.
- if self.__class__._attributes.has_key(attribute):
- # Find the member of this class which corresponds to the XML attribute
- # (lookup in current_class._attributes) and set this member to the
- # desired value (using self.__dict__).
- setattr(self, self.__class__._attributes[attribute], value)
- else:
- # The current class doesn't map this attribute, so try to parent class.
- atom.ExtensionContainer._ConvertElementAttributeToMember(self,
- attribute,
- value)
- def _AddMembersToElementTree(self, tree):
- # Convert the members of this class which are XML child nodes.
- # This uses the class's _children dictionary to find the members which
- # should become XML child nodes.
- member_node_names = [values[0] for tag, values in
- self.__class__._children.iteritems()]
- for member_name in member_node_names:
- member = getattr(self, member_name)
- if member is None:
- pass
- elif isinstance(member, list):
- for instance in member:
- instance._BecomeChildElement(tree)
- else:
- member._BecomeChildElement(tree)
- # Special logic to set the desired XML attribute.
- key = self.findKey(self.value)
- if key is not None:
- tree.attrib[self.attrib_name]=key
- # Convert the members of this class which are XML attributes.
- for xml_attribute, member_name in self.__class__._attributes.iteritems():
- member = getattr(self, member_name)
- if member is not None:
- tree.attrib[xml_attribute] = member
- # Lastly, call the parent's _AddMembersToElementTree to get any
- # extension elements.
- atom.ExtensionContainer._AddMembersToElementTree(self, tree)
- class AttendeeStatus(UriEnumElement):
- """The Google Calendar attendeeStatus element"""
- _tag = 'attendeeStatus'
- _namespace = gdata.GDATA_NAMESPACE
- _children = UriEnumElement._children.copy()
- _attributes = UriEnumElement._attributes.copy()
- attendee_enum = {
- 'http://schemas.google.com/g/2005#event.accepted' : 'ACCEPTED',
- 'http://schemas.google.com/g/2005#event.declined' : 'DECLINED',
- 'http://schemas.google.com/g/2005#event.invited' : 'INVITED',
- 'http://schemas.google.com/g/2005#event.tentative' : 'TENTATIVE'}
- def __init__(self, extension_elements=None,
- extension_attributes=None, text=None):
- UriEnumElement.__init__(self, 'attendeeStatus', AttendeeStatus.attendee_enum,
- extension_elements=extension_elements,
- extension_attributes=extension_attributes,
- text=text)
- class AttendeeType(UriEnumElement):
- """The Google Calendar attendeeType element"""
- _tag = 'attendeeType'
- _namespace = gdata.GDATA_NAMESPACE
- _children = UriEnumElement._children.copy()
- _attributes = UriEnumElement._attributes.copy()
- attendee_type_enum = {
- 'http://schemas.google.com/g/2005#event.optional' : 'OPTIONAL',
- 'http://schemas.google.com/g/2005#event.required' : 'REQUIRED' }
- def __init__(self, extension_elements=None,
- extension_attributes=None, text=None):
- UriEnumElement.__init__(self, 'attendeeType',
- AttendeeType.attendee_type_enum,
- extension_elements=extension_elements,
- extension_attributes=extension_attributes,text=text)
- class Visibility(UriEnumElement):
- """The Google Calendar Visibility element"""
- _tag = 'visibility'
- _namespace = gdata.GDATA_NAMESPACE
- _children = UriEnumElement._children.copy()
- _attributes = UriEnumElement._attributes.copy()
- visibility_enum = {
- 'http://schemas.google.com/g/2005#event.confidential' : 'CONFIDENTIAL',
- 'http://schemas.google.com/g/2005#event.default' : 'DEFAULT',
- 'http://schemas.google.com/g/2005#event.private' : 'PRIVATE',
- 'http://schemas.google.com/g/2005#event.public' : 'PUBLIC' }
- def __init__(self, extension_elements=None,
- extension_attributes=None, text=None):
- UriEnumElement.__init__(self, 'visibility', Visibility.visibility_enum,
- extension_elements=extension_elements,
- extension_attributes=extension_attributes,
- text=text)
- class Transparency(UriEnumElement):
- """The Google Calendar Transparency element"""
- _tag = 'transparency'
- _namespace = gdata.GDATA_NAMESPACE
- _children = UriEnumElement._children.copy()
- _attributes = UriEnumElement._attributes.copy()
- transparency_enum = {
- 'http://schemas.google.com/g/2005#event.opaque' : 'OPAQUE',
- 'http://schemas.google.com/g/2005#event.transparent' : 'TRANSPARENT' }
- def __init__(self, extension_elements=None,
- extension_attributes=None, text=None):
- UriEnumElement.__init__(self, tag='transparency',
- enum_map=Transparency.transparency_enum,
- extension_elements=extension_elements,
- extension_attributes=extension_attributes,
- text=text)
- class Comments(atom.AtomBase):
- """The Google Calendar comments element"""
- _tag = 'comments'
- _namespace = gdata.GDATA_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _children['{%s}feedLink' % gdata.GDATA_NAMESPACE] = ('feed_link',
- gdata.FeedLink)
- _attributes['rel'] = 'rel'
- def __init__(self, rel=None, feed_link=None, extension_elements=None,
- extension_attributes=None, text=None):
- self.rel = rel
- self.feed_link = feed_link
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- class EventStatus(UriEnumElement):
- """The Google Calendar eventStatus element"""
- _tag = 'eventStatus'
- _namespace = gdata.GDATA_NAMESPACE
- _children = UriEnumElement._children.copy()
- _attributes = UriEnumElement._attributes.copy()
- status_enum = { 'http://schemas.google.com/g/2005#event.canceled' : 'CANCELED',
- 'http://schemas.google.com/g/2005#event.confirmed' : 'CONFIRMED',
- 'http://schemas.google.com/g/2005#event.tentative' : 'TENTATIVE'}
- def __init__(self, extension_elements=None,
- extension_attributes=None, text=None):
- UriEnumElement.__init__(self, tag='eventStatus',
- enum_map=EventStatus.status_enum,
- extension_elements=extension_elements,
- extension_attributes=extension_attributes,
- text=text)
- class Who(UriEnumElement):
- """The Google Calendar Who element"""
- _tag = 'who'
- _namespace = gdata.GDATA_NAMESPACE
- _children = UriEnumElement._children.copy()
- _attributes = UriEnumElement._attributes.copy()
- _children['{%s}attendeeStatus' % gdata.GDATA_NAMESPACE] = (
- 'attendee_status', AttendeeStatus)
- _children['{%s}attendeeType' % gdata.GDATA_NAMESPACE] = ('attendee_type',
- AttendeeType)
- _attributes['valueString'] = 'name'
- _attributes['email'] = 'email'
- relEnum = { 'http://schemas.google.com/g/2005#event.attendee' : 'ATTENDEE',
- 'http://schemas.google.com/g/2005#event.organizer' : 'ORGANIZER',
- 'http://schemas.google.com/g/2005#event.performer' : 'PERFORMER',
- 'http://schemas.google.com/g/2005#event.speaker' : 'SPEAKER',
- 'http://schemas.google.com/g/2005#message.bcc' : 'BCC',
- 'http://schemas.google.com/g/2005#message.cc' : 'CC',
- 'http://schemas.google.com/g/2005#message.from' : 'FROM',
- 'http://schemas.google.com/g/2005#message.reply-to' : 'REPLY_TO',
- 'http://schemas.google.com/g/2005#message.to' : 'TO' }
- def __init__(self, name=None, email=None, attendee_status=None,
- attendee_type=None, rel=None, extension_elements=None,
- extension_attributes=None, text=None):
- UriEnumElement.__init__(self, 'who', Who.relEnum, attrib_name='rel',
- extension_elements=extension_elements,
- extension_attributes=extension_attributes,
- text=text)
- self.name = name
- self.email = email
- self.attendee_status = attendee_status
- self.attendee_type = attendee_type
- self.rel = rel
- class OriginalEvent(atom.AtomBase):
- """The Google Calendar OriginalEvent element"""
- _tag = 'originalEvent'
- _namespace = gdata.GDATA_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- # TODO: The when tag used to map to a EntryLink, make sure it should really be a When.
- _children['{%s}when' % gdata.GDATA_NAMESPACE] = ('when', When)
- _attributes['id'] = 'id'
- _attributes['href'] = 'href'
- def __init__(self, id=None, href=None, when=None,
- extension_elements=None, extension_attributes=None, text=None):
- self.id = id
- self.href = href
- self.when = when
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- def GetCalendarEventEntryClass():
- return CalendarEventEntry
- # This class is not completely defined here, because of a circular reference
- # in which CalendarEventEntryLink and CalendarEventEntry refer to one another.
- class CalendarEventEntryLink(gdata.EntryLink):
- """An entryLink which contains a calendar event entry
- Within an event's recurranceExceptions, an entry link
- points to a calendar event entry. This class exists
- to capture the calendar specific extensions in the entry.
- """
- _tag = 'entryLink'
- _namespace = gdata.GDATA_NAMESPACE
- _children = gdata.EntryLink._children.copy()
- _attributes = gdata.EntryLink._attributes.copy()
- # The CalendarEventEntryLink should like CalendarEventEntry as a child but
- # that class hasn't been defined yet, so we will wait until after defining
- # CalendarEventEntry to list it in _children.
- class RecurrenceException(atom.AtomBase):
- """The Google Calendar RecurrenceException element"""
- _tag = 'recurrenceException'
- _namespace = gdata.GDATA_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _children['{%s}entryLink' % gdata.GDATA_NAMESPACE] = ('entry_link',
- CalendarEventEntryLink)
- _children['{%s}originalEvent' % gdata.GDATA_NAMESPACE] = ('original_event',
- OriginalEvent)
- _attributes['specialized'] = 'specialized'
- def __init__(self, specialized=None, entry_link=None,
- original_event=None, extension_elements=None,
- extension_attributes=None, text=None):
- self.specialized = specialized
- self.entry_link = entry_link
- self.original_event = original_event
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- class SendEventNotifications(atom.AtomBase):
- """The Google Calendar sendEventNotifications element"""
- _tag = 'sendEventNotifications'
- _namespace = GCAL_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _attributes['value'] = 'value'
- def __init__(self, extension_elements=None,
- value=None, extension_attributes=None, text=None):
- self.value = value
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- class QuickAdd(atom.AtomBase):
- """The Google Calendar quickadd element"""
- _tag = 'quickadd'
- _namespace = GCAL_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _attributes['value'] = 'value'
- def __init__(self, extension_elements=None,
- value=None, extension_attributes=None, text=None):
- self.value = value
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- def _TransferToElementTree(self, element_tree):
- if self.value:
- element_tree.attrib['value'] = self.value
- element_tree.tag = GCAL_TEMPLATE % 'quickadd'
- atom.AtomBase._TransferToElementTree(self, element_tree)
- return element_tree
- def _TakeAttributeFromElementTree(self, attribute, element_tree):
- if attribute == 'value':
- self.value = element_tree.attrib[attribute]
- del element_tree.attrib[attribute]
- else:
- atom.AtomBase._TakeAttributeFromElementTree(self, attribute,
- element_tree)
- class SyncEvent(atom.AtomBase):
- _tag = 'syncEvent'
- _namespace = GCAL_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _attributes['value'] = 'value'
- def __init__(self, value='false', extension_elements=None,
- extension_attributes=None, text=None):
- self.value = value
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- class UID(atom.AtomBase):
- _tag = 'uid'
- _namespace = GCAL_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _attributes['value'] = 'value'
- def __init__(self, value=None, extension_elements=None,
- extension_attributes=None, text=None):
- self.value = value
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- class Sequence(atom.AtomBase):
- _tag = 'sequence'
- _namespace = GCAL_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _attributes['value'] = 'value'
- def __init__(self, value=None, extension_elements=None,
- extension_attributes=None, text=None):
- self.value = value
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- class WebContentGadgetPref(atom.AtomBase):
- _tag = 'webContentGadgetPref'
- _namespace = GCAL_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _attributes['name'] = 'name'
- _attributes['value'] = 'value'
- """The Google Calendar Web Content Gadget Preferences element"""
- def __init__(self, name=None, value=None, extension_elements=None,
- extension_attributes=None, text=None):
- self.name = name
- self.value = value
- self.text = text
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- class WebContent(atom.AtomBase):
- _tag = 'webContent'
- _namespace = GCAL_NAMESPACE
- _children = atom.AtomBase._children.copy()
- _attributes = atom.AtomBase._attributes.copy()
- _children['{%s}webContentGadgetPref' % GCAL_NAMESPACE] = ('gadget_pref',
- [WebContentGadgetPref])
- _attributes['url'] = 'url'
- _attributes['width'] = 'width'
- _attributes['height'] = 'height'
- def __init__(self, url=None, width=None, height=None, text=None,
- gadget_pref=None, extension_elements=None, extension_attributes=None):
- self.url = url
- self.width = width
- self.height = height
- self.text = text
- self.gadget_pref = gadget_pref or []
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- class WebContentLink(atom.Link):
- _tag = 'link'
- _namespace = atom.ATOM_NAMESPACE
- _children = atom.Link._children.copy()
- _attributes = atom.Link._attributes.copy()
- _children['{%s}webContent' % GCAL_NAMESPACE] = ('web_content', WebContent)
- def __init__(self, title=None, href=None, link_type=None,
- web_content=None):
- atom.Link.__init__(self, rel=WEB_CONTENT_LINK_REL, title=title, href=href,
- link_type=link_type)
- self.web_content = web_content
- class GuestsCanInviteOthers(atom.AtomBase):
- """Indicates whether event attendees may invite others to the event.
- This element may only be changed by the organizer of the event. If not
- included as part of the event entry, this element will default to true
- during a POST request, and will inherit its previous value during a PUT
- request.
- """
- _tag = 'guestsCanInviteOthers'
- _namespace = GCAL_NAMESPACE
- _attributes = atom.AtomBase._attributes.copy()
- _attributes['value'] = 'value'
- def __init__(self, value='true', *args, **kwargs):
- atom.AtomBase.__init__(self, *args, **kwargs)
- self.value = value
- class GuestsCanSeeGuests(atom.AtomBase):
- """Indicates whether attendees can see other people invited to the event.
- The organizer always sees all attendees. Guests always see themselves. This
- property affects what attendees see in the event's guest list via both the
- Calendar UI and API feeds.
- This element may only be changed by the organizer of the event.
- If not included as part of the event entry, this element will default to
- true during a POST request, and will inherit its previous value during a
- PUT request.
- """
- _tag = 'guestsCanSeeGuests'
- _namespace = GCAL_NAMESPACE
- _attributes = atom.AtomBase._attributes.copy()
- _attributes['value'] = 'value'
- def __init__(self, value='true', *args, **kwargs):
- atom.AtomBase.__init__(self, *args, **kwargs)
- self.value = value
- class GuestsCanModify(atom.AtomBase):
- """Indicates whether event attendees may modify the original event.
- If yes, changes are visible to organizer and other attendees. Otherwise,
- any changes made by attendees will be restricted to that attendee's
- calendar.
- This element may only be changed by the organizer of the event, and may
- be set to 'true' only if both gCal:guestsCanInviteOthers and
- gCal:guestsCanSeeGuests are set to true in the same PUT/POST request.
- Otherwise, request fails with HTTP error code 400 (Bad Request).
- If not included as part of the event entry, this element will default to
- false during a POST request, and will inherit its previous value during a
- PUT request."""
- _tag = 'guestsCanModify'
- _namespace = GCAL_NAMESPACE
- _attributes = atom.AtomBase._attributes.copy()
- _attributes['value'] = 'value'
- def __init__(self, value='false', *args, **kwargs):
- atom.AtomBase.__init__(self, *args, **kwargs)
- self.value = value
- class CalendarEventEntry(gdata.BatchEntry):
- """A Google Calendar flavor of an Atom Entry """
- _tag = gdata.BatchEntry._tag
- _namespace = gdata.BatchEntry._namespace
- _children = gdata.BatchEntry._children.copy()
- _attributes = gdata.BatchEntry._attributes.copy()
- # This class also contains WebContentLinks but converting those members
- # is handled in a special version of _ConvertElementTreeToMember.
- _children['{%s}where' % gdata.GDATA_NAMESPACE] = ('where', [Where])
- _children['{%s}when' % gdata.GDATA_NAMESPACE] = ('when', [When])
- _children['{%s}who' % gdata.GDATA_NAMESPACE] = ('who', [Who])
- _children['{%s}extendedProperty' % gdata.GDATA_NAMESPACE] = (
- 'extended_property', [ExtendedProperty])
- _children['{%s}visibility' % gdata.GDATA_NAMESPACE] = ('visibility',
- Visibility)
- _children['{%s}transparency' % gdata.GDATA_NAMESPACE] = ('transparency',
- Transparency)
- _children['{%s}eventStatus' % gdata.GDATA_NAMESPACE] = ('event_status',
- EventStatus)
- _children['{%s}recurrence' % gdata.GDATA_NAMESPACE] = ('recurrence',
- Recurrence)
- _children['{%s}recurrenceException' % gdata.GDATA_NAMESPACE] = (
- 'recurrence_exception', [RecurrenceException])
- _children['{%s}sendEventNotifications' % GCAL_NAMESPACE] = (
- 'send_event_notifications', SendEventNotifications)
- _children['{%s}quickadd' % GCAL_NAMESPACE] = ('quick_add', QuickAdd)
- _children['{%s}comments' % gdata.GDATA_NAMESPACE] = ('comments', Comments)
- _children['{%s}originalEvent' % gdata.GDATA_NAMESPACE] = ('original_event',
- OriginalEvent)
- _children['{%s}sequence' % GCAL_NAMESPACE] = ('sequence', Sequence)
- _children['{%s}reminder' % gdata.GDATA_NAMESPACE] = ('reminder', [Reminder])
- _children['{%s}syncEvent' % GCAL_NAMESPACE] = ('sync_event', SyncEvent)
- _children['{%s}uid' % GCAL_NAMESPACE] = ('uid', UID)
- _children['{%s}guestsCanInviteOthers' % GCAL_NAMESPACE] = (
- 'guests_can_invite_others', GuestsCanInviteOthers)
- _children['{%s}guestsCanModify' % GCAL_NAMESPACE] = (
- 'guests_can_modify', GuestsCanModify)
- _children['{%s}guestsCanSeeGuests' % GCAL_NAMESPACE] = (
- 'guests_can_see_guests', GuestsCanSeeGuests)
- def __init__(self, author=None, category=None, content=None,
- atom_id=None, link=None, published=None,
- title=None, updated=None,
- transparency=None, comments=None, event_status=None,
- send_event_notifications=None, visibility=None,
- recurrence=None, recurrence_exception=None,
- where=None, when=None, who=None, quick_add=None,
- extended_property=None, original_event=None,
- batch_operation=None, batch_id=None, batch_status=None,
- sequence=None, reminder=None, sync_event=None, uid=None,
- guests_can_invite_others=None, guests_can_modify=None,
- guests_can_see_guests=None,
- extension_elements=None, extension_attributes=None, text=None):
- gdata.BatchEntry.__init__(self, author=author, category=category,
- content=content,
- atom_id=atom_id, link=link, published=published,
- batch_operation=batch_operation, batch_id=batch_id,
- batch_status=batch_status,
- title=title, updated=updated)
- self.transparency = transparency
- self.comments = comments
- self.event_status = event_status
- self.send_event_notifications = send_event_notifications
- self.visibility = visibility
- self.recurrence = recurrence
- self.recurrence_exception = recurrence_exception or []
- self.where = where or []
- self.when = when or []
- self.who = who or []
- self.quick_add = quick_add
- self.extended_property = extended_property or []
- self.original_event = original_event
- self.sequence = sequence
- self.reminder = reminder or []
- self.sync_event = sync_event
- self.uid = uid
- self.text = text
- self.guests_can_invite_others = guests_can_invite_others
- self.guests_can_modify = guests_can_modify
- self.guests_can_see_guests = guests_can_see_guests
- self.extension_elements = extension_elements or []
- self.extension_attributes = extension_attributes or {}
- # We needed to add special logic to _ConvertElementTreeToMember because we
- # want to make links with a rel of WEB_CONTENT_LINK_REL into a
- # WebContentLink
- def _ConvertElementTreeToMember(self, child_tree):
- # Special logic to handle Web Content links
- if (child_tree.tag == '{%s}link' % atom.ATOM_NAMESPACE and
- child_tree.attrib['rel'] == WEB_CONTENT_LINK_REL):
- if self.link is None:
- self.link = []
- self.link.append(atom._CreateClassFromElementTree(WebContentLink,
- child_tree))
- return
- # Find the element's tag in this class's list of child members
- if self.__class__._children.has_key(child_tree.tag):
- member_name = self.__class__._children[child_tree.tag][0]
- member_class = self.__class__._children[child_tree.tag][1]
- # If the class member is supposed to contain a list, make sure the
- # matching member is set to a list, then append the new member
- # instance to the list.
- if isinstance(member_class, list):
- if getattr(self, member_name) is None:
- setattr(self, member_name, [])
- getattr(self, member_name).append(atom._CreateClassFromElementTree(
- member_class[0], child_tree))
- else:
- setattr(self, member_name,
- atom._CreateClassFromElementTree(member_class, child_tree))
- else:
- atom.ExtensionContainer._ConvertElementTreeToMember(self, child_tree)
- def GetWebContentLink(self):
- """Finds the first link with rel set to WEB_CONTENT_REL
- Returns:
- A gdata.calendar.WebContentLink or none if none of the links had rel
- equal to WEB_CONTENT_REL
- """
- for a_link in self.link:
- if a_link.rel == WEB_CONTENT_LINK_REL:
- return a_link
- return None
- def CalendarEventEntryFromString(xml_string):
- return atom.CreateClassFromXMLString(CalendarEventEntry, xml_string)
- def CalendarEventCommentEntryFromString(xml_string):
- return atom.CreateClassFromXMLString(CalendarEventCommentEntry, xml_string)
- CalendarEventEntryLink._children = {'{%s}entry' % atom.ATOM_NAMESPACE:
- ('entry', CalendarEventEntry)}
- def CalendarEventEntryLinkFromString(xml_string):
- return atom.CreateClassFromXMLString(CalendarEventEntryLink, xml_string)
- class CalendarEventFeed(gdata.BatchFeed, gdata.LinkFinder):
- """A Google Calendar event feed flavor of an Atom Feed"""
- _tag = gdata.BatchFeed._tag
- _namespace = gdata.BatchFeed._namespace
- _children = gdata.BatchFeed._children.copy()
- _attributes = gdata.BatchFeed._attributes.copy()
- _children['{%s}entry' % atom.ATOM_NAMESPACE] = ('entry',
- [CalendarEventEntry])
- _children['{%s}timezone' % GCAL_NAMESPACE] = ('timezone', Timezone)
- def __init__(self, author=None, category=None, contributor=None,
- generator=None, icon=None, atom_id=None, link=None, logo=None,
- rights=None, subtitle=None, title=None, updated=None, entry=None,
- total_results=None, start_index=None, items_per_page=None,
- interrupted=None, timezone=None,
- extension_elements=None, extension_attributes=None, text=None):
- gdata.BatchFeed.__init__(self, author=author, category=category,
- contributor=contributor, generator=generator,
- icon=icon, atom_id=atom_id, link=link,
- logo=logo, rights=rights, subtitle=subtitle,
- title=title, updated=updated, entry=entry,
- total_results=total_results,
- start_index=start_index,
- items_per_page=items_per_page,
- interrupted=interrupted,
- extension_elements=extension_elements,
- extension_attributes=extension_attributes,
- text=text)
- self.timezone = timezone
- def CalendarListEntryFromString(xml_string):
- return atom.CreateClassFromXMLString(CalendarListEntry, xml_string)
- def CalendarAclEntryFromString(xml_string):
- return atom.CreateClassFromXMLString(CalendarAclEntry, xml_string)
- def CalendarListFeedFromString(xml_string):
- return atom.CreateClassFromXMLString(CalendarListFeed, xml_string)
- def CalendarAclFeedFromString(xml_string):
- return atom.CreateClassFromXMLString(CalendarAclFeed, xml_string)
- def CalendarEventFeedFromString(xml_string):
- return atom.CreateClassFromXMLString(CalendarEventFeed, xml_string)
- def CalendarEventCommentFeedFromString(xml_string):
- return atom.CreateClassFromXMLString(CalendarEventCommentFeed, xml_string)