A queryless slug generator.
Because why not.
Returns:
Source code in ckanext/versioned_datastore/routes/search.py
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 | @blueprint.route('/slugerator')
def slug_generator():
"""
A queryless slug generator.
Because why not.
:returns:
"""
extra_vars = {}
slug_q = Session.query(DatastoreSlug)
total_permutations = len(list_one) * len(list_two) * len(list_three)
extra_vars['total'] = total_permutations
pretty_slugs = slug_q.filter(DatastoreSlug.pretty_slug.isnot(None)).count()
extra_vars['unreserved'] = pretty_slugs
extra_vars['remaining'] = total_permutations - pretty_slugs
extra_vars['percent_used'] = round((pretty_slugs / total_permutations) * 100, 2)
reserved_slugs = slug_q.filter(
DatastoreSlug.reserved_pretty_slug.isnot(None)
).count()
extra_vars['reserved'] = reserved_slugs
date_func = func.date_trunc('day', DatastoreSlug.created)
q = Session.query(date_func.label('date'), func.count().label('count'))
q = q.order_by(date_func).group_by(date_func)
slug_stats = []
total_slugs = 0
for stat in q.all():
total_slugs += stat.count
formatted_date = stat.date.strftime('%Y-%m-%d')
slug_stats.append([formatted_date, total_slugs])
extra_vars['slug_stats'] = slug_stats
# also compress the data and add to toolkit.c
toolkit.c.date_interval = 'day'
toolkit.c.graph_data = base64.b64encode(
zlib.compress(json.dumps(slug_stats).encode(), level=9)
)
attempts = 0
while attempts < 100:
new_slug = slugs.generate_pretty_slug()
if slugs.resolve_slug(new_slug) is None:
extra_vars['new_slug'] = new_slug
attempts += 1
new_slug = None # reset if it didn't work
# default to words not on any list if not already set
extra_vars['new_slug'] = extra_vars.get('new_slug', 'something-something-something')
return toolkit.render('search/slugerator.html', extra_vars=extra_vars)
|