예제 #1
0
  def publish(self):
    regenerate = False
    if not self.path:
      num = 0
      content = None
      while not content:
        path = utils.format_post_path(self, num)
        content = static.add(path, '', config.html_mime_type)
        num += 1
      self.path = path
      self.put()
      # Force regenerate on new publish. Also helps with generation of
      # chronologically previous and next page.
      regenerate = True

    BlogDate.create_for_post(self)

    # force refresh of cache, before dependencies are run
    utils.clear_post_memoizer_cache(self);

    for generator_class, deps in self.get_deps(regenerate=regenerate):
      for dep in deps:
        if generator_class.can_defer:
          deferred.defer(generator_class.generate_resource, None, dep)
        else:
          generator_class.generate_resource(self, dep)
    self.put()
예제 #2
0
  def remove(self):
    if not self.is_saved():
      return
    # It is important that the get_deps() return the post dependency
    # before the list dependencies as the BlogPost entity gets deleted
    # while calling PostContentGenerator.
    for generator_class, deps in self.get_deps(regenerate=True):
      for dep in deps:
        if generator_class.can_defer:
          if dep == self.key().id():
            deferred.defer(generator_class.generate_resource, None, dep, action="delete");
          else:
            deferred.defer(generator_class.generate_resource, None, dep); # Regenerate dependency
        else:
          if dep == self.key().id():
            generator_class.generate_resource(self, dep, action='delete');
          else:
            generator_class.generate_resource(self, dep);

    # no longer needed; clear cache for this post
    if self.path:
      utils.clear_post_memoizer_cache(self);