# service.py

#

Copyright (C) 2010 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. Service details and instances for the Contacts service.

#

Some use cases: Add contacts: contacts add "Bob Smith, bob@smith.com" "Jim Raynor, jimmy@noreaster.com"

List contacts: contacts list title,email

    from __future__ import with_statement

    __author__ = 'tom.h.miller@gmail.com (Tom Miller)'
    import atom
    import logging
    import gdata.contacts.service
    import googlecl.service
    import googlecl.base
    import googlecl.contacts.base
    from googlecl.contacts import SECTION_HEADER

    LOG = logging.getLogger(googlecl.contacts.LOGGER_NAME + '.service')

#

Extends gdata.contacts.service.ContactsService for the command line.

    class ContactsServiceCL(gdata.contacts.service.ContactsService,
                            googlecl.contacts.base.ContactsBaseCL,
                            googlecl.service.BaseServiceCL):

#

This class adds some features focused on using Contacts via an installed app with a command line interface.

#

Constructor.

      def __init__(self, config):

#

        gdata.contacts.service.ContactsService.__init__(self)
        googlecl.service.BaseServiceCL.__init__(self, SECTION_HEADER, config)

#

      def _add_email(self, email, contact_entry):
        contact_entry.email.append(gdata.contacts.Email(address=email))

#

      def _add_name(self, name, contact_entry):
        contact_entry.title = atom.Title(text=name)

#

      def _get_contact_entry(self):
        return gdata.contacts.ContactEntry()

#

Get all contacts that match a name.

      def get_contacts(self, name):

#

        uri = self.GetFeedUri()
        return self.GetEntries(uri, name,
                               converter=gdata.contacts.ContactsFeedFromString)

      GetContacts = get_contacts

#

Add group.

      def add_group(self, name):

#

        new_group = gdata.contacts.GroupEntry(title=atom.Title(text=name))
        return self.CreateGroup(new_group)

      AddGroup = add_group

#

Get all groups that match a name.

      def get_groups(self, name):

#

        uri = self.GetFeedUri(kind='groups')
        return self.GetEntries(uri, name,
                               converter=gdata.contacts.GroupsFeedFromString)

      GetGroups = get_groups

#

Check that the token being used is valid.

      def is_token_valid(self, test_uri=None):

#

        if not test_uri:
          test_uri = self.GetFeedUri()
        return googlecl.base.BaseCL.IsTokenValid(self, test_uri)

      IsTokenValid = is_token_valid

    SERVICE_CLASS = ContactsServiceCL