addons-server/apps/api/utils.py

70 строки
2.2 KiB
Python

from django.conf import settings
from django.utils.html import strip_tags
import amo
from amo.urlresolvers import reverse
from amo.utils import urlparams, epoch
def addon_to_dict(addon, disco=False, src='api'):
"""
Renders an addon in JSON for the API.
"""
v = addon.current_version
url = lambda u, **kwargs: settings.SITE_URL + urlparams(u, **kwargs)
if disco:
learnmore = settings.SERVICES_URL + reverse('discovery.addons.detail',
args=[addon.slug])
learnmore = urlparams(learnmore, src='discovery-personalrec')
else:
learnmore = url(addon.get_url_path(), src=src)
d = {
'id': addon.id,
'name': addon.name,
'guid': addon.guid,
'status': addon.status,
'type': amo.ADDON_SLUGS_UPDATE[addon.type],
'author': (addon.listed_authors[0].name if
addon.listed_authors else ''),
'summary': strip_tags(addon.summary),
'description': strip_tags(addon.description),
'icon': addon.icon_url,
'learnmore': learnmore,
'reviews': url(addon.reviews_url),
'total_dls': addon.total_downloads,
'weekly_dls': addon.weekly_downloads,
'adu': addon.average_daily_users,
'created': epoch(addon.created),
'last_updated': epoch(addon.last_updated),
'homepage': addon.homepage,
'support': addon.support_url,
}
if v:
d['version'] = v.version
d['platforms'] = [a.name for a in v.supported_platforms]
d['compatible_apps'] = v.compatible_apps.values()
if addon.eula:
d['eula'] = addon.eula
if addon.developer_comments:
d['dev_comments'] = addon.developer_comments
if addon.wants_contributions:
contribution = {
'link': url(addon.contribution_url, src=src),
'meet_developers': url(addon.meet_the_dev_url(), src=src),
'suggested_amount': addon.suggested_amount,
}
d['contribution'] = contribution
if addon.type == amo.ADDON_PERSONA:
d['previews'] = [addon.persona.preview_url]
else:
d['previews'] = [p.as_dict(src=src) for p in addon.all_previews]
return d