def write(self, outfile, encoding): request = self.feed['request'] # Check for a callback param, validate it before use callback = request.GET.get('callback', None) if callback is not None: if not valid_jsonp_callback_value(callback): callback = None user_to_avatar_map = {} def get_avatar_url_cached(user): if user.id not in user_to_avatar_map: user_to_avatar_map[user.id] = get_avatar_url(user) return user_to_avatar_map[user.id] items_out = [] for item in self.items: document = item['obj'] # Include some of the simple elements from the preprocessed item item_out = dict((x, item[x]) for x in ( 'link', 'title', 'pubdate', 'author_name', 'author_link', )) # HACK: DocumentFeed is the superclass of RevisionFeed. In this # case, current_revision is the revision itself. # TODO: Refactor this out into separate DocumentFeed and # RevisionFeed subclasses of Feed. if hasattr(document, 'current_revision'): revision = document.current_revision else: revision = document if revision.creator: item_out['author_avatar'] = get_avatar_url_cached( revision.creator) summary = getattr(revision, 'summary', None) if summary: item_out['summary'] = summary # Linkify the tags used in the feed item categories = dict( (x, request.build_absolute_uri( reverse('wiki.tag', kwargs={'tag': x}))) for x in item['categories'] ) if categories: item_out['categories'] = categories items_out.append(item_out) data = items_out if callback: outfile.write('%s(' % callback) outfile.write(json.dumps(data, default=self._encode_complex)) if callback: outfile.write(')')
def write(self, outfile, encoding): request = self.feed['request'] # Check for a callback param, validate it before use callback = request.GET.get('callback', None) if callback is not None: if not valid_jsonp_callback_value(callback): callback = None items_out = [] for item in self.items: # Include some of the simple elements from the preprocessed feed item item_out = dict((x, item[x]) for x in ( 'link', 'title', 'pubdate', 'author_name', 'author_link', )) if item['obj'].creator.email: item_out['author_avatar'] = gravatar_url( item['obj'].creator.email) # Linkify the tags used in the feed item item_out['categories'] = dict( (x, request.build_absolute_uri( reverse('demos_tag', kwargs={'tag': x}))) for x in item['categories']) # Include a few more, raw from the submission object itself. item_out.update((x, unicode(getattr(item['obj'], x))) for x in ( 'summary', 'description', )) item_out['featured'] = item['obj'].featured # Include screenshot as an absolute URL. item_out['screenshot'] = request.build_absolute_uri( item['obj'].screenshot_url(1)) # HACK: This .replace() should probably be done in the model item_out['thumbnail'] = request.build_absolute_uri( item['obj'].thumbnail_url(1)) # TODO: What else might be useful in a JSON feed of demo submissions? # Comment, like, view counts may change too much for caching to be useful items_out.append(item_out) data = items_out if callback: outfile.write('%s(' % callback) outfile.write(json.dumps(data, default=self._encode_complex)) if callback: outfile.write(')')
def write(self, outfile, encoding): request = self.feed['request'] # Check for a callback param, validate it before use callback = request.GET.get('callback', None) if callback is not None: if not valid_jsonp_callback_value(callback): callback = None items_out = [] for item in self.items: document = item['obj'] # Include some of the simple elements from the preprocessed item item_out = dict((x, item[x]) for x in ( 'link', 'title', 'pubdate', 'author_name', 'author_link', )) # HACK: DocumentFeed is the superclass of RevisionFeed. In this # case, current_revision is the revision itself. # TODO: Refactor this out into separate DocumentFeed and # RevisionFeed subclasses of Feed. if hasattr(document, 'current_revision'): revision = document.current_revision else: revision = document item_out['author_avatar'] = gravatar_url(revision.creator) summary = revision.summary if summary: item_out['summary'] = summary # Linkify the tags used in the feed item categories = dict( (x, request.build_absolute_uri( reverse('kuma.wiki.views.list_documents', kwargs={'tag': x}))) for x in item['categories'] ) if categories: item_out['categories'] = categories # TODO: What else might be useful in a JSON feed of documents? items_out.append(item_out) data = items_out if callback: outfile.write('%s(' % callback) outfile.write(json.dumps(data, default=self._encode_complex)) if callback: outfile.write(')')
def write(self, outfile, encoding): request = self.feed['request'] # Check for a callback param, validate it before use callback = request.GET.get('callback', None) if callback is not None: if not valid_jsonp_callback_value(callback): callback = None items_out = [] for item in self.items: # Include some of the simple elements from the preprocessed feed item item_out = dict((x, item[x]) for x in ( 'link', 'title', 'pubdate', 'author_name', 'author_link', )) if item['obj'].creator.email: item_out['author_avatar'] = gravatar_url(item['obj'].creator.email) # Linkify the tags used in the feed item item_out['categories'] = dict( (x, request.build_absolute_uri(reverse('demos_tag', kwargs={'tag': x}))) for x in item['categories'] ) # Include a few more, raw from the submission object itself. item_out.update((x, unicode(getattr(item['obj'], x))) for x in ( 'summary', 'description', )) item_out['featured'] = item['obj'].featured # Include screenshot as an absolute URL. item_out['screenshot'] = request.build_absolute_uri( item['obj'].screenshot_url(1)) # HACK: This .replace() should probably be done in the model item_out['thumbnail'] = request.build_absolute_uri( item['obj'].thumbnail_url(1)) # TODO: What else might be useful in a JSON feed of demo submissions? # Comment, like, view counts may change too much for caching to be useful items_out.append(item_out) data = items_out if callback: outfile.write('%s(' % callback) outfile.write(json.dumps(data, default=self._encode_complex)) if callback: outfile.write(')')
def write(self, outfile, encoding): request = self.feed["request"] # Check for a callback param, validate it before use callback = request.GET.get("callback", None) if callback is not None: if not valid_jsonp_callback_value(callback): callback = None items_out = [] for item in self.items: document = item["obj"] # Include some of the simple elements from the preprocessed item item_out = dict((x, item[x]) for x in ("link", "title", "pubdate", "author_name", "author_link")) # HACK: DocumentFeed is the superclass of RevisionFeed. In this # case, current_revision is the revision itself. # TODO: Refactor this out into separate DocumentFeed and # RevisionFeed subclasses of Feed. if hasattr(document, "current_revision"): revision = document.current_revision else: revision = document if revision.creator.email: item_out["author_avatar"] = gravatar_url(revision.creator.email) summary = revision.summary if summary: item_out["summary"] = summary # Linkify the tags used in the feed item categories = dict( (x, request.build_absolute_uri(reverse("kuma.wiki.views.list_documents", kwargs={"tag": x}))) for x in item["categories"] ) if categories: item_out["categories"] = categories items_out.append(item_out) data = items_out if callback: outfile.write("%s(" % callback) outfile.write(json.dumps(data, default=self._encode_complex)) if callback: outfile.write(")")
def write(self, outfile, encoding): request = self.feed["request"] # Check for a callback param, validate it before use callback = request.GET.get("callback", None) if callback is not None: if not valid_jsonp_callback_value(callback): callback = None items_out = [] for item in self.items: # Include some of the simple elements from the preprocessed feed item item_out = dict((x, item[x]) for x in ("link", "title", "pubdate", "author_name", "author_link")) item_out["author_avatar"] = item["obj"].creator.profile.gravatar # Linkify the tags used in the feed item item_out["categories"] = dict( (x, request.build_absolute_uri(reverse("demos_tag", kwargs={"tag": x}))) for x in item["categories"] ) # Include a few more, raw from the submission object itself. item_out.update((x, unicode(getattr(item["obj"], x))) for x in ("summary", "description")) item_out["featured"] = item["obj"].featured # Include screenshot as an absolute URL. item_out["screenshot"] = request.build_absolute_uri(item["obj"].screenshot_url(1)) # HACK: This .replace() should probably be done in the model item_out["thumbnail"] = request.build_absolute_uri(item["obj"].thumbnail_url(1)) # TODO: What else might be useful in a JSON feed of demo submissions? # Comment, like, view counts may change too much for caching to be useful items_out.append(item_out) data = items_out if callback: outfile.write("%s(" % callback) outfile.write(json.dumps(data, default=self._encode_complex)) if callback: outfile.write(")")