Mercurial > personas_backend
changeset 44:9e11c9374822
The JSON feeds now properly provide absolute URLs to personas, regardless of whether the persona images are self-hosted or not.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Tue, 04 Mar 2008 11:15:10 -0600 |
parents | 564818c67b57 |
children | cf6b5f26e902 |
files | PersonasBackend/personas/json_feeds.py PersonasBackend/personas/models.py |
diffstat | 2 files changed, 66 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/PersonasBackend/personas/json_feeds.py Tue Mar 04 10:37:24 2008 -0600 +++ b/PersonasBackend/personas/json_feeds.py Tue Mar 04 11:15:10 2008 -0600 @@ -40,17 +40,13 @@ for persona in models.Persona.objects.all(): # TODO: Make sure the Persona is marked as published. - # TODO: Make model accessors to get the final header/footer - # URL regardless of whether they were uploaded or specified as - # external URLs, and use those here. - personaDicts.append( {"label" : persona.name, "id" : JSON_PERSONA_ID_TEMPLATE % persona.id, "dark" : ( persona.color_scheme == "dark" ), "baseURL" : "", - "headerURL" : persona.header_img_url, - "footerURL" : persona.footer_img_url, + "headerURL" : persona.get_header_url(), + "footerURL" : persona.get_footer_url(), "menu" : JSON_CATEGORY_ID_TEMPLATE % persona.category.id, "preview" : "yes"} )
--- a/PersonasBackend/personas/models.py Tue Mar 04 10:37:24 2008 -0600 +++ b/PersonasBackend/personas/models.py Tue Mar 04 11:15:10 2008 -0600 @@ -53,6 +53,48 @@ from django.db import models from django.contrib.auth.models import User +from django.contrib.sites.models import Site + +def _external_url_or_hosted_media_url( external, media ): + """ + Given an absolute URL representing an externally-hosted resource + OR an absolute or relative URL representing a hosted resource, + returns an absolute URL to the resource. + + >>> _external_url_or_hosted_media_url( + ... 'http://blarg.com/', None + ... ) + 'http://blarg.com/' + + >>> _external_url_or_hosted_media_url( + ... None, '/personas/headers/blah.jpg' + ... ) + u'http://example.com/personas/headers/blah.jpg' + + >>> _external_url_or_hosted_media_url( + ... None, 'http://blah.com/personas/headers/blah.jpg' + ... ) + 'http://blah.com/personas/headers/blah.jpg' + """ + + # TODO: Consider uncommenting the following assertions; they may + # make some tests break, though. + # + #assert external or media, \ + # "one parameter must be non-null" + #assert (not external and media), \ + # "both paramaters cannot be be non-null" + + if external: + return external + else: + if not media.startswith( "/" ): + return media + else: + return "http://%s%s" % ( + Site.objects.get_current().domain, + media + ) class Category(models.Model): """ @@ -207,6 +249,28 @@ "status", ) + def get_header_url(self): + """ + Regardless of how a header image was submitted or where it's + located, return an absolute URL to its location. + """ + + return _external_url_or_hosted_media_url( + self.header_img_url, + self.get_header_img_file_url() + ) + + def get_footer_url(self): + """ + Regardless of how a footer image was submitted or where it's + located, return an absolute URL to its location. + """ + + return _external_url_or_hosted_media_url( + self.footer_img_url, + self.get_footer_img_file_url() + ) + def __make_new_revision(self): """ Detect if any of our versioned properties have changed, and if