Source code for akvo.rsr.management.commands.create_organisation_codelist

# -*- coding: utf-8 -*-

# Akvo Reporting is covered by the GNU Affero General Public License.
# See more details in the license.txt file located at the root folder of the Akvo RSR module.
# For additional details on the GNU license please see < http://www.gnu.org/licenses/agpl.html >.

"""Create or Update a codelist and optionally link it to organisations.

Usage:

    python manage.py create_organisation_codelist <slug> <json-path>_[<org-ids>]

"""


import json
import sys

from django.core.management.base import BaseCommand

from akvo.rsr.models import OrganisationCodelist, Organisation


[docs]class Command(BaseCommand): help = __doc__
[docs] def add_arguments(self, parser): parser.add_argument('slug', type=str) parser.add_argument('json_path', type=open) parser.add_argument('org_ids', nargs='+', type=int) parser.add_argument('--update', action='store_true', dest='update')
[docs] def handle(self, *args, **options): org_ids = options['org_ids'] organisations = Organisation.objects.filter(id__in=org_ids) update = options['update'] data = json.load(options['json_path']) codelist, created = OrganisationCodelist.objects.get_or_create( slug=options['slug'], defaults={'data': data}) if not created and not update: print('Codelist with the slug already exists. Use --update to update it.') sys.exit(1) if update: codelist.data = data codelist.save(update_fields=['data']) missing_orgs = set(org_ids) - set(org.id for org in organisations) if missing_orgs: print('Could not find organisations with ids: ', list(missing_orgs)) sys.exit(1) organisations.update(codelist=codelist)