scripts/get_taxonomy.py (34 lines of code) (raw):
from itertools import chain
import yaml
from kitsune.products.models import Product, Topic
def get_taxonomy(product_slug=None, **kwargs):
"""
Print the taxonomy as YAML for the given product
or for all products if no product slug is given.
"""
def clean(text):
return text.replace("\u2019", "'")
result = dict(products=[])
if product_slug:
products = [Product.active.get(slug=product_slug)]
else:
products = chain(
Product.active.filter(visible=True),
Product.active.filter(slug="mozilla-account"),
)
for product in products:
pdict = dict(title=product.title, description=clean(product.description), topics=[])
result["products"].append(pdict)
for t1 in Topic.active.filter(
products=product, parent=None, visible=True, **kwargs
).order_by("title"):
t1_dict = dict(title=t1.title, description=clean(t1.description), subtopics=[])
pdict["topics"].append(t1_dict)
for t2 in Topic.active.filter(
products=product, parent=t1, visible=True, **kwargs
).order_by("title"):
t2_dict = dict(title=t2.title, description=clean(t2.description), subtopics=[])
t1_dict["subtopics"].append(t2_dict)
for t3 in Topic.active.filter(
products=product, parent=t2, visible=True, **kwargs
).order_by("title"):
t2_dict["subtopics"].append(
dict(title=t3.title, description=clean(t3.description))
)
return print(yaml.dump(result, sort_keys=False))