class GradingStandard(models.Model): COURSE_CONTEXT = "Course" ACCOUNT_CONTEXT = "Account" CONTEXT_CHOICES = ((COURSE_CONTEXT, COURSE_CONTEXT), (ACCOUNT_CONTEXT, ACCOUNT_CONTEXT)) grading_standard_id = models.IntegerField() title = models.CharField(max_length=500) context_id = models.IntegerField() context_type = models.CharField(max_length=20, choices=CONTEXT_CHOICES) grading_scheme = models.TextField() def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(GradingStandard, self).__init__(*args, **kwargs) self.grading_standard_id = data["id"] self.title = data["title"] self.context_type = data["context_type"] self.context_id = data["context_id"] self.grading_scheme = data["grading_scheme"] def json_data(self): return { "id": self.grading_standard_id, "title": self.title, "context_type": self.context_type, "context_id": self.context_id, "grading_scheme": self.grading_scheme, }
class Spot(models.Model): """ Represents a place for students to study. """ spot_id = models.IntegerField() name = models.CharField(max_length=100, blank=True) uri = models.CharField(max_length=255) thumbnail_root = models.CharField(max_length=255) latitude = models.DecimalField(max_digits=11, decimal_places=8, null=True) longitude = models.DecimalField(max_digits=11, decimal_places=8, null=True) height_from_sea_level = models.DecimalField(max_digits=11, decimal_places=8, null=True, blank=True) building_name = models.CharField(max_length=100, blank=True) floor = models.CharField(max_length=50, blank=True) room_number = models.CharField(max_length=25, blank=True) building_description = models.CharField(max_length=100, blank=True) capacity = models.IntegerField(null=True, blank=True) display_access_restrictions = models.CharField(max_length=200, blank=True) organization = models.CharField(max_length=50, blank=True) manager = models.CharField(max_length=50, blank=True) etag = models.CharField(max_length=40) last_modified = models.DateTimeField() external_id = models.CharField(max_length=100, null=True, blank=True, default=None, unique=True)
class Assignment(models.Model): assignment_type = models.CharField() quarter = models.IntegerField() campus = models.IntegerField() comments = models.TextField() user = models.CharField(max_length=12) applicants = []
class Reservation(models.Model): STANDARD_STATE = "1" EXCEPTION_STATE = "2" WARNING_STATE = "3" OVERRIDE_STATE = "4" CANCELLED_STATE = "99" STATE_CHOICES = ( (STANDARD_STATE, "Standard"), (EXCEPTION_STATE, "Exception"), (WARNING_STATE, "Warning"), (OVERRIDE_STATE, "Override"), (CANCELLED_STATE, "Cancelled"), ) reservation_id = models.IntegerField() state = models.CharField(max_length=2, choices=STATE_CHOICES) start_datetime = models.DateTimeField() end_datetime = models.DateTimeField() event_id = models.IntegerField() event_name = models.CharField(max_length=64) profile_name = models.CharField(max_length=32) contact_name = models.CharField(max_length=64) contact_email = models.CharField(max_length=64) def state_name(self): return dict(self.STATE_CHOICES)[self.state] class Meta: db_table = "restclients_r25_reservation"
class Login(models.Model): login_id = models.IntegerField() account_id = models.IntegerField() sis_user_id = models.CharField(max_length=100, null=True) unique_id = models.CharField(max_length=100, null=True) user_id = models.IntegerField() def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(Login, self).__init__(*args, **kwargs) self.login_id = data["id"] self.account_id = data["account_id"] self.sis_user_id = data.get("sis_user_id") self.unique_id = data["unique_id"] self.user_id = data["user_id"] def put_data(self): return { "login": { "unique_id": self.unique_id, "sis_user_id": self.sis_user_id } }
class BindingReservation(models.Model): bound_reservation_id = models.IntegerField() primary_reservation = models.IntegerField() name = models.CharField(max_length=200) bound_event_id = models.IntegerField() class Meta: db_table = "restclients_r25_binding_reservation"
class Cohort(models.Model): academic_qtr_id = models.IntegerField() cohort_number = models.IntegerField() cohort_description = models.TextField() cohort_residency = models.CharField(max_length=255) admit_decision = models.CharField(max_length=255) protected_group = models.BooleanField() active_cohort = models.BooleanField() assigned_count = models.IntegerField()
class Activity(models.Model): assignment_date = models.DateTimeField() comment = models.TextField() user = models.CharField(max_length=12) assignment_type = models.TextField() cohort_number = models.IntegerField() major_abbr = models.CharField(max_length=32) major_program_code = models.CharField(max_length=32) total_submitted = models.IntegerField() total_assigned = models.IntegerField()
class ItemImage(models.Model): image_id = models.IntegerField() description = models.CharField(max_length=200, blank=True) display_index = models.PositiveIntegerField(null=True, blank=True) width = models.IntegerField() height = models.IntegerField() content_type = models.CharField(max_length=40) creation_date = models.DateTimeField(auto_now_add=True) upload_user = models.CharField(max_length=40) upload_application = models.CharField(max_length=100)
class Event(models.Model): DRAFT_STATE = "0" TENTATIVE_STATE = "1" CONFIRMED_STATE = "2" SEALED_STATE = "3" DENIED_STATE = "4" CANCELLED_STATE = "99" STATE_CHOICES = ( (DRAFT_STATE, "Draft"), (TENTATIVE_STATE, "Tentative"), (CONFIRMED_STATE, "Confirmed"), (SEALED_STATE, "Sealed"), (DENIED_STATE, "Denied"), (CANCELLED_STATE, "Cancelled"), ) event_id = models.IntegerField() alien_uid = models.CharField(max_length=100, null=True) name = models.CharField(max_length=100) title = models.CharField(max_length=100) start_date = models.DateField() end_date = models.DateField() state = models.CharField(max_length=2, choices=STATE_CHOICES) parent_id = models.IntegerField(null=True) cabinet_id = models.IntegerField(null=True) cabinet_name = models.CharField(max_length=100, null=True) def state_name(self): return dict(self.STATE_CHOICES)[self.state] def parent(self): if not hasattr(self, "_parent"): self._parent = None if self.parent_id is not None: from uw_r25.events import get_event_by_id self._parent = get_event_by_id(self.parent_id) return self._parent def children(self): if not hasattr(self, "_children"): from uw_r25.events import get_events self._children = get_events(parent_id=self.event_id) return self._children def cabinet(self): if self.cabinet_id is not None: if self.cabinet_id == self.event_id: return self else: from uw_r25.events import get_event_by_id return get_event_by_id(self.cabinet_id) class Meta: db_table = "restclients_r25_event"
class Submission(models.Model): submission_id = models.IntegerField() body = models.TextField(null=True) attempt = models.IntegerField(max_length=2) submitted_at = models.DateTimeField() assignment_id = models.IntegerField() assignment_visible = models.BooleanField(null=True) workflow_state = models.CharField(max_length=100, null=True) preview_url = models.CharField(max_length=500) late = models.NullBooleanField() grade = models.TextField(max_length=12, null=True) score = models.DecimalField(max_digits=10, decimal_places=2, null=True) grade_matches_current_submission = models.NullBooleanField() url = models.CharField(max_length=500, null=True) grader_id = models.IntegerField() graded_at = models.DateTimeField(null=True) posted_at = models.DateTimeField(null=True) submission_type = models.CharField(max_length=100, null=True) def __init__(self, *args, **kwargs): self.attachments = [] data = kwargs.get("data") if data is None: return super(Submission, self).__init__(*args, **kwargs) self.submission_id = data['id'] self.body = data['body'] self.attempt = data['attempt'] if "submitted_at" in data and data["submitted_at"] is not None: self.submitted_at = dateutil.parser.parse(data["submitted_at"]) self.assignment_id = data["assignment_id"] self.workflow_state = data["workflow_state"] self.preview_url = data["preview_url"] self.late = data["late"] self.grade = data["grade"] self.score = data["score"] self.grade_matches_current_submission = data.get( "grade_matches_current_submission") self.url = data["url"] self.grader_id = data["grader_id"] if "graded_at" in data and data["graded_at"] is not None: self.graded_at = dateutil.parser.parse(data["graded_at"]) if "posted_at" in data and data["posted_at"] is not None: self.posted_at = dateutil.parser.parse(data["posted_at"]) self.submission_type = data["submission_type"] # assignment_visible is not always present self.assignment_visible = data.get("assignment_visible") for attachment_data in data.get("attachments", []): self.attachments.append(Attachment(data=attachment_data))
class Space(models.Model): space_id = models.IntegerField() name = models.CharField(max_length=100) formal_name = models.CharField(max_length=200) class Meta: db_table = "restclients_r25_space"
class CanvasRole(models.Model): role_id = models.IntegerField() label = models.CharField(max_length=200) base_role_type = models.CharField(max_length=200) workflow_state = models.CharField(max_length=50) def __init__(self, *args, **kwargs): self.permissions = {} data = kwargs.get("data") if data is None: return super(CanvasRole, self).__init__(*args, **kwargs) self.role_id = data["id"] self.label = data["label"] self.base_role_type = data["base_role_type"] self.workflow_state = data["workflow_state"] self.permissions = data.get("permissions", {}) if "account" in data: self.account = CanvasAccount(data=data["account"]) def json_data(self): return { "id": self.role_id, "label": self.label, "base_role_type": self.base_role_type, "workflow_state": self.workflow_state, "permissions": self.permissions, }
class Quarter(models.Model): id = models.IntegerField() begin = models.DateTimeField() end = models.DateTimeField() active_ind = models.CharField(max_length=32) appl_yr = models.CharField(max_length=4) appl_qtr = models.CharField(max_length=1) is_current = models.BooleanField()
class SpotImage(models.Model): """ An image of a Spot. Multiple images can be associated with a Spot, and Spot objects have a 'Spot.spotimage_set' method that will return all SpotImage objects for the Spot. """ image_id = models.IntegerField() url = models.CharField(max_length=255) description = models.CharField(max_length=200, blank=True) display_index = models.PositiveIntegerField(null=True, blank=True) content_type = models.CharField(max_length=40) width = models.IntegerField() height = models.IntegerField() creation_date = models.DateTimeField() modification_date = models.DateTimeField() upload_user = models.CharField(max_length=40) upload_application = models.CharField(max_length=100)
class Attachment(models.Model): attachment_id = models.IntegerField() filename = models.CharField(max_length=100) display_name = models.CharField(max_length=200) content_type = models.CharField(max_length=50) size = models.IntegerField() url = models.CharField(max_length=500) def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(Attachment, self).__init__(*args, **kwargs) self.attachment_id = data["id"] self.filename = data["filename"] self.display_name = data["display_name"] self.content_type = data["content-type"] self.size = data["size"] self.url = data["url"]
class CanvasUser(models.Model): user_id = models.IntegerField() name = models.CharField(max_length=100, null=True) short_name = models.CharField(max_length=100, null=True) sortable_name = models.CharField(max_length=100, null=True) sis_user_id = models.CharField(max_length=100, null=True) login_id = models.CharField(max_length=100, null=True) time_zone = models.CharField(max_length=100, null=True) locale = models.CharField(max_length=2, null=True) email = models.CharField(max_length=100, null=True) avatar_url = models.CharField(max_length=500, null=True) def __init__(self, *args, **kwargs): self.enrollments = [] data = kwargs.get("data") if data is None: return super(CanvasUser, self).__init__(*args, **kwargs) self.user_id = data["id"] self.name = data["name"] self.short_name = data.get("short_name") self.sortable_name = data.get("sortable_name") self.login_id = data.get("login_id") self.sis_user_id = data.get("sis_user_id") self.email = data.get("email") self.time_zone = data.get("time_zone") self.locale = data.get("locale") self.avatar_url = data.get("avatar_url") for enr_datum in data.get("enrollments", []): self.enrollments.append(CanvasEnrollment(data=enr_datum)) def post_data(self): return { "user": { "name": self.name, "short_name": self.short_name, "sortable_name": self.sortable_name, "time_zone": self.time_zone, "locale": self.locale }, "pseudonym": { "unique_id": self.login_id, "sis_user_id": self.sis_user_id, "send_confirmation": False }, "communication_channel": { "type": "email", "address": self.email, "skip_confirmation": True } }
class CanvasAdmin(models.Model): admin_id = models.IntegerField() role = models.CharField(max_length=100) user = models.ForeignKey(CanvasUser) def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(CanvasAdmin, self).__init__(*args, **kwargs) self.admin_id = data["id"] self.role = data["role"] self.user = CanvasUser(data=data["user"])
class Report(models.Model): report_id = models.IntegerField() account_id = models.IntegerField() type = models.CharField(max_length=500) url = models.CharField(max_length=500) status = models.CharField(max_length=50) progress = models.SmallIntegerField(max_length=3, default=0) attachment = models.ForeignKey(Attachment, null=True) def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(Report, self).__init__(*args, **kwargs) self.account_id = data["account_id"] self.report_id = data["id"] self.type = data["report"] self.url = data["file_url"] self.status = data["status"] self.progress = data["progress"] self.parameters = data["parameters"] if "attachment" in data: self.attachment = Attachment(data=data["attachment"])
class ModelTest(models.Model): bools = models.BooleanField() chars = models.CharField(max_length=20) dates = models.DateField() datetimes = models.DateTimeField() decimals = models.DecimalField() floats = models.FloatField() ints = models.IntegerField() nullbools = models.NullBooleanField() posints = models.PositiveIntegerField() possmalls = models.PositiveSmallIntegerField() slugs = models.SlugField() smallints = models.SmallIntegerField() texts = models.TextField() texts2 = models.TextField() times = models.TimeField() urls = models.URLField()
class CanvasAccount(models.Model): account_id = models.IntegerField() sis_account_id = models.CharField(max_length=100, null=True) name = models.CharField(max_length=500) parent_account_id = models.CharField(max_length=30) root_account_id = models.CharField(max_length=30) def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(CanvasAccount, self).__init__(*args, **kwargs) self.account_id = data["id"] self.sis_account_id = data.get("sis_account_id") self.name = data["name"] self.parent_account_id = data["parent_account_id"] self.root_account_id = data["root_account_id"]
class SISImport(models.Model): CSV_IMPORT_TYPE = "instructure_csv" import_id = models.IntegerField() workflow_state = models.CharField(max_length=100) progress = models.CharField(max_length=3) def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(SISImport, self).__init__(*args, **kwargs) self.import_id = data["id"] self.workflow_state = data["workflow_state"] self.progress = data.get("progress", "0") self.processing_warnings = data.get("processing_warnings", []) self.processing_errors = data.get("processing_errors", [])
class Major(models.Model): major_abbr = models.CharField(max_length=32) program_code = models.CharField(max_length=128) academic_qtr_key_id = models.IntegerField() major_pathway = models.IntegerField() display_name = models.CharField(max_length=255) college = models.CharField(max_length=255) division = models.CharField(max_length=255) dtx = models.CharField(max_length=255) assigned_count = models.IntegerField() assigned_resident = models.IntegerField(null=True) assigned_nonresident = models.IntegerField(null=True) assigned_international = models.IntegerField(null=True)
class CohortAssignment(Assignment): cohort_number = models.IntegerField() override_previous = models.BooleanField() override_protected = models.BooleanField() def json_data(self): applicant_json = [] for application in self.applicants: applicant_json.append(application.json_data()) return {'applicants': applicant_json, 'cohortNbr': int(self.cohort_number), 'overridePreviousCohort': self.override_previous, 'overridePreviousProtectedCohort': self.override_protected, 'assignmentDetail': {'assignmentType': self.assignment_type, 'academicQtrKeyId': self.quarter, 'campus': int(self.campus), 'comments': self.comments, 'decisionImportUser': self.user} }
class Quiz(models.Model): quiz_id = models.IntegerField() due_at = models.DateTimeField() title = models.CharField(max_length=500) html_url = models.CharField(max_length=500, null=True) published = models.NullBooleanField() def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(Quiz, self).__init__(*args, **kwargs) self.quiz_id = data["id"] self.title = data["title"] self.html_url = data["html_url"] self.published = data["published"] self.points_possible = data["points_possible"] if "due_at" in data and "due_at" is not None: self.due_at = dateutil.parser.parse(data["due_at"])
class Application(models.Model): adsel_id = models.IntegerField() application_number = models.IntegerField() system_key = models.IntegerField() campus = models.IntegerField() quarter_id = models.IntegerField() assigned_cohort = models.IntegerField() assigned_major = models.CharField(max_length=32) major_program_code = models.CharField(max_length=255) def json_data(self): return {'admissionSelectionId': int(self.adsel_id), 'applicationNbr': self.application_number, 'systemKey': int(self.system_key)}
class CanvasTerm(models.Model): term_id = models.IntegerField() sis_term_id = models.CharField(max_length=100, null=True) name = models.CharField(max_length=100) workflow_state = models.CharField(max_length=50) start_at = models.DateTimeField(null=True) end_at = models.DateTimeField(null=True) def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(CanvasTerm, self).__init__(*args, **kwargs) self.term_id = data.get('id') self.sis_term_id = data.get('sis_term_id') self.name = data.get('name') self.workflow_state = data.get('workflow_state') if 'start_at' in data and data['start_at']: self.start_at = dateutil.parser.parse(data['start_at']) if 'end_at' in data and data['end_at']: self.end_at = dateutil.parser.parse(data['end_at']) self.overrides = data.get('overrides', {})
class GroupHistory(GWSModel): description = models.CharField(max_length=512) activity = models.CharField(max_length=64) member_uwnetid = models.CharField(max_length=128, null=True) member_action = models.CharField(max_length=32, null=True) timestamp = models.IntegerField() # Epoch timestamp in milliseconds def is_add_member(self): return self.member_action and self.member_action == "add member" def is_delete_member(self): return self.member_action and self.member_action == "delete member" def json_data(self): return { "description": self.description, "activity": self.activity, "timestamp": self.timestamp, "member_uwnetid": self.member_uwnetid, "member_action": self.member_action, "is_add_member": self.is_add_member(), "is_delete_member": self.is_delete_member(), } def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(GroupHistory, self).__init__(*args, **kwargs) self.activity = data.get("activity") self.description = data.get("description") self.timestamp = int(data.get("timestamp")) if self.activity == "membership": self.member_action, name = self.description.split(": ") self.member_uwnetid = name.replace("'", "")
class DepartmentalDecisionApplication(Application): decision_id = models.IntegerField() def json_data(self): return {'admissionSelectionId': int(self.adsel_id), 'departmentalDecisionId': self.decision_id}
class PurpleGoldApplication(Application): award_amount = models.IntegerField() def json_data(self): return {'admissionSelectionId': int(self.adsel_id), 'awardAmount': self.award_amount}