Created
May 5, 2015 21:12
-
-
Save artschwagerb/9656d9c2952a978a28b2 to your computer and use it in GitHub Desktop.
Genesis Report CSV to Django
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
import os | |
import sys | |
import datetime | |
from datetime import datetime | |
import csv | |
import traceback | |
from django.core.management.base import BaseCommand, CommandError | |
from django.conf import settings | |
from django.db import connection, connections, transaction | |
from django.core.exceptions import ObjectDoesNotExist | |
from htps.models import * | |
def str2bool(v): | |
return v.lower() in ("y", "true", "yes", "ok") | |
def sync_students(self): | |
self.stdout.write('Syncing Genesis Withdrawn to Django') | |
i = 0 | |
datafile = open('/home/genesis/students_withdrawn.csv', 'r') | |
datareader = csv.reader(datafile) | |
#original query | |
#person_list = Person.objects.filter(is_student=True) | |
#Using .only() improves performance similar to a SELECT minimal fields in SQL. | |
person_list = Person.objects.filter(is_student=True).only('id','htps_id','date_withdraw','withdraw_code','active') | |
if person_list: | |
for row in datareader: | |
if i == 0: | |
i = i + 1 | |
continue | |
elif i % 100 == 0: | |
self.stdout.write(str(i) + ' Genesis Students Synced') | |
try: | |
htps_id = row[1] | |
withdraw_date = row[4] | |
withdraw_code = row[5] | |
person_item = person_list.get(htps_id=htps_id) | |
person_item.date_withdraw = datetime.strptime(withdraw_date, '%m/%d/%Y') | |
person_item.withdraw_code = withdraw_code | |
person_item.active = False | |
person_item.save() | |
except: | |
if not "DoesNotExist: Person matching query does not exist." in str(traceback.format_exc()): | |
print str(traceback.format_exc()) | |
finally: | |
i = i + 1 | |
class Command(BaseCommand): | |
args = '(none)' | |
help = 'Sync Genesis Withdrawn Students to Django' | |
def handle(self, *args, **options): | |
self.stdout.write('\033[01;31m') | |
self.stdout.write(' ----------------------------------------------- ') | |
self.stdout.write('| Sync Genesis Withdrawn Students |') | |
self.stdout.write('| Modified: 05/04/15 |') | |
self.stdout.write('| Author: Brian Artschwager |') | |
if settings.DEBUG: | |
self.stdout.write('| Running in DEBUG Mode!! |') | |
self.stdout.write(' ----------------------------------------------- ' + '\033[1;m') | |
self.stdout.write('') | |
sync_students(self) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment