#!/usr/bin/python
#
# File:   create_groups.py
#
# Create all staff_* groups for classes in data directory.

import os

from django.core.management.base import BaseCommand
from django.conf import settings
from django.contrib.auth.models import Group
from path import path
from lxml import etree


def create_groups():
    '''
    Create staff and instructor groups for all classes in the data_dir
    '''

    data_dir = settings.DATA_DIR
    print "data_dir = %s" % data_dir

    for course_dir in os.listdir(data_dir):

        if course_dir.startswith('.'):
            continue
        if not os.path.isdir(path(data_dir) / course_dir):
            continue

        cxfn = path(data_dir) / course_dir / 'course.xml'
        try:
            coursexml = etree.parse(cxfn)
        except Exception as err:
            print "Oops, cannot read %s, skipping" % cxfn
            continue
        cxmlroot = coursexml.getroot()
        course = cxmlroot.get('course')		# TODO (vshnayder!!): read metadata from policy file(s) instead of from course.xml
        if course is None:
            print "oops, can't get course id for %s" % course_dir
            continue
        print "course=%s for course_dir=%s" % (course, course_dir)

        create_group('staff_%s' % course)		# staff group
        create_group('instructor_%s' % course)		# instructor group (can manage staff group list)


def create_group(gname):
    if Group.objects.filter(name=gname):
        print "    group exists for %s" % gname
        return
    g = Group(name=gname)
    g.save()
    print "    created group %s" % gname


class Command(BaseCommand):
    help = "Create groups associated with all courses in data_dir."

    def handle(self, *args, **options):
        create_groups()