__init__.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.

import googlecl
import googlecl.base

service_name = __name__.split('.')[-1]
LOGGER_NAME = __name__
SECTION_HEADER = service_name.upper()
#

Map an access string to a value Blogger will understand.

def _map_access_string(access_string):
#

In this case, Blogger only cares about "is draft" so 'public' gets mapped to False, everything else to True.

Returns: Boolean indicating True (is a draft) or False (is not a draft).

  if not access_string:
    return False
  if access_string == 'public':
    return False
  return True
#
class BloggerEntryToStringWrapper(googlecl.base.BaseEntryToStringWrapper):
#

Access level (draft or public).

  @property
  def access(self):
#
    if self.entry.control and self.entry.control.draft.text == 'yes':
      return 'draft'
    else:
      return 'public'
#

Author.

  @property
  def author(self):
#

Name of author 'x' name is in entry.author[x].name.text

    text_extractor = lambda entry: getattr(getattr(entry, 'name'), 'text')
    return self._join(self.entry.author, text_extractor=text_extractor)
#
  @property
  def tags(self):
    return self.intra_property_delimiter.join(
                            [c.term for c in self.entry.category if c.term])
  labels = tags
#
######################################################################### <span id="each-of-the-following-run*-functions-execute-a-particular-task.

keyword-arguments: -client:-client-to-the-service-being-used. -options:-contains-all-attributes-required-to-perform-the-task -args:-additional-arguments-passed-in-on-the-command-line,-may-or-may-not-be -------required" href="each-of-the-following-run*-functions-execute-a-particular-task.

keyword-arguments: -client:-client-to-the-service-being-used. -options:-contains-all-attributes-required-to-perform-the-task -args:-additional-arguments-passed-in-on-the-command-line,-may-or-may-not-be -------required"> Each of the following run* functions execute a particular task.

Keyword arguments: client: Client to the service being used. options: Contains all attributes required to perform the task args: Additional arguments passed in on the command line, may or may not be required

def _run_post(client, options, args):
  content_list = options.src + args
  entry_list = client.UploadPosts(content_list,
                                  blog_title=options.blog,
                                  post_title=options.title,
                                  is_draft=_map_access_string(options.access))
  if options.tags:
    client.LabelPosts(entry_list, options.tags)
#
def _run_delete(client, options, args):
  titles_list = googlecl.build_titles_list(options.title, args)
  post_entries = client.GetPosts(blog_title=options.blog,
                                 post_titles=titles_list)
  client.DeleteEntryList(post_entries, 'post', options.prompt)
#
def _run_list(client, options, args):
  titles_list = googlecl.build_titles_list(options.title, args)
  entries = client.GetPosts(options.blog, titles_list,
                            user_id=options.owner or 'default')
  for entry in entries:
    print googlecl.base.compile_entry_string(
                                             BloggerEntryToStringWrapper(entry),
                                             options.fields.split(','),
                                             delimiter=options.delimiter)
#
def _run_tag(client, options, args):
  titles_list = googlecl.build_titles_list(options.title, args)
  entries = client.GetPosts(options.blog, titles_list)
  client.LabelPosts(entries, options.tags)


TASKS = {'delete': googlecl.base.Task('Delete a post.', callback=_run_delete,
                                      required=['blog', 'title']),
         'post': googlecl.base.Task('Post content.', callback=_run_post,
                                    required=['src', 'blog'],
                                    optional=['title', 'tags', 'access']),
         'list': googlecl.base.Task('List posts in a blog',
                                    callback=_run_list,
                                    required=['fields', 'blog', 'delimiter'],
                                    optional=['title', 'owner']),
         'tag': googlecl.base.Task('Label posts', callback=_run_tag,
                                   required=['blog', 'title', 'tags'])}