270 lines
8.8 KiB
Python
270 lines
8.8 KiB
Python
|
#!/usr/bin/python
|
||
|
#
|
||
|
# Copyright 2009 Google Inc. All Rights Reserved.
|
||
|
#
|
||
|
# 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 Atom objects used with Google Documents."""
|
||
|
|
||
|
__author__ = ('api.jfisher (Jeff Fisher), '
|
||
|
'api.eric@google.com (Eric Bidelman)')
|
||
|
|
||
|
import atom
|
||
|
import gdata
|
||
|
|
||
|
|
||
|
DOCUMENTS_NAMESPACE = 'http://schemas.google.com/docs/2007'
|
||
|
|
||
|
|
||
|
class Scope(atom.AtomBase):
|
||
|
"""The DocList ACL scope element"""
|
||
|
|
||
|
_tag = 'scope'
|
||
|
_namespace = gdata.GACL_NAMESPACE
|
||
|
_children = atom.AtomBase._children.copy()
|
||
|
_attributes = atom.AtomBase._attributes.copy()
|
||
|
_attributes['value'] = 'value'
|
||
|
_attributes['type'] = 'type'
|
||
|
|
||
|
def __init__(self, value=None, type=None, extension_elements=None,
|
||
|
extension_attributes=None, text=None):
|
||
|
self.value = value
|
||
|
self.type = type
|
||
|
self.text = text
|
||
|
self.extension_elements = extension_elements or []
|
||
|
self.extension_attributes = extension_attributes or {}
|
||
|
|
||
|
|
||
|
class Role(atom.AtomBase):
|
||
|
"""The DocList ACL role element"""
|
||
|
|
||
|
_tag = 'role'
|
||
|
_namespace = gdata.GACL_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 FeedLink(atom.AtomBase):
|
||
|
"""The DocList gd:feedLink element"""
|
||
|
|
||
|
_tag = 'feedLink'
|
||
|
_namespace = gdata.GDATA_NAMESPACE
|
||
|
_attributes = atom.AtomBase._attributes.copy()
|
||
|
_attributes['rel'] = 'rel'
|
||
|
_attributes['href'] = 'href'
|
||
|
|
||
|
def __init__(self, href=None, rel=None, text=None, extension_elements=None,
|
||
|
extension_attributes=None):
|
||
|
self.href = href
|
||
|
self.rel = rel
|
||
|
atom.AtomBase.__init__(self, extension_elements=extension_elements,
|
||
|
extension_attributes=extension_attributes, text=text)
|
||
|
|
||
|
|
||
|
class ResourceId(atom.AtomBase):
|
||
|
"""The DocList gd:resourceId element"""
|
||
|
|
||
|
_tag = 'resourceId'
|
||
|
_namespace = gdata.GDATA_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 LastModifiedBy(atom.Person):
|
||
|
"""The DocList gd:lastModifiedBy element"""
|
||
|
|
||
|
_tag = 'lastModifiedBy'
|
||
|
_namespace = gdata.GDATA_NAMESPACE
|
||
|
|
||
|
|
||
|
class LastViewed(atom.Person):
|
||
|
"""The DocList gd:lastViewed element"""
|
||
|
|
||
|
_tag = 'lastViewed'
|
||
|
_namespace = gdata.GDATA_NAMESPACE
|
||
|
|
||
|
|
||
|
class WritersCanInvite(atom.AtomBase):
|
||
|
"""The DocList docs:writersCanInvite element"""
|
||
|
|
||
|
_tag = 'writersCanInvite'
|
||
|
_namespace = DOCUMENTS_NAMESPACE
|
||
|
_attributes = atom.AtomBase._attributes.copy()
|
||
|
_attributes['value'] = 'value'
|
||
|
|
||
|
|
||
|
class DocumentListEntry(gdata.GDataEntry):
|
||
|
"""The Google Documents version of an Atom Entry"""
|
||
|
|
||
|
_tag = gdata.GDataEntry._tag
|
||
|
_namespace = atom.ATOM_NAMESPACE
|
||
|
_children = gdata.GDataEntry._children.copy()
|
||
|
_attributes = gdata.GDataEntry._attributes.copy()
|
||
|
_children['{%s}feedLink' % gdata.GDATA_NAMESPACE] = ('feedLink', FeedLink)
|
||
|
_children['{%s}resourceId' % gdata.GDATA_NAMESPACE] = ('resourceId',
|
||
|
ResourceId)
|
||
|
_children['{%s}lastModifiedBy' % gdata.GDATA_NAMESPACE] = ('lastModifiedBy',
|
||
|
LastModifiedBy)
|
||
|
_children['{%s}lastViewed' % gdata.GDATA_NAMESPACE] = ('lastViewed',
|
||
|
LastViewed)
|
||
|
_children['{%s}writersCanInvite' % DOCUMENTS_NAMESPACE] = (
|
||
|
'writersCanInvite', WritersCanInvite)
|
||
|
|
||
|
def __init__(self, resourceId=None, feedLink=None, lastViewed=None,
|
||
|
lastModifiedBy=None, writersCanInvite=None, author=None,
|
||
|
category=None, content=None, atom_id=None, link=None,
|
||
|
published=None, title=None, updated=None, text=None,
|
||
|
extension_elements=None, extension_attributes=None):
|
||
|
self.feedLink = feedLink
|
||
|
self.lastViewed = lastViewed
|
||
|
self.lastModifiedBy = lastModifiedBy
|
||
|
self.resourceId = resourceId
|
||
|
self.writersCanInvite = writersCanInvite
|
||
|
gdata.GDataEntry.__init__(
|
||
|
self, author=author, category=category, content=content,
|
||
|
atom_id=atom_id, link=link, published=published, title=title,
|
||
|
updated=updated, extension_elements=extension_elements,
|
||
|
extension_attributes=extension_attributes, text=text)
|
||
|
|
||
|
def GetAclLink(self):
|
||
|
"""Extracts the DocListEntry's <gd:feedLink>.
|
||
|
|
||
|
Returns:
|
||
|
A FeedLink object.
|
||
|
"""
|
||
|
return self.feedLink
|
||
|
|
||
|
def GetDocumentType(self):
|
||
|
"""Extracts the type of document from the DocListEntry.
|
||
|
|
||
|
This method returns the type of document the DocListEntry
|
||
|
represents. Possible values are document, presentation,
|
||
|
spreadsheet, folder, or pdf.
|
||
|
|
||
|
Returns:
|
||
|
A string representing the type of document.
|
||
|
"""
|
||
|
if self.category:
|
||
|
for category in self.category:
|
||
|
if category.scheme == gdata.GDATA_NAMESPACE + '#kind':
|
||
|
return category.label
|
||
|
else:
|
||
|
return None
|
||
|
|
||
|
|
||
|
def DocumentListEntryFromString(xml_string):
|
||
|
"""Converts an XML string into a DocumentListEntry object.
|
||
|
|
||
|
Args:
|
||
|
xml_string: string The XML describing a Document List feed entry.
|
||
|
|
||
|
Returns:
|
||
|
A DocumentListEntry object corresponding to the given XML.
|
||
|
"""
|
||
|
return atom.CreateClassFromXMLString(DocumentListEntry, xml_string)
|
||
|
|
||
|
|
||
|
class DocumentListAclEntry(gdata.GDataEntry):
|
||
|
"""A DocList 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' % gdata.GACL_NAMESPACE] = ('scope', Scope)
|
||
|
_children['{%s}role' % gdata.GACL_NAMESPACE] = ('role', Role)
|
||
|
|
||
|
def __init__(self, category=None, atom_id=None, link=None,
|
||
|
title=None, updated=None, scope=None, role=None,
|
||
|
extension_elements=None, extension_attributes=None, text=None):
|
||
|
gdata.GDataEntry.__init__(self, author=None, category=category,
|
||
|
content=None, atom_id=atom_id, link=link,
|
||
|
published=None, title=title,
|
||
|
updated=updated, text=None)
|
||
|
self.scope = scope
|
||
|
self.role = role
|
||
|
|
||
|
|
||
|
def DocumentListAclEntryFromString(xml_string):
|
||
|
"""Converts an XML string into a DocumentListAclEntry object.
|
||
|
|
||
|
Args:
|
||
|
xml_string: string The XML describing a Document List ACL feed entry.
|
||
|
|
||
|
Returns:
|
||
|
A DocumentListAclEntry object corresponding to the given XML.
|
||
|
"""
|
||
|
return atom.CreateClassFromXMLString(DocumentListAclEntry, xml_string)
|
||
|
|
||
|
|
||
|
class DocumentListFeed(gdata.GDataFeed):
|
||
|
"""A feed containing a list of Google Documents Items"""
|
||
|
|
||
|
_tag = gdata.GDataFeed._tag
|
||
|
_namespace = atom.ATOM_NAMESPACE
|
||
|
_children = gdata.GDataFeed._children.copy()
|
||
|
_attributes = gdata.GDataFeed._attributes.copy()
|
||
|
_children['{%s}entry' % atom.ATOM_NAMESPACE] = ('entry',
|
||
|
[DocumentListEntry])
|
||
|
|
||
|
|
||
|
def DocumentListFeedFromString(xml_string):
|
||
|
"""Converts an XML string into a DocumentListFeed object.
|
||
|
|
||
|
Args:
|
||
|
xml_string: string The XML describing a DocumentList feed.
|
||
|
|
||
|
Returns:
|
||
|
A DocumentListFeed object corresponding to the given XML.
|
||
|
"""
|
||
|
return atom.CreateClassFromXMLString(DocumentListFeed, xml_string)
|
||
|
|
||
|
|
||
|
class DocumentListAclFeed(gdata.GDataFeed):
|
||
|
"""A DocList ACL feed flavor of a Atom feed"""
|
||
|
|
||
|
_tag = gdata.GDataFeed._tag
|
||
|
_namespace = atom.ATOM_NAMESPACE
|
||
|
_children = gdata.GDataFeed._children.copy()
|
||
|
_attributes = gdata.GDataFeed._attributes.copy()
|
||
|
_children['{%s}entry' % atom.ATOM_NAMESPACE] = ('entry',
|
||
|
[DocumentListAclEntry])
|
||
|
|
||
|
|
||
|
def DocumentListAclFeedFromString(xml_string):
|
||
|
"""Converts an XML string into a DocumentListAclFeed object.
|
||
|
|
||
|
Args:
|
||
|
xml_string: string The XML describing a DocumentList feed.
|
||
|
|
||
|
Returns:
|
||
|
A DocumentListFeed object corresponding to the given XML.
|
||
|
"""
|
||
|
return atom.CreateClassFromXMLString(DocumentListAclFeed, xml_string)
|