本文整理汇总了Python中bandwagon.models.Collection类的典型用法代码示例。如果您正苦于以下问题:Python Collection类的具体用法?Python Collection怎么用?Python Collection使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Collection类的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: recommendations
def recommendations(request, version, platform, limit=9):
"""
Figure out recommended add-ons for an anonymous user based on POSTed guids.
POST body looks like {"guids": [...]} with an optional "token" key if
they've been here before.
"""
try:
POST = json.loads(request.raw_post_data)
guids = POST['guids']
except (ValueError, TypeError, KeyError):
# Errors: invalid json, didn't get a dict, didn't find "guids".
return http.HttpResponseBadRequest()
addon_ids = get_addon_ids(guids)
index = Collection.make_index(addon_ids)
ids, recs = Collection.get_recs_from_ids(addon_ids, request.APP, version)
recs = _recommendations(request, version, platform, limit,
index, ids, recs)
# We're only storing a percentage of the collections we see because the db
# can't keep up with 100%.
if not waffle.sample_is_active('disco-pane-store-collections'):
return recs
# Users have a token2 if they've been here before. The token matches
# addon_index in their SyncedCollection.
if 'token2' in POST:
token = POST['token2']
if token == index:
# We've seen them before and their add-ons have not changed.
return recs
elif token != index:
# We've seen them before and their add-ons changed. Remove the
# reference to their old synced collection.
(SyncedCollection.objects.filter(addon_index=index)
.update(count=F('count') - 1))
# Try to create the SyncedCollection. There's a unique constraint on
# addon_index so it will fail if this addon_index already exists. If we
# checked for existence first and then created a collection there would
# be a race condition between multiple users with the same addon_index.
try:
c = SyncedCollection.objects.create(addon_index=index, count=1)
c.set_addons(addon_ids)
except IntegrityError:
try:
(SyncedCollection.objects.filter(addon_index=index)
.update(count=F('count') + 1))
except Exception, e:
log.error(u'Could not count++ "%s" (%s).' % (index, e))
示例2: test_addon_index
def test_addon_index(self):
c = Collection.objects.get(pk=512)
c.author = self.user
eq_(c.addon_index, None)
ids = c.addons.values_list("id", flat=True)
c.save()
eq_(c.addon_index, Collection.make_index(ids))
示例3: _collections
def _collections(request):
"""Handle the request for collections."""
# Sorting by relevance isn't an option. Instead the default is `weekly`.
initial = dict(sort="weekly")
# Update with GET variables.
initial.update(request.GET.items())
# Ignore appver/platform and set default number of collections per page.
initial.update(appver=None, platform=None, pp=DEFAULT_NUM_COLLECTIONS)
form = SecondarySearchForm(initial)
form.is_valid()
qs = Collection.search().filter(listed=True, app=request.APP.id)
filters = ["sort"]
mapping = {
"weekly": "-weekly_subscribers",
"monthly": "-monthly_subscribers",
"all": "-subscribers",
"rating": "-rating",
"created": "-created",
"name": "name_sort",
"updated": "-modified",
}
results = _filter_search(
request,
qs,
form.cleaned_data,
filters,
sorting=mapping,
sorting_default="-weekly_subscribers",
types=amo.COLLECTION_SEARCH_CHOICES,
)
query = form.cleaned_data.get("q", "")
search_opts = {}
search_opts["limit"] = form.cleaned_data.get("pp", DEFAULT_NUM_COLLECTIONS)
page = form.cleaned_data.get("page") or 1
search_opts["offset"] = (page - 1) * search_opts["limit"]
search_opts["sort"] = form.cleaned_data.get("sort")
pager = amo.utils.paginate(request, results, per_page=search_opts["limit"])
c = dict(
pager=pager,
form=form,
query=query,
opts=search_opts,
filter=bandwagon.views.get_filter(request),
search_placeholder="collections",
)
return jingo.render(request, "search/collections.html", c)
示例4: _collections
def _collections(request):
"""Handle the request for collections."""
# Sorting by relevance isn't an option. Instead the default is `weekly`.
initial = dict(sort='weekly')
# Update with GET variables.
initial.update(request.GET.items())
# Ignore appver/platform and set default number of collections per page.
initial.update(appver=None, platform=None, pp=DEFAULT_NUM_COLLECTIONS)
form = SecondarySearchForm(initial)
form.is_valid()
if waffle.switch_is_active('replace-sphinx'):
qs = Collection.search().filter(listed=True, app=request.APP.id)
filters = ['sort']
mapping = {'weekly': '-weekly_subscribers',
'monthly': '-monthly_subscribers',
'all': '-subscribers',
'rating': '-rating',
'created': '-created',
'name': 'name_sort',
'updated': '-modified'}
results = _filter_search(request, qs, form.cleaned_data, filters,
sorting=mapping,
sorting_default='-weekly_subscribers',
types=amo.COLLECTION_SEARCH_CHOICES)
query = form.cleaned_data.get('q', '')
search_opts = {}
search_opts['limit'] = form.cleaned_data.get('pp', DEFAULT_NUM_COLLECTIONS)
page = form.cleaned_data.get('page') or 1
search_opts['offset'] = (page - 1) * search_opts['limit']
search_opts['sort'] = form.cleaned_data.get('sort')
if not waffle.switch_is_active('replace-sphinx'):
# The new hotness calls this `created`. Sphinx still calls it `newest`.
if search_opts['sort'] == 'created':
search_opts['sort'] = 'newest'
try:
results = CollectionsClient().query(query, **search_opts)
except SearchError:
return jingo.render(request, 'search/down.html', {}, status=503)
pager = amo.utils.paginate(request, results, per_page=search_opts['limit'])
c = dict(pager=pager, form=form, query=query, opts=search_opts,
filter=bandwagon.views.get_filter(request),
search_placeholder='collections')
return jingo.render(request, 'search/collections.html', c)
示例5: _collections
def _collections(request):
"""Handle the request for collections."""
# Sorting by relevance isn't an option. Instead the default is `weekly`.
initial = dict(sort='weekly')
# Update with GET variables.
initial.update(request.GET.items())
# Ignore appver/platform and set default number of collections per page.
initial.update(appver=None, platform=None, pp=DEFAULT_NUM_COLLECTIONS)
form = SecondarySearchForm(initial)
form.is_valid()
qs = Collection.search().filter(listed=True, app=request.APP.id)
filters = ['sort']
mapping = {
'weekly': '-weekly_subscribers',
'monthly': '-monthly_subscribers',
'all': '-subscribers',
'rating': '-rating',
'created': '-created',
'name': 'name_sort',
'updated': '-modified'
}
results = _filter_search(
request,
qs,
form.cleaned_data,
filters,
sorting=mapping,
sorting_default='-weekly_subscribers',
types=amo.COLLECTION_SEARCH_CHOICES)
form_data = form.cleaned_data.get('q', '')
search_opts = {}
search_opts['limit'] = form.cleaned_data.get('pp', DEFAULT_NUM_COLLECTIONS)
page = form.cleaned_data.get('page') or 1
search_opts['offset'] = (page - 1) * search_opts['limit']
search_opts['sort'] = form.cleaned_data.get('sort')
pager = amo.utils.paginate(request, results, per_page=search_opts['limit'])
c = dict(
pager=pager,
form=form,
query=form_data,
opts=search_opts,
filter=bandwagon.views.get_filter(request),
search_placeholder='collections')
return render(request, 'search/collections.html', c)
示例6: get_synced_collection
def get_synced_collection(addon_ids, token):
"""
Get a synced collection for these addons. May reuse an existing collection.
The token is associated with the collection.
"""
index = Collection.make_index(addon_ids)
try:
c = (SyncedCollection.objects.no_cache().filter(addon_index=index))[0]
except IndexError:
c = SyncedCollection.objects.create(listed=False)
c.set_addons(addon_ids)
c.token_set.create(token=token)
return c
示例7: es_collections_json
def es_collections_json(request):
app = request.GET.get("app", "")
q = request.GET.get("q", "")
qs = Collection.search()
try:
qs = qs.query(id__startswith=int(q))
except ValueError:
qs = qs.query(name__text=q)
try:
qs = qs.filter(app=int(app))
except ValueError:
pass
data = []
for c in qs[:7]:
data.append({"id": c.id, "name": unicode(c.name), "all_personas": c.all_personas, "url": c.get_url_path()})
return data
示例8: es_collections_json
def es_collections_json(request):
app = request.GET.get('app', '')
q = request.GET.get('q', '')
qs = Collection.search()
try:
qs = qs.query(id__startswith=int(q))
except ValueError:
qs = qs.query(name__text=q)
try:
qs = qs.filter(app=int(app))
except ValueError:
pass
data = []
for c in qs[:7]:
data.append({'id': c.id,
'name': unicode(c.name),
'all_personas': c.all_personas,
'url': c.get_url_path()})
return data
示例9: recommendations
def recommendations(request, limit=5):
"""
Figure out recommended add-ons for an anonymous user based on POSTed guids.
POST body looks like {"guids": [...]} with an optional "token" key if
they've been here before.
"""
if request.method != 'POST':
return http.HttpResponseNotAllowed(['POST'])
try:
POST = json.loads(request.raw_post_data)
guids = POST['guids']
except (ValueError, TypeError, KeyError):
# Errors: invalid json, didn't get a dict, didn't find "guids".
return http.HttpResponseBadRequest()
addon_ids = get_addon_ids(guids)
token = POST['token'] if 'token' in POST else get_random_token()
if 'token' in POST:
q = SyncedCollection.objects.filter(token_set__token=token)
if q:
# We've seen this user before.
synced = q[0]
if synced.addon_index == Collection.make_index(addon_ids):
# Their add-ons didn't change, get out quick.
recs = synced.get_recommendations()
return _recommendations(request, limit, token, recs)
else:
# Remove the link to the current sync, make a new one below.
synced.token_set.get(token=token).delete()
synced = get_synced_collection(addon_ids, token)
recs = synced.get_recommendations()
return _recommendations(request, limit, token, recs)
示例10: get_compat_mode
POST body looks like {"guids": [...]} with an optional "token" key if
they've been here before.
"""
if not compat_mode:
compat_mode = get_compat_mode(version)
try:
POST = json.loads(request.raw_post_data)
guids = POST['guids']
except (ValueError, TypeError, KeyError), e:
# Errors: invalid json, didn't get a dict, didn't find "guids".
log.debug('Recommendations return 405 because: %s' % e)
return http.HttpResponseBadRequest()
addon_ids = get_addon_ids(guids)
index = Collection.make_index(addon_ids)
ids, recs = Collection.get_recs_from_ids(addon_ids, request.APP, version,
compat_mode)
recs = _recommendations(request, version, platform, limit, index, ids,
recs, compat_mode)
# We're only storing a percentage of the collections we see because the db
# can't keep up with 100%.
if not waffle.sample_is_active('disco-pane-store-collections'):
return recs
# Users have a token2 if they've been here before. The token matches
# addon_index in their SyncedCollection.
if 'token2' in POST:
token = POST['token2']
示例11: test_addon_index
def test_addon_index(self):
c = Collection.objects.get(pk=5)
eq_(c.addon_index, None)
ids = c.addons.values_list('id', flat=True)
c.save()
eq_(c.addon_index, Collection.make_index(ids))