--- /dev/null
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding model 'Department'
+ db.create_table('courses_department', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=255)),
+ ('school', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['courses.School'])),
+ ('slug', self.gf('django.db.models.fields.SlugField')(max_length=150, null=True)),
+ ('url', self.gf('django.db.models.fields.URLField')(max_length=511, null=True, blank=True)),
+ ))
+ db.send_create_signal('courses', ['Department'])
+
+ # Deleting field 'Course.academic_year'
+ db.delete_column('courses_course', 'academic_year')
+
+ # Adding field 'Course.department'
+ db.add_column('courses_course', 'department',
+ self.gf('django.db.models.fields.related.ForeignKey')(to=orm['courses.Department'], null=True, blank=True),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting model 'Department'
+ db.delete_table('courses_department')
+
+ # Adding field 'Course.academic_year'
+ db.add_column('courses_course', 'academic_year',
+ self.gf('django.db.models.fields.IntegerField')(default=2014, null=True, blank=True),
+ keep_default=False)
+
+ # Deleting field 'Course.department'
+ db.delete_column('courses_course', 'department_id')
+
+
+ models = {
+ 'courses.course': {
+ 'Meta': {'ordering': "['-file_count', 'school', 'name']", 'unique_together': "(('school', 'name', 'instructor_name'),)", 'object_name': 'Course'},
+ 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['courses.Department']", 'null': 'True', 'blank': 'True'}),
+ 'desc': ('django.db.models.fields.TextField', [], {'max_length': '511', 'null': 'True', 'blank': 'True'}),
+ 'file_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'flags': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'instructor_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+ 'instructor_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'school': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['courses.School']"}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '150', 'null': 'True'}),
+ 'updated_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '511', 'null': 'True', 'blank': 'True'})
+ },
+ 'courses.department': {
+ 'Meta': {'object_name': 'Department'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'school': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['courses.School']"}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '150', 'null': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '511', 'null': 'True', 'blank': 'True'})
+ },
+ 'courses.school': {
+ 'Meta': {'ordering': "['-file_count', '-priority', 'name']", 'object_name': 'School'},
+ 'alias': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'facebook_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'file_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'hashtag': ('django.db.models.fields.CharField', [], {'max_length': '16', 'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+ 'priority': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '150', 'null': 'True'}),
+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '511', 'blank': 'True'}),
+ 'usde_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'})
+ }
+ }
+
+ complete_apps = ['courses']
\ No newline at end of file
self.save()
+class Department(models.Model):
+ """ Department within a School. """
+ name = models.CharField(max_length=255)
+ school = models.ForeignKey(School) # Should this be optional ever?
+ slug = models.SlugField(max_length=150, null=True)
+ url = models.URLField(max_length=511, blank=True, null=True)
+
+ def __unicode__(self):
+ return self.name
+
+ def save(self, *args, **kwargs):
+ """ Save department and generate a slug if one doesn't exist """
+ if not self.slug:
+ self.slug = defaultfilters.slugify(self.name)
+ super(Department, self).save(*args, **kwargs)
+
+
class Course(models.Model):
""" First class object that contains many notes.Note objects """
# Core metadata
name = models.CharField(max_length=255)
slug = models.SlugField(max_length=150, null=True)
- school = models.ForeignKey(School) # Should this be optional ever?
+ # department should remove nullable when school gets yoinked
+ department = models.ForeignKey(Department, blank=True, null=True)
+ # school is an appendix: the kind that gets swollen and should be removed
+ # (vistigial)
+ school = models.ForeignKey(School)
file_count = models.IntegerField(default=0)
desc = models.TextField(max_length=511, blank=True, null=True)
url = models.URLField(max_length=511, blank=True, null=True)
- academic_year = models.IntegerField(blank=True, null=True,
- default=datetime.datetime.now().year)
instructor_name = models.CharField(max_length=255, blank=True, null=True)
instructor_email = models.EmailField(blank=True, null=True)
from apps.notes.gdrive import convert_raw_document
from apps.courses.models import Course
from apps.courses.models import School
+from apps.courses.models import Department
from apps.licenses.models import License
from apps.document_upload.models import RawDocument
from django.core.management.base import BaseCommand
with open(filename, 'r') as jsondata:
# parse JSON into python
parsed = json.load(jsondata)
+
+ # find the department or create one.
+ dept_info = {
+ 'name': parsed['subject'],
+ 'school': dbschool,
+ 'url': parsed['departmentLink'],
+ }
+ dbdept = Department.objects.get_or_create(**dept_info)[0]
+
# process courses
for course in parsed['courses']:
-
# Extract the course info
course_info = {
'name': course['courseTitle'],
'instructor_name': course['professor'],
'school': dbschool,
- # courseLink is "course-number-name-semester-year"
- 'academic_year': \
- int(course['courseLink'].split('-')[-1])
}
# Create or Find the Course object.
dbcourse = Course.objects.get_or_create(**course_info)[0]
+ dbcourse.department = dbdept;
+ dbcourse.save()
print "Course is in the database: {0}".format(dbcourse.name)
+ if 'noteLinks' not in course:
+ print "No Notes in course."
+ continue
+
# process notes for each course
for note in course['noteLinks']:
# Check to see if the Note is already uploaded.