empty message

Revision ID: 4a9dc6be945f Revises: Create Date: 2021-11-19 18:37:28.436500

from alembic import op
import sqlalchemy as sa
 

This is needed for the Web2PyBoolean class.

import bookserver.models
from sqlalchemy.dialects import postgresql
 

revision identifiers, used by Alembic.

revision = "4a9dc6be945f"
down_revision = None
branch_labels = None
depends_on = None


def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.drop_table("projects")
    op.drop_table("assignment_types")
    op.drop_table("modules")
    op.drop_table("pipactex_deadline")
    op.drop_table("cohort_plan_revisions")
    op.drop_table("deadlines")
    op.drop_table("section_users")
    op.drop_table("cohort_plan")
    op.drop_table("cohort_plan_responses")
    op.drop_table("sections")
    op.drop_table("user_comments")
    op.drop_table("cohort_master")
    op.drop_table("user_highlights")
    op.drop_table("problems")
    op.alter_column(
        "assignment_questions",
        "assignment_id",
        existing_type=sa.INTEGER(),
        nullable=False,
    )
    op.alter_column(
        "assignment_questions",
        "question_id",
        existing_type=sa.INTEGER(),
        nullable=False,
    )
    op.alter_column(
        "assignment_questions", "points", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "assignment_questions",
        "autograde",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "assignment_questions",
        "which_to_grade",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "assignment_questions",
        "sorting_priority",
        existing_type=sa.INTEGER(),
        nullable=False,
    )
    op.drop_index("aqs_assignid_ix", table_name="assignment_questions")
    op.drop_index("aqs_qid_ix", table_name="assignment_questions")
    op.create_index(
        op.f("ix_assignment_questions_assignment_id"),
        "assignment_questions",
        ["assignment_id"],
        unique=False,
    )
    op.create_index(
        op.f("ix_assignment_questions_question_id"),
        "assignment_questions",
        ["question_id"],
        unique=False,
    )
    op.add_column(
        "assignments",
        sa.Column("is_peer", bookserver.models.Web2PyBoolean(length=1), nullable=True),
    )
    op.add_column(
        "assignments", sa.Column("current_index", sa.Integer(), nullable=True)
    )
    op.alter_column(
        "assignments", "name", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "assignments",
        "points",
        existing_type=sa.INTEGER(),
        nullable=True,
        existing_server_default=sa.text("0"),
    )
    op.alter_column(
        "assignments", "released", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "assignments", "duedate", existing_type=postgresql.TIMESTAMP(), nullable=False
    )
    op.alter_column(
        "assignments", "visible", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "assignments", "from_source", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "auth_user", "username", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "auth_user", "first_name", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "auth_user", "last_name", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "auth_user", "email", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "auth_user", "password", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "auth_user", "created_on", existing_type=postgresql.TIMESTAMP(), nullable=False
    )
    op.alter_column(
        "auth_user", "modified_on", existing_type=postgresql.TIMESTAMP(), nullable=False
    )
    op.alter_column(
        "auth_user",
        "registration_key",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "auth_user",
        "reset_password_key",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "auth_user",
        "registration_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "auth_user", "course_id", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "auth_user", "course_name", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "auth_user", "active", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "auth_user", "donated", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "auth_user", "accept_tcp", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.drop_constraint("ix_auth_user_username", "auth_user", type_="unique")
    op.create_index(
        op.f("ix_auth_user_username"), "auth_user", ["username"], unique=True
    )

    op.drop_constraint("auth_user_course_id_fkey", "auth_user", type_="foreignkey")
    op.alter_column(
        "chapters", "chapter_name", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "chapters", "course_id", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "chapters",
        "chapter_label",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "chapters", "chapter_num", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "clickablearea_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=False,
    )
    op.alter_column(
        "clickablearea_answers",
        "div_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "clickablearea_answers",
        "sid",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "clickablearea_answers",
        "correct",
        existing_type=sa.CHAR(length=1),
        nullable=False,
    )
    op.alter_column(
        "clickablearea_answers",
        "answer",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "clickablearea_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.drop_index("click_course_idx", table_name="clickablearea_answers")
    op.drop_index("click_divid_idx", table_name="clickablearea_answers")
    op.drop_index("click_scd_idx", table_name="clickablearea_answers")
    op.drop_index("click_sid_idx", table_name="clickablearea_answers")
    op.create_index(
        "idx_div_sid_course_ca",
        "clickablearea_answers",
        ["sid", "div_id", "course_name"],
        unique=False,
    )
    op.create_index(
        op.f("ix_clickablearea_answers_course_name"),
        "clickablearea_answers",
        ["course_name"],
        unique=False,
    )
    op.create_index(
        op.f("ix_clickablearea_answers_div_id"),
        "clickablearea_answers",
        ["div_id"],
        unique=False,
    )
    op.create_index(
        op.f("ix_clickablearea_answers_sid"),
        "clickablearea_answers",
        ["sid"],
        unique=False,
    )
    op.create_foreign_key(
        None, "clickablearea_answers", "courses", ["course_name"], ["course_name"]
    )
    op.alter_column(
        "code", "timestamp", existing_type=postgresql.TIMESTAMP(), nullable=False
    )
    op.alter_column("code", "sid", existing_type=sa.VARCHAR(length=512), nullable=False)
    op.alter_column(
        "code", "acid", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column("code", "course_id", existing_type=sa.INTEGER(), nullable=False)
    op.alter_column("code", "code", existing_type=sa.TEXT(), nullable=False)
    op.alter_column("code", "language", existing_type=sa.TEXT(), nullable=False)
    op.drop_column("code", "grade")
    op.alter_column(
        "codelens_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=False,
    )
    op.alter_column(
        "codelens_answers",
        "div_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "codelens_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "codelens_answers", "correct", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "codelens_answers",
        "answer",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "codelens_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.create_index(
        "idx_div_sid_course_cl",
        "codelens_answers",
        ["sid", "div_id", "course_name"],
        unique=False,
    )
    op.create_index(
        op.f("ix_codelens_answers_course_name"),
        "codelens_answers",
        ["course_name"],
        unique=False,
    )
    op.create_index(
        op.f("ix_codelens_answers_div_id"), "codelens_answers", ["div_id"], unique=False
    )
    op.create_index(
        op.f("ix_codelens_answers_sid"), "codelens_answers", ["sid"], unique=False
    )
    op.create_foreign_key(
        None, "codelens_answers", "courses", ["course_name"], ["course_name"]
    )
    op.alter_column(
        "competency", "question", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "competency", "competency", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "competency", "is_primary", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "competency",
        "question_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.create_index(
        "q_comp_unique", "competency", ["question", "competency"], unique=False
    )
    op.alter_column(
        "course_attributes", "course_id", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "course_attributes",
        "attr",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "course_attributes", "value", existing_type=sa.TEXT(), nullable=False
    )
    op.alter_column(
        "course_instructor", "course", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "course_instructor", "instructor", existing_type=sa.INTEGER(), nullable=False
    )
    op.drop_constraint(
        "course_instructor_instructor_fkey", "course_instructor", type_="foreignkey"
    )
    op.drop_constraint(
        "course_instructor_course_fkey", "course_instructor", type_="foreignkey"
    )
    op.create_foreign_key(
        None, "course_instructor", "auth_user", ["instructor"], ["id"]
    )
    op.create_foreign_key(None, "course_instructor", "courses", ["course"], ["id"])
    op.alter_column(
        "course_lti_map", "lti_id", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "course_lti_map", "course_id", existing_type=sa.INTEGER(), nullable=False
    )
    op.add_column(
        "courses",
        sa.Column(
            "new_server", bookserver.models.Web2PyBoolean(length=1), nullable=True
        ),
    )
    op.alter_column(
        "courses", "course_name", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "courses", "term_start_date", existing_type=sa.DATE(), nullable=False
    )
    op.alter_column(
        "courses", "base_course", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "courses", "login_required", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "courses", "allow_pairs", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "courses", "downloads_enabled", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "courses", "courselevel", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "courses", "institution", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.create_foreign_key(None, "courses", "courses", ["base_course"], ["course_name"])
    op.alter_column(
        "dragndrop_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=False,
    )
    op.alter_column(
        "dragndrop_answers",
        "div_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "dragndrop_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "dragndrop_answers", "correct", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "dragndrop_answers",
        "answer",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "dragndrop_answers",
        "min_height",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "dragndrop_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.drop_index("dnd_course_idx", table_name="dragndrop_answers")
    op.drop_index("dnd_divid_idx", table_name="dragndrop_answers")
    op.drop_index("dnd_scd_idx", table_name="dragndrop_answers")
    op.drop_index("dnd_sid_idx", table_name="dragndrop_answers")
    op.create_index(
        "idx_div_sid_course_dd",
        "dragndrop_answers",
        ["sid", "div_id", "course_name"],
        unique=False,
    )
    op.create_index(
        op.f("ix_dragndrop_answers_course_name"),
        "dragndrop_answers",
        ["course_name"],
        unique=False,
    )
    op.create_index(
        op.f("ix_dragndrop_answers_div_id"),
        "dragndrop_answers",
        ["div_id"],
        unique=False,
    )
    op.create_index(
        op.f("ix_dragndrop_answers_sid"), "dragndrop_answers", ["sid"], unique=False
    )
    op.create_foreign_key(
        None, "dragndrop_answers", "courses", ["course_name"], ["course_name"]
    )
    op.alter_column(
        "fitb_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=False,
    )
    op.alter_column(
        "fitb_answers", "div_id", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "fitb_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "fitb_answers", "correct", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "fitb_answers", "answer", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "fitb_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.drop_index("fitb_course_idx", table_name="fitb_answers")
    op.drop_index("fitb_divid_idx", table_name="fitb_answers")
    op.drop_index("fitb_scd_idx", table_name="fitb_answers")
    op.drop_index("fitb_sid_idx", table_name="fitb_answers")
    op.create_index(
        "idx_div_sid_course_fb",
        "fitb_answers",
        ["sid", "div_id", "course_name"],
        unique=False,
    )
    op.create_index(
        op.f("ix_fitb_answers_course_name"),
        "fitb_answers",
        ["course_name"],
        unique=False,
    )
    op.create_index(
        op.f("ix_fitb_answers_div_id"), "fitb_answers", ["div_id"], unique=False
    )
    op.create_index(op.f("ix_fitb_answers_sid"), "fitb_answers", ["sid"], unique=False)
    op.create_foreign_key(
        None, "fitb_answers", "courses", ["course_name"], ["course_name"]
    )
    op.alter_column("grades", "auth_user", existing_type=sa.INTEGER(), nullable=False)
    op.alter_column("grades", "assignment", existing_type=sa.INTEGER(), nullable=False)
    op.alter_column(
        "grades", "manual_total", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.drop_index("grades_assignment_ix", table_name="grades")
    op.drop_index("grades_sid_ix", table_name="grades")
    op.create_index(
        op.f("ix_grades_assignment"), "grades", ["assignment"], unique=False
    )
    op.create_index(op.f("ix_grades_auth_user"), "grades", ["auth_user"], unique=False)
    op.create_index(
        "user_assign_unique_idx", "grades", ["auth_user", "assignment"], unique=False
    )
    op.drop_column("grades", "projected")
    op.alter_column(
        "lp_answers", "timestamp", existing_type=postgresql.TIMESTAMP(), nullable=False
    )
    op.alter_column(
        "lp_answers", "div_id", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "lp_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column("lp_answers", "answer", existing_type=sa.TEXT(), nullable=False)
    op.alter_column(
        "lp_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.create_index(
        "idx_div_sid_course_lp",
        "lp_answers",
        ["sid", "div_id", "course_name"],
        unique=False,
    )
    op.create_index(
        op.f("ix_lp_answers_course_name"), "lp_answers", ["course_name"], unique=False
    )
    op.create_index(
        op.f("ix_lp_answers_div_id"), "lp_answers", ["div_id"], unique=False
    )
    op.create_index(op.f("ix_lp_answers_sid"), "lp_answers", ["sid"], unique=False)
    op.create_foreign_key(
        None, "lp_answers", "courses", ["course_name"], ["course_name"]
    )
    op.alter_column(
        "lti_keys", "consumer", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "lti_keys", "secret", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "lti_keys", "application", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "mchoice_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=False,
    )
    op.alter_column(
        "mchoice_answers",
        "div_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "mchoice_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "mchoice_answers", "correct", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "mchoice_answers", "answer", existing_type=sa.VARCHAR(length=50), nullable=False
    )
    op.alter_column(
        "mchoice_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.create_foreign_key(
        None, "mchoice_answers", "courses", ["course_name"], ["course_name"]
    )
    op.alter_column(
        "parsons_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=False,
    )
    op.alter_column(
        "parsons_answers",
        "div_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "parsons_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "parsons_answers", "correct", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "parsons_answers",
        "answer",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "parsons_answers",
        "source",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "parsons_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.create_foreign_key(
        None, "parsons_answers", "courses", ["course_name"], ["course_name"]
    )
    op.alter_column(
        "payments", "user_courses_id", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "payments", "charge_id", existing_type=sa.VARCHAR(length=255), nullable=False
    )
    op.drop_index("qg_course_ix", table_name="question_grades")
    op.drop_index("qg_divid_ix", table_name="question_grades")
    op.drop_index("qg_sid_ix", table_name="question_grades")
    op.drop_index(
        "question_grades_sid_course_name_div_id_idx", table_name="question_grades"
    )
    op.create_index(
        op.f("ix_question_grades_course_name"),
        "question_grades",
        ["course_name"],
        unique=False,
    )
    op.create_index(
        op.f("ix_question_grades_div_id"), "question_grades", ["div_id"], unique=False
    )
    op.create_index(
        op.f("ix_question_grades_sid"), "question_grades", ["sid"], unique=False
    )
    op.create_index(
        "question_grades_key",
        "question_grades",
        ["div_id", "course_name", "sid"],
        unique=False,
    )
    op.alter_column(
        "questions", "chapter", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "questions", "subchapter", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "questions", "timestamp", existing_type=postgresql.TIMESTAMP(), nullable=False
    )
    op.alter_column(
        "questions",
        "question_type",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "questions", "from_source", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "selected_questions",
        "selector_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "selected_questions",
        "sid",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "selected_questions",
        "selected_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "selected_questions", "points", existing_type=sa.INTEGER(), nullable=False
    )
    op.create_index(
        "selector_sid_unique",
        "selected_questions",
        ["selector_id", "sid"],
        unique=False,
    )
    op.alter_column(
        "shortanswer_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=False,
    )
    op.alter_column(
        "shortanswer_answers",
        "div_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "shortanswer_answers",
        "sid",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "shortanswer_answers", "answer", existing_type=sa.TEXT(), nullable=False
    )
    op.alter_column(
        "shortanswer_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.drop_index("sa_course_idx", table_name="shortanswer_answers")
    op.drop_index("sa_divid_idx", table_name="shortanswer_answers")
    op.drop_index("sa_scd_idx", table_name="shortanswer_answers")
    op.drop_index("sa_sid_idx", table_name="shortanswer_answers")
    op.create_index(
        "idx_div_sid_course_sa",
        "shortanswer_answers",
        ["sid", "div_id", "course_name"],
        unique=False,
    )
    op.create_index(
        op.f("ix_shortanswer_answers_course_name"),
        "shortanswer_answers",
        ["course_name"],
        unique=False,
    )
    op.create_index(
        op.f("ix_shortanswer_answers_div_id"),
        "shortanswer_answers",
        ["div_id"],
        unique=False,
    )
    op.create_index(
        op.f("ix_shortanswer_answers_sid"), "shortanswer_answers", ["sid"], unique=False
    )
    op.create_foreign_key(
        None, "shortanswer_answers", "courses", ["course_name"], ["course_name"]
    )
    op.alter_column(
        "source_code", "acid", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "source_code", "course_id", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column("source_code", "main_code", existing_type=sa.TEXT(), nullable=False)
    op.alter_column(
        "sub_chapters",
        "sub_chapter_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "sub_chapters", "chapter_id", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "sub_chapters",
        "sub_chapter_label",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "sub_chapters", "skipreading", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "sub_chapters", "sub_chapter_num", existing_type=sa.INTEGER(), nullable=False
    )
    op.create_index(
        op.f("ix_sub_chapters_sub_chapter_label"),
        "sub_chapters",
        ["sub_chapter_label"],
        unique=False,
    )
    op.alter_column(
        "timed_exam", "timestamp", existing_type=postgresql.TIMESTAMP(), nullable=False
    )
    op.alter_column(
        "timed_exam", "div_id", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "timed_exam", "sid", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column("timed_exam", "correct", existing_type=sa.INTEGER(), nullable=False)
    op.alter_column(
        "timed_exam", "incorrect", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column("timed_exam", "skipped", existing_type=sa.INTEGER(), nullable=False)
    op.alter_column(
        "timed_exam", "time_taken", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "timed_exam",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.create_index(
        op.f("ix_timed_exam_course_name"), "timed_exam", ["course_name"], unique=False
    )
    op.create_index(
        op.f("ix_timed_exam_div_id"), "timed_exam", ["div_id"], unique=False
    )
    op.create_index(op.f("ix_timed_exam_sid"), "timed_exam", ["sid"], unique=False)
    op.create_foreign_key(
        None, "timed_exam", "courses", ["course_name"], ["course_name"]
    )
    op.alter_column(
        "unittest_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=False,
    )
    op.alter_column(
        "unittest_answers",
        "div_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "unittest_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "unittest_answers", "correct", existing_type=sa.CHAR(length=1), nullable=False
    )
    op.alter_column(
        "unittest_answers", "passed", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "unittest_answers", "failed", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "unittest_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.create_index(
        "idx_div_sid_course_ut",
        "unittest_answers",
        ["sid", "div_id", "course_name"],
        unique=False,
    )
    op.create_foreign_key(
        None, "unittest_answers", "courses", ["course_name"], ["course_name"]
    )
    op.alter_column(
        "useinfo", "timestamp", existing_type=postgresql.TIMESTAMP(), nullable=False
    )
    op.alter_column(
        "useinfo", "sid", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "useinfo", "event", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "useinfo", "act", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "useinfo", "div_id", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "useinfo", "course_id", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.create_index("sid_divid_idx", "useinfo", ["sid", "div_id"], unique=False)
    op.create_foreign_key(None, "useinfo", "courses", ["course_id"], ["course_name"])
    op.alter_column(
        "user_chapter_progress",
        "user_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "user_chapter_progress",
        "chapter_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "user_chapter_progress", "status", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "user_courses", "user_id", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "user_courses", "course_id", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column(
        "user_experiment",
        "experiment_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "user_experiment", "sid", existing_type=sa.VARCHAR(length=512), nullable=False
    )
    op.alter_column(
        "user_experiment", "exp_group", existing_type=sa.INTEGER(), nullable=False
    )
    op.alter_column("user_state", "user_id", existing_type=sa.INTEGER(), nullable=False)
    op.alter_column(
        "user_state",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.drop_index("us_sid_idx", table_name="user_state")
    op.create_index(
        op.f("ix_user_state_course_name"), "user_state", ["course_name"], unique=False
    )
    op.create_index(
        op.f("ix_user_state_user_id"), "user_state", ["user_id"], unique=False
    )
    op.create_foreign_key(None, "user_state", "auth_user", ["user_id"], ["id"])
    op.alter_column(
        "user_sub_chapter_progress",
        "chapter_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "user_sub_chapter_progress",
        "sub_chapter_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=False,
    )
    op.alter_column(
        "user_sub_chapter_progress",
        "status",
        existing_type=sa.INTEGER(),
        nullable=False,
    )
    op.drop_index("uscp_course_name_ix", table_name="user_sub_chapter_progress")
    op.drop_index("usp_subchap_ix", table_name="user_sub_chapter_progress")
    op.drop_index(
        "ix_user_sub_chapter_progress_sub_chapter_id",
        table_name="user_sub_chapter_progress",
    )
    op.create_index(
        op.f("ix_user_sub_chapter_progress_sub_chapter_id"),
        "user_sub_chapter_progress",
        ["sub_chapter_id"],
        unique=False,
    )
    op.create_index(
        op.f("ix_user_sub_chapter_progress_course_name"),
        "user_sub_chapter_progress",
        ["course_name"],
        unique=False,
    )
    op.create_index(
        op.f("ix_user_sub_chapter_progress_user_id"),
        "user_sub_chapter_progress",
        ["user_id"],
        unique=False,
    )

### end Alembic commands ###

 
 
def downgrade():

### commands auto generated by Alembic - please adjust! ###

    op.drop_index(
        op.f("ix_user_sub_chapter_progress_user_id"),
        table_name="user_sub_chapter_progress",
    )
    op.drop_index(
        op.f("ix_user_sub_chapter_progress_course_name"),
        table_name="user_sub_chapter_progress",
    )
    op.drop_index(
        op.f("ix_user_sub_chapter_progress_sub_chapter_id"),
        table_name="user_sub_chapter_progress",
    )
    op.create_index(
        "ix_user_sub_chapter_progress_sub_chapter_id",
        "user_sub_chapter_progress",
        ["user_id"],
        unique=False,
    )
    op.create_index(
        "usp_subchap_ix", "user_sub_chapter_progress", ["sub_chapter_id"], unique=False
    )
    op.create_index(
        "uscp_course_name_ix",
        "user_sub_chapter_progress",
        ["course_name"],
        unique=False,
    )
    op.alter_column(
        "user_sub_chapter_progress", "status", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "user_sub_chapter_progress",
        "sub_chapter_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "user_sub_chapter_progress",
        "chapter_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.drop_constraint(None, "user_state", type_="foreignkey")
    op.drop_index(op.f("ix_user_state_user_id"), table_name="user_state")
    op.drop_index(op.f("ix_user_state_course_name"), table_name="user_state")
    op.create_index("us_sid_idx", "user_state", ["user_id"], unique=False)
    op.alter_column(
        "user_state", "course_name", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column("user_state", "user_id", existing_type=sa.INTEGER(), nullable=True)
    op.alter_column(
        "user_experiment", "exp_group", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "user_experiment", "sid", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "user_experiment",
        "experiment_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "user_courses", "course_id", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "user_courses", "user_id", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "user_chapter_progress", "status", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "user_chapter_progress",
        "chapter_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "user_chapter_progress",
        "user_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.drop_constraint(None, "useinfo", type_="foreignkey")
    op.drop_index("sid_divid_idx", table_name="useinfo")
    op.alter_column(
        "useinfo", "course_id", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "useinfo", "div_id", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "useinfo", "act", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "useinfo", "event", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "useinfo", "sid", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "useinfo", "timestamp", existing_type=postgresql.TIMESTAMP(), nullable=True
    )
    op.drop_constraint(None, "unittest_answers", type_="foreignkey")
    op.drop_index("idx_div_sid_course_ut", table_name="unittest_answers")
    op.alter_column(
        "unittest_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "unittest_answers", "failed", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "unittest_answers", "passed", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "unittest_answers",
        "answer",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "unittest_answers", "correct", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "unittest_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "unittest_answers",
        "div_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "unittest_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=True,
    )
    op.drop_constraint(None, "timed_exam", type_="foreignkey")
    op.drop_index(op.f("ix_timed_exam_sid"), table_name="timed_exam")
    op.drop_index(op.f("ix_timed_exam_div_id"), table_name="timed_exam")
    op.drop_index(op.f("ix_timed_exam_course_name"), table_name="timed_exam")
    op.alter_column(
        "timed_exam", "course_name", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "timed_exam", "time_taken", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column("timed_exam", "skipped", existing_type=sa.INTEGER(), nullable=True)
    op.alter_column(
        "timed_exam", "incorrect", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column("timed_exam", "correct", existing_type=sa.INTEGER(), nullable=True)
    op.alter_column(
        "timed_exam", "sid", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "timed_exam", "div_id", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "timed_exam", "timestamp", existing_type=postgresql.TIMESTAMP(), nullable=True
    )
    op.drop_index(op.f("ix_sub_chapters_sub_chapter_label"), table_name="sub_chapters")
    op.alter_column(
        "sub_chapters", "sub_chapter_num", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "sub_chapters", "skipreading", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "sub_chapters",
        "sub_chapter_label",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "sub_chapters", "chapter_id", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "sub_chapters",
        "sub_chapter_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column("source_code", "main_code", existing_type=sa.TEXT(), nullable=True)
    op.alter_column(
        "source_code", "course_id", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "source_code", "acid", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.drop_constraint(None, "shortanswer_answers", type_="foreignkey")
    op.drop_index(op.f("ix_shortanswer_answers_sid"), table_name="shortanswer_answers")
    op.drop_index(
        op.f("ix_shortanswer_answers_div_id"), table_name="shortanswer_answers"
    )
    op.drop_index(
        op.f("ix_shortanswer_answers_course_name"), table_name="shortanswer_answers"
    )
    op.drop_index("idx_div_sid_course_sa", table_name="shortanswer_answers")
    op.create_index("sa_sid_idx", "shortanswer_answers", ["sid"], unique=False)
    op.create_index(
        "sa_scd_idx",
        "shortanswer_answers",
        ["sid", "course_name", "div_id"],
        unique=False,
    )
    op.create_index("sa_divid_idx", "shortanswer_answers", ["div_id"], unique=False)
    op.create_index(
        "sa_course_idx", "shortanswer_answers", ["course_name"], unique=False
    )
    op.alter_column(
        "shortanswer_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "shortanswer_answers", "answer", existing_type=sa.TEXT(), nullable=True
    )
    op.alter_column(
        "shortanswer_answers",
        "sid",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "shortanswer_answers",
        "div_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "shortanswer_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=True,
    )
    op.drop_index("selector_sid_unique", table_name="selected_questions")
    op.alter_column(
        "selected_questions", "points", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "selected_questions",
        "selected_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "selected_questions", "sid", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "selected_questions",
        "selector_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "questions", "from_source", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "questions",
        "question_type",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "questions", "timestamp", existing_type=postgresql.TIMESTAMP(), nullable=True
    )
    op.alter_column(
        "questions", "subchapter", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "questions", "chapter", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.drop_index("question_grades_key", table_name="question_grades")
    op.drop_index(op.f("ix_question_grades_sid"), table_name="question_grades")
    op.drop_index(op.f("ix_question_grades_div_id"), table_name="question_grades")
    op.drop_index(op.f("ix_question_grades_course_name"), table_name="question_grades")
    op.create_index(
        "question_grades_sid_course_name_div_id_idx",
        "question_grades",
        ["sid", "course_name", "div_id"],
        unique=False,
    )
    op.create_index("qg_sid_ix", "question_grades", ["sid"], unique=False)
    op.create_index("qg_divid_ix", "question_grades", ["div_id"], unique=False)
    op.create_index("qg_course_ix", "question_grades", ["course_name"], unique=False)
    op.alter_column(
        "question_grades", "comment", existing_type=sa.TEXT(), nullable=True
    )
    op.alter_column(
        "payments", "charge_id", existing_type=sa.VARCHAR(length=255), nullable=True
    )
    op.alter_column(
        "payments", "user_courses_id", existing_type=sa.INTEGER(), nullable=True
    )
    op.drop_constraint(None, "parsons_answers", type_="foreignkey")
    op.alter_column(
        "parsons_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "parsons_answers", "source", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "parsons_answers", "answer", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "parsons_answers", "correct", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "parsons_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "parsons_answers", "div_id", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "parsons_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=True,
    )
    op.drop_constraint(None, "mchoice_answers", type_="foreignkey")
    op.alter_column(
        "mchoice_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "mchoice_answers", "answer", existing_type=sa.VARCHAR(length=50), nullable=True
    )
    op.alter_column(
        "mchoice_answers", "correct", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "mchoice_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "mchoice_answers", "div_id", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "mchoice_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=True,
    )
    op.alter_column(
        "lti_keys", "application", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "lti_keys", "secret", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "lti_keys", "consumer", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.drop_constraint(None, "lp_answers", type_="foreignkey")
    op.drop_index(op.f("ix_lp_answers_sid"), table_name="lp_answers")
    op.drop_index(op.f("ix_lp_answers_div_id"), table_name="lp_answers")
    op.drop_index(op.f("ix_lp_answers_course_name"), table_name="lp_answers")
    op.drop_index("idx_div_sid_course_lp", table_name="lp_answers")
    op.alter_column(
        "lp_answers", "course_name", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column("lp_answers", "answer", existing_type=sa.TEXT(), nullable=True)
    op.alter_column(
        "lp_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "lp_answers", "div_id", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "lp_answers", "timestamp", existing_type=postgresql.TIMESTAMP(), nullable=True
    )
    op.add_column(
        "grades",
        sa.Column(
            "projected",
            postgresql.DOUBLE_PRECISION(precision=53),
            autoincrement=False,
            nullable=True,
        ),
    )
    op.add_column(
        "grades",
        sa.Column(
            "is_submit", sa.VARCHAR(length=512), autoincrement=False, nullable=True
        ),
    )
    op.drop_index("user_assign_unique_idx", table_name="grades")
    op.drop_index(op.f("ix_grades_auth_user"), table_name="grades")
    op.drop_index(op.f("ix_grades_assignment"), table_name="grades")
    op.create_index("grades_sid_ix", "grades", ["auth_user"], unique=False)
    op.create_index("grades_assignment_ix", "grades", ["assignment"], unique=False)
    op.alter_column(
        "grades", "manual_total", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column("grades", "assignment", existing_type=sa.INTEGER(), nullable=True)
    op.alter_column("grades", "auth_user", existing_type=sa.INTEGER(), nullable=True)
    op.drop_constraint(None, "fitb_answers", type_="foreignkey")
    op.drop_index(op.f("ix_fitb_answers_sid"), table_name="fitb_answers")
    op.drop_index(op.f("ix_fitb_answers_div_id"), table_name="fitb_answers")
    op.drop_index(op.f("ix_fitb_answers_course_name"), table_name="fitb_answers")
    op.drop_index("idx_div_sid_course_fb", table_name="fitb_answers")
    op.create_index("fitb_sid_idx", "fitb_answers", ["sid"], unique=False)
    op.create_index(
        "fitb_scd_idx", "fitb_answers", ["div_id", "course_name", "sid"], unique=False
    )
    op.create_index("fitb_divid_idx", "fitb_answers", ["div_id"], unique=False)
    op.create_index("fitb_course_idx", "fitb_answers", ["course_name"], unique=False)
    op.alter_column(
        "fitb_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "fitb_answers", "answer", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "fitb_answers", "correct", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "fitb_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "fitb_answers", "div_id", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "fitb_answers", "timestamp", existing_type=postgresql.TIMESTAMP(), nullable=True
    )
    op.drop_constraint(None, "dragndrop_answers", type_="foreignkey")
    op.drop_index(op.f("ix_dragndrop_answers_sid"), table_name="dragndrop_answers")
    op.drop_index(op.f("ix_dragndrop_answers_div_id"), table_name="dragndrop_answers")
    op.drop_index(
        op.f("ix_dragndrop_answers_course_name"), table_name="dragndrop_answers"
    )
    op.drop_index("idx_div_sid_course_dd", table_name="dragndrop_answers")
    op.create_index("dnd_sid_idx", "dragndrop_answers", ["sid"], unique=False)
    op.create_index(
        "dnd_scd_idx",
        "dragndrop_answers",
        ["div_id", "course_name", "sid"],
        unique=False,
    )
    op.create_index("dnd_divid_idx", "dragndrop_answers", ["div_id"], unique=False)
    op.create_index(
        "dnd_course_idx", "dragndrop_answers", ["course_name"], unique=False
    )
    op.alter_column(
        "dragndrop_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "dragndrop_answers",
        "min_height",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "dragndrop_answers",
        "answer",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "dragndrop_answers", "correct", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "dragndrop_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "dragndrop_answers",
        "div_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "dragndrop_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=True,
    )
    op.drop_constraint(None, "courses", type_="foreignkey")
    op.alter_column(
        "courses", "institution", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "courses", "courselevel", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "courses", "downloads_enabled", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "courses", "allow_pairs", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "courses", "login_required", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "courses", "base_course", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "courses", "term_start_date", existing_type=sa.DATE(), nullable=True
    )
    op.alter_column(
        "courses", "course_name", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.drop_column("courses", "new_server")
    op.alter_column(
        "course_lti_map", "course_id", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "course_lti_map", "lti_id", existing_type=sa.INTEGER(), nullable=True
    )
    op.drop_constraint(None, "course_instructor", type_="foreignkey")
    op.drop_constraint(None, "course_instructor", type_="foreignkey")
    op.create_foreign_key(
        "course_instructor_course_fkey",
        "course_instructor",
        "courses",
        ["course"],
        ["id"],
        ondelete="CASCADE",
    )
    op.create_foreign_key(
        "course_instructor_instructor_fkey",
        "course_instructor",
        "auth_user",
        ["instructor"],
        ["id"],
        ondelete="CASCADE",
    )
    op.alter_column(
        "course_instructor", "instructor", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "course_instructor", "course", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "course_attributes", "value", existing_type=sa.TEXT(), nullable=True
    )
    op.alter_column(
        "course_attributes", "attr", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "course_attributes", "course_id", existing_type=sa.INTEGER(), nullable=True
    )
    op.drop_index("q_comp_unique", table_name="competency")
    op.alter_column(
        "competency",
        "question_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "competency", "is_primary", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "competency", "competency", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column("competency", "question", existing_type=sa.INTEGER(), nullable=True)
    op.drop_constraint(None, "codelens_answers", type_="foreignkey")
    op.drop_index(op.f("ix_codelens_answers_sid"), table_name="codelens_answers")
    op.drop_index(op.f("ix_codelens_answers_div_id"), table_name="codelens_answers")
    op.drop_index(
        op.f("ix_codelens_answers_course_name"), table_name="codelens_answers"
    )
    op.drop_index("idx_div_sid_course_cl", table_name="codelens_answers")
    op.alter_column(
        "codelens_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "codelens_answers",
        "source",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "codelens_answers",
        "answer",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "codelens_answers", "correct", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "codelens_answers", "sid", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "codelens_answers",
        "div_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "codelens_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=True,
    )
    op.add_column(
        "code",
        sa.Column(
            "grade",
            postgresql.DOUBLE_PRECISION(precision=53),
            autoincrement=False,
            nullable=True,
        ),
    )
    op.alter_column("code", "emessage", existing_type=sa.TEXT(), nullable=True)
    op.alter_column("code", "language", existing_type=sa.TEXT(), nullable=True)
    op.alter_column("code", "code", existing_type=sa.TEXT(), nullable=True)
    op.alter_column("code", "course_id", existing_type=sa.INTEGER(), nullable=True)
    op.alter_column("code", "acid", existing_type=sa.VARCHAR(length=512), nullable=True)
    op.alter_column("code", "sid", existing_type=sa.VARCHAR(length=512), nullable=True)
    op.alter_column(
        "code", "timestamp", existing_type=postgresql.TIMESTAMP(), nullable=True
    )
    op.drop_constraint(None, "clickablearea_answers", type_="foreignkey")
    op.drop_index(
        op.f("ix_clickablearea_answers_sid"), table_name="clickablearea_answers"
    )
    op.drop_index(
        op.f("ix_clickablearea_answers_div_id"), table_name="clickablearea_answers"
    )
    op.drop_index(
        op.f("ix_clickablearea_answers_course_name"), table_name="clickablearea_answers"
    )
    op.drop_index("idx_div_sid_course_ca", table_name="clickablearea_answers")
    op.create_index("click_sid_idx", "clickablearea_answers", ["sid"], unique=False)
    op.create_index(
        "click_scd_idx",
        "clickablearea_answers",
        ["sid", "course_name", "div_id"],
        unique=False,
    )
    op.create_index(
        "click_divid_idx", "clickablearea_answers", ["div_id"], unique=False
    )
    op.create_index(
        "click_course_idx", "clickablearea_answers", ["course_name"], unique=False
    )
    op.alter_column(
        "clickablearea_answers",
        "course_name",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "clickablearea_answers",
        "answer",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "clickablearea_answers",
        "correct",
        existing_type=sa.CHAR(length=1),
        nullable=True,
    )
    op.alter_column(
        "clickablearea_answers",
        "sid",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "clickablearea_answers",
        "div_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "clickablearea_answers",
        "timestamp",
        existing_type=postgresql.TIMESTAMP(),
        nullable=True,
    )
    op.alter_column(
        "chapters", "chapter_num", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "chapters", "chapter_label", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "chapters", "course_id", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "chapters", "chapter_name", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.create_foreign_key(
        "auth_user_course_id_fkey",
        "auth_user",
        "courses",
        ["course_id"],
        ["id"],
        ondelete="CASCADE",
    )
    op.drop_constraint(None, "auth_user", type_="unique")
    op.drop_index(op.f("ix_auth_user_username"), table_name="auth_user")
    op.create_unique_constraint("ix_auth_user_username", "auth_user", ["username"])
    op.alter_column(
        "auth_user", "accept_tcp", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "auth_user", "donated", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "auth_user", "active", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "auth_user", "course_name", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column("auth_user", "course_id", existing_type=sa.INTEGER(), nullable=True)
    op.alter_column(
        "auth_user",
        "registration_id",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "auth_user",
        "reset_password_key",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "auth_user",
        "registration_key",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "auth_user", "modified_on", existing_type=postgresql.TIMESTAMP(), nullable=True
    )
    op.alter_column(
        "auth_user", "created_on", existing_type=postgresql.TIMESTAMP(), nullable=True
    )
    op.alter_column(
        "auth_user", "password", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "auth_user", "email", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "auth_user", "last_name", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "auth_user", "first_name", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "auth_user", "username", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.alter_column(
        "assignments", "from_source", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "assignments", "visible", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "assignments", "duedate", existing_type=postgresql.TIMESTAMP(), nullable=True
    )
    op.alter_column(
        "assignments", "released", existing_type=sa.CHAR(length=1), nullable=True
    )
    op.alter_column(
        "assignments",
        "points",
        existing_type=sa.INTEGER(),
        nullable=False,
        existing_server_default=sa.text("0"),
    )
    op.alter_column(
        "assignments", "name", existing_type=sa.VARCHAR(length=512), nullable=True
    )
    op.drop_column("assignments", "current_index")
    op.drop_column("assignments", "is_peer")
    op.drop_index(
        op.f("ix_assignment_questions_question_id"), table_name="assignment_questions"
    )
    op.drop_index(
        op.f("ix_assignment_questions_assignment_id"), table_name="assignment_questions"
    )
    op.create_index("aqs_qid_ix", "assignment_questions", ["question_id"], unique=False)
    op.create_index(
        "aqs_assignid_ix", "assignment_questions", ["assignment_id"], unique=False
    )
    op.alter_column(
        "assignment_questions",
        "sorting_priority",
        existing_type=sa.INTEGER(),
        nullable=True,
    )
    op.alter_column(
        "assignment_questions",
        "which_to_grade",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "assignment_questions",
        "autograde",
        existing_type=sa.VARCHAR(length=512),
        nullable=True,
    )
    op.alter_column(
        "assignment_questions", "points", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "assignment_questions", "question_id", existing_type=sa.INTEGER(), nullable=True
    )
    op.alter_column(
        "assignment_questions",
        "assignment_id",
        existing_type=sa.INTEGER(),
        nullable=True,
    )
    op.create_table(
        "problems",
        sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
        sa.Column("assignment", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("acid", sa.VARCHAR(length=512), autoincrement=False, nullable=True),
        sa.ForeignKeyConstraint(
            ["assignment"],
            ["assignments.id"],
            name="problems_assignment_fkey",
            ondelete="CASCADE",
        ),
        sa.PrimaryKeyConstraint("id", name="problems_pkey"),
    )
    op.create_table(
        "user_highlights",
        sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
        sa.Column(
            "created_on", postgresql.TIMESTAMP(), autoincrement=False, nullable=True
        ),
        sa.Column("user_id", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column(
            "course_id", sa.VARCHAR(length=512), autoincrement=False, nullable=True
        ),
        sa.Column(
            "parent_class", sa.VARCHAR(length=512), autoincrement=False, nullable=True
        ),
        sa.Column("range", sa.TEXT(), autoincrement=False, nullable=True),
        sa.Column("chapter_url", sa.TEXT(), autoincrement=False, nullable=True),
        sa.Column("sub_chapter_url", sa.TEXT(), autoincrement=False, nullable=True),
        sa.Column("method", sa.VARCHAR(length=512), autoincrement=False, nullable=True),
        sa.Column("is_active", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.PrimaryKeyConstraint("id", name="user_highlights_pkey"),
    )
    op.create_table(
        "cohort_master",
        sa.Column(
            "id",
            sa.INTEGER(),
            server_default=sa.text("nextval('cohort_master_id_seq'::regclass)"),
            autoincrement=True,
            nullable=False,
        ),
        sa.Column(
            "cohort_name", sa.VARCHAR(length=512), autoincrement=False, nullable=True
        ),
        sa.Column(
            "created_on", postgresql.TIMESTAMP(), autoincrement=False, nullable=True
        ),
        sa.Column(
            "invitation_id", sa.VARCHAR(length=512), autoincrement=False, nullable=True
        ),
        sa.Column("average_time", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("is_active", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column(
            "course_name", sa.VARCHAR(length=512), autoincrement=False, nullable=True
        ),
        sa.PrimaryKeyConstraint("id", name="cohort_master_pkey"),
        postgresql_ignore_search_path=False,
    )
    op.create_table(
        "user_comments",
        sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
        sa.Column("cohort_id", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("chapter_id", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("comment", sa.TEXT(), autoincrement=False, nullable=True),
        sa.Column("comment_by", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("comment_parent", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column(
            "comment_on", postgresql.TIMESTAMP(), autoincrement=False, nullable=True
        ),
        sa.ForeignKeyConstraint(
            ["chapter_id"],
            ["chapters.id"],
            name="user_comments_chapter_id_fkey",
            ondelete="CASCADE",
        ),
        sa.ForeignKeyConstraint(
            ["cohort_id"],
            ["cohort_master.id"],
            name="user_comments_cohort_id_fkey",
            ondelete="CASCADE",
        ),
        sa.ForeignKeyConstraint(
            ["comment_by"],
            ["auth_user.id"],
            name="user_comments_comment_by_fkey",
            ondelete="CASCADE",
        ),
        sa.ForeignKeyConstraint(
            ["comment_parent"],
            ["user_comments.id"],
            name="user_comments_comment_parent_fkey",
            ondelete="CASCADE",
        ),
        sa.PrimaryKeyConstraint("id", name="user_comments_pkey"),
    )
    op.create_table(
        "sections",
        sa.Column(
            "id",
            sa.INTEGER(),
            server_default=sa.text("nextval('sections_id_seq'::regclass)"),
            autoincrement=True,
            nullable=False,
        ),
        sa.Column("name", sa.VARCHAR(length=512), autoincrement=False, nullable=True),
        sa.Column("course_id", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.ForeignKeyConstraint(
            ["course_id"],
            ["courses.id"],
            name="sections_course_id_fkey",
            ondelete="CASCADE",
        ),
        sa.PrimaryKeyConstraint("id", name="sections_pkey"),
        postgresql_ignore_search_path=False,
    )
    op.create_table(
        "cohort_plan_responses",
        sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
        sa.Column("plan_id", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("response", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("response_by", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column(
            "response_on", postgresql.TIMESTAMP(), autoincrement=False, nullable=True
        ),
        sa.ForeignKeyConstraint(
            ["response_by"],
            ["auth_user.id"],
            name="cohort_plan_responses_response_by_fkey",
            ondelete="CASCADE",
        ),
        sa.PrimaryKeyConstraint("id", name="cohort_plan_responses_pkey"),
    )
    op.create_table(
        "cohort_plan",
        sa.Column(
            "id",
            sa.INTEGER(),
            server_default=sa.text("nextval('cohort_plan_id_seq'::regclass)"),
            autoincrement=True,
            nullable=False,
        ),
        sa.Column("cohort_id", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("chapter_id", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("start_date", sa.DATE(), autoincrement=False, nullable=True),
        sa.Column("end_date", sa.DATE(), autoincrement=False, nullable=True),
        sa.Column("note", sa.VARCHAR(length=512), autoincrement=False, nullable=True),
        sa.Column("actual_end_date", sa.DATE(), autoincrement=False, nullable=True),
        sa.Column("status", sa.VARCHAR(length=512), autoincrement=False, nullable=True),
        sa.Column(
            "created_on", postgresql.TIMESTAMP(), autoincrement=False, nullable=True
        ),
        sa.Column("created_by", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("is_active", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.ForeignKeyConstraint(
            ["chapter_id"],
            ["chapters.id"],
            name="cohort_plan_chapter_id_fkey",
            ondelete="CASCADE",
        ),
        sa.ForeignKeyConstraint(
            ["cohort_id"],
            ["cohort_master.id"],
            name="cohort_plan_cohort_id_fkey",
            ondelete="CASCADE",
        ),
        sa.ForeignKeyConstraint(
            ["created_by"],
            ["auth_user.id"],
            name="cohort_plan_created_by_fkey",
            ondelete="CASCADE",
        ),
        sa.PrimaryKeyConstraint("id", name="cohort_plan_pkey"),
        postgresql_ignore_search_path=False,
    )
    op.create_table(
        "section_users",
        sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
        sa.Column("auth_user", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("section", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.ForeignKeyConstraint(
            ["auth_user"],
            ["auth_user.id"],
            name="section_users_auth_user_fkey",
            ondelete="CASCADE",
        ),
        sa.ForeignKeyConstraint(
            ["section"],
            ["sections.id"],
            name="section_users_section_fkey",
            ondelete="CASCADE",
        ),
        sa.PrimaryKeyConstraint("id", name="section_users_pkey"),
    )
    op.create_table(
        "deadlines",
        sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
        sa.Column("assignment", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("section", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column(
            "deadline", postgresql.TIMESTAMP(), autoincrement=False, nullable=True
        ),
        sa.ForeignKeyConstraint(
            ["assignment"],
            ["assignments.id"],
            name="deadlines_assignment_fkey",
            ondelete="CASCADE",
        ),
        sa.ForeignKeyConstraint(
            ["section"],
            ["sections.id"],
            name="deadlines_section_fkey",
            ondelete="CASCADE",
        ),
        sa.PrimaryKeyConstraint("id", name="deadlines_pkey"),
    )
    op.create_table(
        "cohort_plan_revisions",
        sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
        sa.Column("plan_id", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("revision_no", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("cohort_id", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("chapter_id", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column(
            "start_date", postgresql.TIMESTAMP(), autoincrement=False, nullable=True
        ),
        sa.Column(
            "end_date", postgresql.TIMESTAMP(), autoincrement=False, nullable=True
        ),
        sa.Column("note", sa.VARCHAR(length=512), autoincrement=False, nullable=True),
        sa.Column(
            "actual_end_date",
            postgresql.TIMESTAMP(),
            autoincrement=False,
            nullable=True,
        ),
        sa.Column("status", sa.VARCHAR(length=512), autoincrement=False, nullable=True),
        sa.Column(
            "created_on", postgresql.TIMESTAMP(), autoincrement=False, nullable=True
        ),
        sa.Column("created_by", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column("is_active", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.ForeignKeyConstraint(
            ["chapter_id"],
            ["chapters.id"],
            name="cohort_plan_revisions_chapter_id_fkey",
            ondelete="CASCADE",
        ),
        sa.ForeignKeyConstraint(
            ["cohort_id"],
            ["cohort_master.id"],
            name="cohort_plan_revisions_cohort_id_fkey",
            ondelete="CASCADE",
        ),
        sa.ForeignKeyConstraint(
            ["created_by"],
            ["auth_user.id"],
            name="cohort_plan_revisions_created_by_fkey",
            ondelete="CASCADE",
        ),
        sa.ForeignKeyConstraint(
            ["plan_id"],
            ["cohort_plan.id"],
            name="cohort_plan_revisions_plan_id_fkey",
            ondelete="CASCADE",
        ),
        sa.PrimaryKeyConstraint("id", name="cohort_plan_revisions_pkey"),
    )
    op.create_table(
        "pipactex_deadline",
        sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
        sa.Column(
            "acid_prefix", sa.VARCHAR(length=512), autoincrement=False, nullable=True
        ),
        sa.Column(
            "deadline", postgresql.TIMESTAMP(), autoincrement=False, nullable=True
        ),
        sa.Column("section", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.ForeignKeyConstraint(
            ["section"],
            ["sections.id"],
            name="pipactex_deadline_section_fkey",
            ondelete="CASCADE",
        ),
        sa.PrimaryKeyConstraint("id", name="pipactex_deadline_pkey"),
    )
    op.create_table(
        "modules",
        sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
        sa.Column(
            "shortname", sa.VARCHAR(length=512), autoincrement=False, nullable=True
        ),
        sa.Column("description", sa.TEXT(), autoincrement=False, nullable=True),
        sa.Column(
            "pathtofile", sa.VARCHAR(length=512), autoincrement=False, nullable=True
        ),
        sa.PrimaryKeyConstraint("id", name="modules_pkey"),
    )
    op.create_table(
        "assignment_types",
        sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
        sa.Column("name", sa.VARCHAR(length=512), autoincrement=False, nullable=True),
        sa.Column(
            "grade_type", sa.VARCHAR(length=512), autoincrement=False, nullable=True
        ),
        sa.Column(
            "weight",
            postgresql.DOUBLE_PRECISION(precision=53),
            autoincrement=False,
            nullable=True,
        ),
        sa.Column("points_possible", sa.INTEGER(), autoincrement=False, nullable=True),
        sa.Column(
            "assignments_count",
            sa.VARCHAR(length=512),
            autoincrement=False,
            nullable=True,
        ),
        sa.Column(
            "assignments_dropped",
            sa.VARCHAR(length=512),
            autoincrement=False,
            nullable=True,
        ),
        sa.PrimaryKeyConstraint("id", name="assignment_types_pkey"),
    )
    op.create_table(
        "projects",
        sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
        sa.Column(
            "projectcode", sa.VARCHAR(length=512), autoincrement=False, nullable=True
        ),
        sa.Column(
            "description", sa.VARCHAR(length=512), autoincrement=False, nullable=True
        ),
        sa.PrimaryKeyConstraint("id", name="projects_pkey"),
    )

### end Alembic commands ###