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 SpotExtendedInfo(models.Model): """ Additional institution-provided metadata about a spot. If providing custom metadata, you should provide a validator for that data, as well. """ key = models.CharField(max_length=50) value = models.CharField(max_length=255)
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 ReportType(models.Model): PROVISIONING = "provisioning_csv" SIS_EXPORT = "sis_export_csv" UNUSED_COURSES = "unused_courses_csv" NAME_CHOICES = ((PROVISIONING, "Provisioning"), (SIS_EXPORT, "SIS Export"), (UNUSED_COURSES, "Unused Courses")) name = models.CharField(max_length=500, choices=NAME_CHOICES) title = models.CharField(max_length=500) def __init__(self, *args, **kwargs): self.parameters = {} self.last_run = None data = kwargs.get("data") if data is None: return super(ReportType, self).__init__(*args, **kwargs) self.name = data["report"] self.title = data["title"] self.parameters = data["parameters"] if "last_run" in data and data["last_run"] is not None: data["last_run"]["account_id"] = kwargs.get("account_id") self.last_run = Report(data=data["last_run"])
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 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 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 Session(models.Model): id = models.CharField(max_length=36) name = models.CharField(max_length=256) description = models.CharField(max_length=256) start_time = models.DateTimeField(null=True) folder = models.CharField(max_length=256) def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(Session, self).__init__(*args, **kwargs) self.id = data.get("Id") self.name = data.get("Name") self.description = data.get("Description") self.start_time = parse(data.get("StartTime")) if ("StartTime" in data) else None self.folder = data.get("Folder") def to_json(self): return { 'id': self.id, 'name': self.name, 'description': self.description, 'start_time': str(self.start_time) if self.start_time else None, 'folder': self.folder } def __str__(self): return json.dumps(self.to_json())
class ScheduledRecording(models.Model): id = models.CharField(max_length=36) name = models.CharField(max_length=256) start_time = models.DateTimeField(null=True) end_time = models.DateTimeField(null=True) def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(ScheduledRecording, self).__init__(*args, **kwargs) self.id = data.get("Id") self.name = data.get("Name") self.start_time = parse(data.get("StartTime")) if ("StartTime" in data) else None self.end_time = parse(data.get("EndTime", "")) if ("EndTime" in data) else None def to_json(self): return { 'id': self.id, 'name': self.name, 'start_time': str(self.start_time) if self.start_time else None, 'start_time': str(self.end_time) if self.end_time else None } def __str__(self): return json.dumps(self.to_json())
class RecorderScheduledEntry(models.Model): id = models.CharField(max_length=36) name = models.CharField(max_length=256) recorder_id = models.CharField(max_length=36) suppress_primary_capture = models.BooleanField(default=False) suppress_secondary_capture = models.BooleanField(default=False) recorder_description = models.CharField(max_length=256) def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(RecorderScheduledEntry, self).__init__(*args, **kwargs) self.id = data.get("Id") self.name = data.get("Name") self.suppress_primary_capture = (data.get("SuppressPrimaryCapture", False) == "true") self.suppress_secondary_capture = (data.get("SuppressSecondaryCapture", False) == "true") self.recorder_description = data.get("RecorderDescription") def to_json(self): return { 'id': self.id, 'name': self.name, 'recorder_id': self.recorder_id, 'suppress_primary_capture': self.suppress_primary_capture, 'suppress_secondary_capture': self.suppress_secondary_capture, 'recorder_description': self.recorder_description } def __str__(self): return json.dumps(self.to_json())
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 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 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 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 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 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 GroupReference(GWSModel): name = models.CharField(max_length=500) uwregid = models.CharField(max_length=32) display_name = models.CharField(max_length=500) url = models.CharField(max_length=200) def json_data(self): return { "id": self.name, "regid": self.uwregid, "displayName": self.display_name, "url": self.url, } def __init__(self, *args, **kwargs): super(GroupReference, self).__init__(*args, **kwargs)
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 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 SessionCreator(models.Model): id = models.CharField(max_length=36) user_name = models.CharField(max_length=128) def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(SessionCreator, self).__init__(*args, **kwargs) self.id = data.get("Id") self.user_name = data.get("Username") def to_json(self): return {'id': self.id, 'user_name': self.name} def __str__(self): return json.dumps(self.to_json())
class RecordingFolder(models.Model): id = models.CharField(max_length=36) name = models.CharField(max_length=256) def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(RecordingFolder, self).__init__(*args, **kwargs) self.id = data.get("Id") self.name = data.get("Name") def to_json(self): return {'id': self.id, 'name': self.name} def __str__(self): return json.dumps(self.to_json())
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 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 SessionUrls(models.Model): viewer_url = models.CharField(max_length=256) embed_url = models.CharField(max_length=256) share_settings_url = models.CharField(max_length=256) download_url = models.CharField(max_length=256) caption_download_url = models.CharField(max_length=256) editor_url = models.CharField(max_length=256) thumbnail_url = models.CharField(max_length=256) def __init__(self, *args, **kwargs): data = kwargs.get("data") if data is None: return super(SessionUrls, self).__init__(*args, **kwargs) self.viewer_url = data.get("ViewerUrl") self.embed_url = data.get("EmbedUrl") self.share_settings_url = data.get("ShareSettingsUrl") self.download_url = data.get("DownloadUrl") self.caption_download_url = data.get("CaptionDownloadUrl") self.editor_url = data.get("EditorUrl") self.thumbnail_url = data.get("ThumbnailUrl") def to_json(self): return { 'viewer_url': self.viewer_url, 'embed_url': self.embed_url, 'share_settings_url': self.share_settings_url, 'download_url': self.download_url, 'caption_download_url': self.caption_download_url, 'editor_url': self.editor_url, 'thumbnail_url': self.thumbnail_url } def __str__(self): return json.dumps(self.to_json())
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 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 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 BridgeCustomField(models.Model): # Field names: REGID_NAME = "regid" EMPLOYEE_ID_NAME = "employee_id" STUDENT_ID_NAME = "student_id" POS1_BUDGET_CODE = "pos1_budget_code" POS1_JOB_CODE = "pos1_job_code" POS1_JOB_CLAS = "pos1_job_class" # job classification POS1_LOCATION = "pos1_location" POS1_ORG_CODE = "pos1_org_code" POS1_ORG_NAME = "pos1_org_name" POS1_UNIT_CODE = "pos1_unit_code" POS2_BUDGET_CODE = "pos2_budget_code" POS2_JOB_CODE = "pos2_job_code" POS2_JOB_CLAS = "pos2_job_class" POS2_LOCATION = "pos2_location" POS2_ORG_CODE = "pos2_org_code" POS2_ORG_NAME = "pos2_org_name" POS2_UNIT_CODE = "pos2_unit_code" field_id = models.CharField(max_length=10) name = models.CharField(max_length=64) value_id = models.CharField(max_length=10, null=True, default=None) value = models.CharField(max_length=256, null=True, default=None) def to_json(self): value = {"custom_field_id": self.field_id, "value": self.value} if self.value_id is not None: value["id"] = self.value_id return value def to_json_short(self): return {"name": self.name, "value": self.value} def __init__(self, *args, **kwargs): super(BridgeCustomField, self).__init__(*args, **kwargs) def __str__(self): return json.dumps(self.to_json_short())