My colleague Nimrod came up with the following script to do this:
#!/usr/bin/env python3
import os
import requests
if __name__ == '__main__':
username = os.environ['DISCOURSE_API_USERNAME']
key = os.environ['DISCOURSE_API_KEY']
s = requests.session()
s.headers.update({'Accept': 'application/json'})
s.params.update({'api_key': key, 'api_username': username})
base = 'https://community.endlessos.com/'
update = {'auto_close_hours': '168', 'auto_close_based_on_last_post': True}
parents = s.get(base + 'categories').json()['category_list']['categories']
for p in parents:
p.update(update)
r = s.put(base + 'categories/' + str(p['id']), params=p)
assert r.ok
categories = s.get(base + 'categories', params={'parent_category_id': p['id']}).json()['category_list']['categories']
for c in categories:
c.update(update)
r = s.put(base + 'categories/' + str(c['id']), params=c)
assert r.ok
It seemed to work fine – now that I look at it, if categories can be nested more than one level deep, it will miss third- and subsequent-level categories. On our instance we only have one level of nesting, and I don’t know whether it’s possible to go further in general.