Skip to content

Instantly share code, notes, and snippets.

@jantonio471
Last active August 24, 2018 00:09
Show Gist options
  • Save jantonio471/6d6f3b80d11756c603b46f3d5946cbc2 to your computer and use it in GitHub Desktop.
Save jantonio471/6d6f3b80d11756c603b46f3d5946cbc2 to your computer and use it in GitHub Desktop.
120 4879 200
120 4880 206
120 4878 209
120 4880 212
120 4877 213
121 4879 201
121 4880 207
121 4878 210
121 4877 214
122 4879 202
122 4880 208
122 4878 211
122 4877 215
#-*- 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
@miguelzetina
Copy link

developer_service.courses().patch(
id=classroom.google_class_id,
body=dict(courseState='ARCHIVED'),
updateMask='courseState'
)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment