-
-
Save miguelzetina/a9838fe8ff2303225a21c23ec1baf005 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
120 | 4879 | 200 | |
---|---|---|---|
120 | 4880 | 206 | |
120 | 4878 | 209 | |
120 | 4880 | 212 | |
120 | 4877 | 213 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
121 | 4879 | 201 | |
---|---|---|---|
121 | 4880 | 207 | |
121 | 4878 | 210 | |
121 | 4877 | 214 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
122 | 4879 | 202 | |
---|---|---|---|
122 | 4880 | 208 | |
122 | 4878 | 211 | |
122 | 4877 | 215 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#-*- coding: utf-8 | |
#!/usr/bin/env python | |
import os | |
import csv | |
import pprint | |
import sys | |
from optparse import OptionParser | |
parser = OptionParser(usage='%(prog)s subcommand [options] [args]') | |
parser.add_option('--settings', dest='settings', help="Django settings module.") | |
parser.add_option('--domain', dest='domain', help="Domain.") | |
parser.add_option('--level', dest='level', help="Level.") | |
parser.add_option('--grage', dest='grade', help="Grade.") | |
parser.add_option('--school-cicle', dest='school_cicle', help="School cicle.") | |
parser.add_option('--operador', dest='operador', help="Operator, the account with google permissions") | |
(options, args) = parser.parse_args() | |
#----------------django integration----------------- | |
if not options.settings: | |
parser.error('You must specify a django settings module') | |
os.environ.setdefault('DJANGO_SETTINGS_MODULE', options.settings) | |
import django; django.setup() | |
from django.conf import settings | |
from django.core.management.color import color_style | |
style = color_style() | |
#--------------------------------------------------- | |
from django.db.models import Q | |
from googleapiclient.errors import HttpError | |
from potencia.classrooms.models import ClassRoom | |
from potencia.users.models import GoogleCredentials | |
from potencia.users.models import User | |
from urllib2 import HTTPError | |
def build_queryset(*args, **kwargs): | |
kwargs_lookup = dict() | |
if kwargs.get('domain', None): | |
kwargs_lookup.update( | |
group__school_cycle__grade__level__domain=kwargs['domain'] | |
) | |
if kwargs.get('level', None): | |
kwargs_lookup.update( | |
group__school_cycle__grade__level=kwargs['level'] | |
) | |
if kwargs.get('grade', None): | |
kwargs_lookup.update( | |
group__school_cycle__grade=kwargs['grade'] | |
) | |
if kwargs.get('school_cicle', None): | |
kwargs_lookup.update( | |
group__school_cycle=kwargs['school_cicle'] | |
) | |
return ClassRoom.objects.filter( | |
**kwargs_lookup | |
).distinct() | |
def load_file(path_file, delimiter=','): | |
with open(path_file, 'r') as csv_file: | |
rows = list( | |
csv.DictReader( | |
csv_file, | |
fieldnames=[ | |
'group_id', | |
'teacher_id', | |
'subject_id' | |
] | |
) | |
) | |
return rows | |
if __name__ == '__main__': | |
classrooms = build_queryset(*args, **options.__dict__) | |
classrooms_data = load_file(args[0]) | |
default_credentials = GoogleCredentials.objects.get( | |
user_id=options.operador | |
) | |
default_service = default_credentials.get_google_user_data() | |
developers_services = dict() | |
sys.stdout.write('\n') | |
for classroom_data in classrooms_data: | |
try: | |
classroom = classrooms.get( | |
**classroom_data | |
) | |
sys.stdout.write(style.HTTP_SUCCESS('procesando classroom ')+style.SQL_KEYWORD('%s\n' % (classroom.pk))) | |
# Google Classroom | |
google_classroom = default_service.courses().get( | |
id=classroom.google_class_id | |
).execute() | |
pprint.pprint(google_classroom) | |
# Google Credentials | |
developers_google_credentials = GoogleCredentials.objects.filter( | |
user__role__name='Admin' | |
) | |
classroom_is_deleted = False | |
classroom_exception_messages = '' | |
for developer_credentials in developers_google_credentials: | |
try: | |
if not developers_services.has_key(developer_credentials.user_id): | |
developers_services[developer_credentials.user_id] = developer_credentials.get_google_user_data() | |
developer_service = developers_services[developer_credentials.user_id] | |
# Change Google Classroom courseState | |
developer_service.courses().patch( | |
id=classroom.google_class_id, | |
updateMask='courseState', | |
body=dict( | |
courseState='ARCHIVED' | |
) | |
).excecute() | |
# Delete Google Classroom | |
developer_service.courses().delete( | |
id=classroom.google_class_id | |
).execute() | |
# Delete Potencia Classroom | |
classroom.delete() | |
classroom_is_deleted = True | |
sys.stdout.write(style.HTTP_REDIRECT('--> classroom removido por usuario %d\n' % (developer_credentials.user.email))) | |
break | |
except HttpError, e: | |
classroom_exception_messages += '[%s] HttpError: ' % (developer_credentials.user.email) + style.NOTICE(str(e)) + '\n' | |
continue | |
except Exception, e: | |
classroom_exception_messages += '[%s] Exception: ' % (developer_credentials.user.email) + style.NOTICE(str(e)) + '\n' | |
continue | |
if not classroom_is_deleted: | |
sys.stdout.write(style.HTTP_NOT_FOUND('--> no fue posible eliminar: ')) | |
sys.stdout.write(classroom_exception_messages) | |
except ClassRoom.DoesNotExist, e: | |
sys.stdout.write(style.HTTP_NOT_FOUND('classroom no encontrado ') + style.NOTICE('%r\n' % (classroom_data))) | |
except HttpError, e: | |
sys.stdout.write(style.HTTP_NOT_FOUND('--> ocurrio un error con google: ') + style.NOTICE('%s\n' % (str(e)))) | |
# python remover_classroom.py --domain 11 --level 20 --grage 80 --school-cicle 77 --operador 4868 --settings potencia.settings.production classrooms_group_120.csv # 120 | |
# python remover_classroom.py --domain 11 --level 20 --grage 81 --school-cicle 78 --operador 4868 --settings potencia.settings.production classrooms_group_121.csv # 121 | |
# python remover_classroom.py --domain 11 --level 20 --grage 82 --school-cicle 79 --operador 4868 --settings potencia.settings.production classrooms_group_122.csv # 122 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment