def website_summary(request, addon_id): website = get_object_or_404(Website, pk=addon_id) if not hasattr(website, 'keywords_list'): attach_tags([website]) return render(request, 'lookup/website_summary.html', { 'website': website, })
def extract_document(cls, pk=None, obj=None): """Converts this instance into an Elasticsearch document""" if obj is None: obj = cls.get_model().objects.get(pk=pk) # Attach translations for searching and indexing. attach_trans_dict(cls.get_model(), [obj]) # Attach tags (keywords). attach_tags([obj]) attrs = ('created', 'default_locale', 'id', 'icon_hash', 'icon_type', 'is_disabled', 'last_updated', 'mobile_url', 'modified', 'promo_img_hash', 'status', 'tv_url', 'url') doc = dict(zip(attrs, attrgetter(*attrs)(obj))) doc['category'] = obj.categories or [] doc['device'] = obj.devices or [] doc['name_sort'] = unicode(obj.name).lower() doc['preferred_regions'] = obj.preferred_regions or [] doc['tags'] = getattr(obj, 'keywords_list', []) doc['tv_featured'] = obj.keywords.filter( tag_text='featured-tv').exists() doc['url_tokenized'] = cls.strip_url(obj.url) # For now, websites are not reviewed, since we're manually injecting # data, so just use last_updated. doc['reviewed'] = obj.last_updated # Add boost, popularity, trending values. doc.update(cls.extract_popularity_trending_boost(obj)) # Handle localized fields. This adds both the field used for search and # the one with all translations for the API. for field in cls.translated_fields: doc.update( cls.extract_field_translations(obj, field, include_field_for_search=True)) # Handle language-specific analyzers. for field in cls.fields_with_language_analyzers: doc.update(cls.extract_field_analyzed_translations(obj, field)) return doc
def extract_document(cls, pk=None, obj=None): """Converts this instance into an Elasticsearch document""" if obj is None: obj = cls.get_model().objects.get(pk=pk) # Attach translations for searching and indexing. attach_trans_dict(cls.get_model(), [obj]) # Attach tags (keywords). attach_tags([obj]) attrs = ('created', 'default_locale', 'id', 'icon_hash', 'icon_type', 'is_disabled', 'last_updated', 'mobile_url', 'modified', 'promo_img_hash', 'status', 'tv_url', 'url') doc = dict(zip(attrs, attrgetter(*attrs)(obj))) doc['category'] = obj.categories or [] doc['device'] = obj.devices or [] doc['developer_name'] = (unicode(obj.developer_name) if obj.developer_name else None) doc['name_sort'] = unicode(obj.name).lower() doc['preferred_regions'] = obj.preferred_regions or [] doc['tags'] = getattr(obj, 'keywords_list', []) doc['tv_featured'] = obj.keywords.filter( tag_text='featured-tv').exists() doc['url_tokenized'] = cls.strip_url(obj.url) # For now, websites are not reviewed, since we're manually injecting # data, so just use last_updated. doc['reviewed'] = obj.last_updated # Add boost, popularity, trending values. doc.update(cls.extract_popularity_trending_boost(obj)) # Handle localized fields. This adds both the field used for search and # the one with all translations for the API. for field in cls.translated_fields: doc.update(cls.extract_field_translations( obj, field, include_field_for_search=True)) # Handle language-specific analyzers. for field in cls.fields_with_language_analyzers: doc.update(cls.extract_field_analyzed_translations(obj, field)) return doc
def website_summary(request, addon_id): website = get_object_or_404(Website, pk=addon_id) if request.FILES: promo_img_form = PromoImgForm(request.POST, request.FILES) else: promo_img_form = PromoImgForm() if 'promo_img' in request.FILES and promo_img_form.is_valid(): promo_img_form.save(website) messages.success(request, 'Promo image successfully uploaded.') return redirect(reverse('lookup.website_summary', args=[website.pk])) if not hasattr(website, 'keywords_list'): attach_tags([website]) return render(request, 'lookup/website_summary.html', { 'website': website, 'promo_img_form': promo_img_form, })
def test_attach_tags_websites(self): tag1 = Tag.objects.create(tag_text='abc', blocked=False) tag2 = Tag.objects.create(tag_text='xyz', blocked=False) tag3 = Tag.objects.create(tag_text='swearword', blocked=True) website1 = website_factory() website1.keywords.add(tag1) website1.keywords.add(tag2) website1.keywords.add(tag3) website2 = website_factory() website2.keywords.add(tag2) website2.keywords.add(tag3) website3 = website_factory() ok_(not hasattr(website1, 'keywords_list')) attach_tags([website3, website2, website1]) eq_(website1.keywords_list, ['abc', 'xyz']) eq_(website2.keywords_list, ['xyz']) ok_(not hasattr(website3, 'keywords_list'))
def test_attach_tags_apps(self): tag1 = Tag.objects.create(tag_text='abc', blocked=False) tag2 = Tag.objects.create(tag_text='xyz', blocked=False) tag3 = Tag.objects.create(tag_text='swearword', blocked=True) app1 = app_factory() app1.tags.add(tag1) app1.tags.add(tag2) app1.tags.add(tag3) app2 = app_factory() app2.tags.add(tag2) app2.tags.add(tag3) app3 = app_factory() ok_(not hasattr(app1, 'tags_list')) attach_tags([app3, app2, app1]) eq_(app1.tags_list, ['abc', 'xyz']) eq_(app2.tags_list, ['xyz']) ok_(not hasattr(app3, 'tags_list'))
def test_attach_tags_websites(self): tag1 = Tag.objects.create(tag_text="abc", blocked=False) tag2 = Tag.objects.create(tag_text="xyz", blocked=False) tag3 = Tag.objects.create(tag_text="swearword", blocked=True) website1 = website_factory() website1.keywords.add(tag1) website1.keywords.add(tag2) website1.keywords.add(tag3) website2 = website_factory() website2.keywords.add(tag2) website2.keywords.add(tag3) website3 = website_factory() ok_(not hasattr(website1, "keywords_list")) attach_tags([website3, website2, website1]) eq_(website1.keywords_list, ["abc", "xyz"]) eq_(website2.keywords_list, ["xyz"]) ok_(not hasattr(website3, "keywords_list"))
def test_attach_tags_apps(self): tag1 = Tag.objects.create(tag_text="abc", blocked=False) tag2 = Tag.objects.create(tag_text="xyz", blocked=False) tag3 = Tag.objects.create(tag_text="swearword", blocked=True) app1 = app_factory() app1.tags.add(tag1) app1.tags.add(tag2) app1.tags.add(tag3) app2 = app_factory() app2.tags.add(tag2) app2.tags.add(tag3) app3 = app_factory() ok_(not hasattr(app1, "tags_list")) attach_tags([app3, app2, app1]) eq_(app1.tags_list, ["abc", "xyz"]) eq_(app2.tags_list, ["xyz"]) ok_(not hasattr(app3, "tags_list"))
def get_tags(self, app): if not hasattr(app, 'tags_list'): attach_tags([app]) return getattr(app, 'tags_list', [])
def get_keywords(self, obj): if not hasattr(obj, 'keywords_list'): attach_tags([obj]) return getattr(obj, 'keywords_list', [])