From c780f09bfb23783a0778b85c26071389aff20e20 Mon Sep 17 00:00:00 2001 From: KeyserSosa Date: Wed, 12 Aug 2009 16:20:29 -0700 Subject: [PATCH] API updates: * make created_utc reference GMT * add subreddit_id to comments * generate useful media embed info * fix to url validator --- r2/r2/lib/jsontemplates.py | 28 +++++++++++++++++++++++----- r2/r2/lib/utils/utils.py | 3 +++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/r2/r2/lib/jsontemplates.py b/r2/r2/lib/jsontemplates.py index 7945e3588..142b850eb 100644 --- a/r2/r2/lib/jsontemplates.py +++ b/r2/r2/lib/jsontemplates.py @@ -163,7 +163,8 @@ class ThingJsonTemplate(JsonTemplate): elif attr == "created": return time.mktime(thing._date.timetuple()) elif attr == "created_utc": - return time.mktime(thing._date.astimezone(pytz.UTC).timetuple()) + return (time.mktime(thing._date.astimezone(pytz.UTC).timetuple()) + - time.timezone) elif attr == "child": return CachedVariable("childlisting") return getattr(thing, attr, None) @@ -204,20 +205,32 @@ class LinkJsonTemplate(ThingJsonTemplate): author = "author", thumbnail = "thumbnail", media = "media_object", + media_embed = "media_embed", selftext = "selftext", num_comments = "num_comments", subreddit = "subreddit", subreddit_id = "subreddit_id") - + def thing_attr(self, thing, attr): - if attr == 'subreddit': + from r2.lib.scraper import scrapers + if attr == "media_embed": + if (thing.media_object and + not isinstance(thing.media_object, basestring)): + scraper = scrapers[thing.media_object['type']] + media_embed = scraper.media_embed(**thing.media_object) + return dict(scrolling = media_embed.scrolling, + width = media_embed.width, + height = media_embed.height, + content = media_embed.content) + return dict() + elif attr == 'subreddit': return thing.subreddit.name elif attr == 'subreddit_id': return thing.subreddit._fullname elif attr == 'selftext': return safemarkdown(thing.selftext) return ThingJsonTemplate.thing_attr(self, thing, attr) - + def rendered_data(self, thing): d = ThingJsonTemplate.rendered_data(self, thing) d['sr'] = thing.subreddit._fullname @@ -234,13 +247,18 @@ class CommentJsonTemplate(ThingJsonTemplate): likes = "likes", author = "author", link_id = "link_id", + sr_id = "sr_id", parent_id = "parent_id", ) def thing_attr(self, thing, attr): - from r2.models import Comment, Link + from r2.models import Comment, Link, Subreddit if attr == 'link_id': return make_fullname(Link, thing.link_id) + elif attr == 'sr_id': + if hasattr(thing, attr): + return make_fullname(Subreddit, thing.sr_id) + return None elif attr == "parent_id": try: return make_fullname(Comment, thing.parent_id) diff --git a/r2/r2/lib/utils/utils.py b/r2/r2/lib/utils/utils.py index a54a587e7..c6c4b322e 100644 --- a/r2/r2/lib/utils/utils.py +++ b/r2/r2/lib/utils/utils.py @@ -329,6 +329,9 @@ def sanitize_url(url, require_scheme = False): u = urlparse(url) if u.scheme and u.scheme in valid_schemes: + # if there is a scheme and no hostname, it is a bad url. + if not u.hostname: + return labels = u.hostname.split('.') for label in labels: try: