Coder Social home page Coder Social logo

fleischerresearchlab / canvasgroupy Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 1.0 1.17 MB

Canvas Grouping Python Script

Home Page: https://fleischerresearchlab.github.io/CanvasGroupy/

License: MIT License

Python 6.26% Jupyter Notebook 47.94% HTML 38.26% CSS 0.19% JavaScript 7.36%

canvasgroupy's Introduction

CanvasGroupy

View our documentation at this link

This module will use GroupEng to create canvas and github groups.

Install

pip install CanvasGroupy

How to use

Please visit GroupEng Official Website to see the documnetation of how to use GroupEng.

assign_groups("example/sample_group_specification.groupeng")
['-', '-', 'B', '-', '-']
['B', '-', 'H', '-', '-']
['H', '-', '-', '-', '-']
['-', 'H', '-', 'B', 'H']
['-', '-', '-', 'B', '-']
['-', '-', 'H', '-', '-']
['nanotech', 'renewable energy', 'nanotech', 'nanotech', 'nanotech']
['automotive', 'automotive', 'robotics', 'automotive', 'renewable energy']
['automotive', 'statistics', 'automotive', 'renewable energy', 'renewable energy']
['automotive', 'automotive', 'statistics', 'renewable energy', 'renewable energy']
['automotive', 'automotive', 'renewable energy', 'statistics', 'renewable energy']
['renewable energy', 'automotive', 'automotive', 'statistics', 'renewable energy']
['CS', 'EE', 'Mech E', 'CS', 'EE']
['CS', 'EE', 'Mech E', 'Mech E', 'EE']
['CS', 'Civ E', 'EE', 'Mech E', 'Mech E']
['EE', 'Civ E', 'Civ E', 'EE', 'Mech E']
['EE', 'Mech E', 'CS', 'EE', 'EE']
['Civ E', 'Mech E', 'CS', 'Mech E', 'EE']
['y', 'y', 'y', 'y', 'y']
['y', 'y', 'y', 'y', 'y']
['y', 'y', 'y', 'y', 'y']
['y', 'y', 'y', 'y', 'y']
['y', 'y', 'y', 'y', 'y']
['-', '-', 'y', '-', 'y']
['y', 'y', 'y', 'y', 'y']
['y', 'y', 'y', 'y', 'y']
['y', 'y', 'y', 'y', 'y']
['y', 'y', 'y', 'y', 'y']
['y', 'y', 'y', 'y', 'y']
['y', '-', '-', 'y', 'y']
['y', 'y', 'y', '-', '-']
['y', 'y', '-', 'y', '-']
['-', '-', '-', 'y', 'y']
['y', '-', 'y', '-', 'y']
['-', '-', 'y', '-', 'y']
[3.2579174234, 3.5995299693, 3.2756432963, 4.220160605, 2.5723254477]
[3.2579174234, 3.2756432963, 2.5723254477, 3.5995299693, 4.220160605]
[4.220160605, 3.5995299693, 3.2756432963, 3.2579174234, 2.5723254477]
[3.2756432963, 4.220160605, 3.2579174234, 2.5723254477, 3.5995299693]
[3.5995299693, 4.220160605, 3.2756432963, 3.2579174234, 2.5723254477]
[3.5995299693, 3.2756432963, 2.5723254477, 3.2579174234, 4.220160605]

(False, 'groups_example_2023-04-18_13-00-35')

canvasgroupy's People

Contributors

scott-yj-yang avatar

Stargazers

 avatar

Watchers

Kostas Georgiou avatar

Forkers

shanellis

canvasgroupy's Issues

Grading Project Updating Score with Dropped Student

When doing

    grading.grade_project(
        repo=repo,
        component="proposal",
        assignment_id=*****,
        post=True
    )
File ~/anaconda3/lib/python3.10/site-packages/CanvasGroupy/grading.py:116, in Grading.grade_project(self, repo, component, assignment_id, canvas_group_name, canvas_group_category, post)
    114     return
    115 issue = self.fetch_issue(repo, component)
--> 116 self.update_canvas_score(group_name, assignment_id, score, issue, post)

File ~/anaconda3/lib/python3.10/site-packages/CanvasGroupy/grading.py:79, in Grading.update_canvas_score(self, group_name, assignment_id, score, issue, post)
     77 self.cg.link_assignment(assignment_id)
     78 for member in members:
---> 79     student_id = self.cg.email_to_canvas_id[member]
     80     text_comment = f"Group: {group_name}"
     81     if issue is not None:

KeyError: '***'

This will happen when we sync grades for a group member who dropped out of the class. Need to use try-except syntax to catch this case.

Ability to adjust individual student grades within the group

For proposal through final report, there are cases where I decrease (or increase) a student's individual score relative to the rest of the group.

Having the ability to pass a dictionary where I could specify student identifiers and values to adjust by in say a dictionary to the grade posting would be super helpful.

I'm envisioning something like passing a parameter:

student_adjustments = {student_id1: 0.8, student_id2: 1.1}

Then, after grades are collected from the GH issue and when being posted to Canvas, student_id1 would earn 80% of the group grade (decrease) where student_id2 would earn 1.1*group grade (increase), etc.

Happy to discuss more my idea if unclear here. (Note there's no rush. I'll do this manually this quarter, but wanted to put in a request for the future if possible)

Grading's Canvas Group Category

grading.grade_project(
    canvas_group_category="Final Project",
)

Will set a group category every single time. change the logic to check whether the group category has been set or not

Grading Throw Error when the Project is not Properly Graded

How to replicate this error?

  1. When grading a GitHub issue that is not correctly formatted with the desire score

Error Message

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[23], line 8
      5 # Temporary Fix. Issue Page 
      6 # https://github.com/FleischerResearchLab/CanvasGroupy/issues/5
      7 try:
----> 8     grading.grade_project(
      9         repo=repo,
     10         component="proposal",
     11         assignment_id=693724,
     12         post=True
     13     )
     14 except KeyError:
     15     problem_groups.append(repo_name)

File ~/anaconda3/lib/python3.10/site-packages/CanvasGroupy/grading.py:106, in Grading.grade_project(self, repo, component, assignment_id, canvas_group_name, canvas_group_category, post)
    104 if canvas_group_category is not None:
    105     self.cg.set_group_category(canvas_group_category)
--> 106 score = self.parse_score_from_issue(repo, component)
    107 # create mapping from GitHub repo name to canvas group name
    108 if canvas_group_name is not None:

File ~/anaconda3/lib/python3.10/site-packages/CanvasGroupy/grading.py:59, in Grading.parse_score_from_issue(self, repo, component)
     57 body = issue.body
     58 score = 0
---> 59 for line in body.split("\n"):
     60     if "Score =" in line and "[comment]" not in line:
     61         score = literal_eval(line.split("=")[1])

AttributeError: 'NoneType' object has no attribute 'split'

Project Grading Print Out Current Progress

Improvements

When syncing grade from GitHub issue to Canvas, does not show the progress of the current group. It would be nice to see the current progress of which group we are working on right now.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.