Пример #1
0
def upload_assignments(db_adapter: MssqlLmsOperations,
                       assignments_df: pd.DataFrame) -> None:
    """
    Uploads an Assignments DataFrame to the Assignment and AssignmentSubmissionType
    tables. The specialized function is required in order to work with the
    collection table, AssignmentSubmissionType


    Parameters
    ----------
    db_adapter: MssqlLmsOperations
        Database engine-specific adapter/wrapper for database operations.
    df: pd.DataFrame
        A DataFrame to upload.
    """
    if assignments_df.empty:
        return

    assignments_df, submissions_type_df = assignment_splitter.split(
        assignments_df)

    # Truncate AssignmentDescription to max 1024 characters, matching the database
    assignments_df["AssignmentDescription"] = assignments_df[
        "AssignmentDescription"].astype("str").str[:1024]  # type: ignore
    upload_file(
        db_adapter,
        assignments_df,
        Table.ASSIGNMENT,
        MssqlLmsOperations.
        insert_new_records_to_production_for_section_relation,
        MssqlLmsOperations.soft_delete_from_production_for_section_relation,
    )

    if not submissions_type_df.empty:
        _upload_assignment_submission_types(db_adapter, submissions_type_df)
    def when_splitting_the_assignments() -> Tuple[pd.DataFrame, pd.DataFrame]:
        # Arrange
        assignments_df = pd.DataFrame()

        # Act
        assignments_df, submission_types_df = split(assignments_df)  # type: ignore

        return assignments_df, submission_types_df
    def when_splitting_the_assignments() -> Tuple[pd.DataFrame, pd.DataFrame]:
        # Arrange
        data = StringIO(
            """LMSSectionSourceSystemIdentifier,SourceSystemIdentifier,SubmissionType,SourceSystem,CreateDate,LastModifiedDate
104,112,['online_upload'],Canvas,2021-03-11,2021-03-12"""
        )

        assignments_df = pd.read_csv(data)

        # Act
        assignments_df, submission_types_df = split(assignments_df)  # type: ignore

        return assignments_df, submission_types_df
    def when_splitting_the_assignments() -> Tuple[pd.DataFrame, pd.DataFrame]:
        # Arrange
        data = StringIO(
            """SourceSystemIdentifier,Title,AssignmentDescription,DueDateTime,MaxPoints,AssignmentCategory,CreateDate,LastModifiedDate,SourceSystem,LMSSectionSourceSystemIdentifier,SubmissionType,SourceCreateDate,SourceLastModifiedDate,StartDateTime,EndDateTime
2942251001,Algebra foundations,,2020-08-28 23:59:00,100,assignment,2021-03-04 09:25:43,2021-03-04 09:25:43,Schoology,2942191527,,,,,"""
        )

        assignments_df = pd.read_csv(data)

        # Act
        assignments_df, submission_types_df = split(assignments_df)  # type: ignore

        return assignments_df, submission_types_df