Skip to main content

A system to compile statistics automatically from a course on the codePost platform.

Project description

codePost Statistics Compiler

pytest codecov Documentation Status Downloads Run on Repl.it Stargazers

A system to compile statistics automatically from a course on the codePost platform.

Installation

The package is available on PyPI as slacktivate and so is available the usual way, i.e.,

$ pip install codepost-stats

Example

import codepost

import codepost_stats
import codepost_stats.analyzers.abstract.simple
import codepost_stats.analyzers.standard
import codepost_stats.event_loop

# Login
codepost.configure_api_key("<CODEPOST_API_TOKEN>")

# Create Course Analyzer Event Loop
cael = codepost_stats.event_loop.CourseAnalyzerEventLoop(
    course_name="COS126",
    course_term="S2020",
)

# Create Analyzer
class SubmissionsGradedCounter(codepost_stats.analyzers.abstract.simple.CounterAnalyzer):
    _name = "submissions.graded"
    
    def _event_submission(
        self,
        assignment: codepost.models.assignments.Assignments,
        submission: codepost.models.submissions.Submissions,
    ):
        # if no grader, nothing to do
        if submission.grader is None:
            return
        
        # if not finalized, do not want to count it
        if not submission.isFinalized:
            return
        
        # increase number of graded submission for grader by 1
        self._delta_counter(
            name=submission.grader,
            subcat=assignment.name,
            delta=1,
        )
        
sgc = SubmissionsGradedCounter()

# Add the analyzer we just created
cael.register(sgc)

# Add a few standard analyzers
cael.register(codepost_stats.analyzers.standard.CustomCommentsCounter)
cael.register(codepost_stats.analyzers.standard.RubricCommentsCounter)

# Run the aggregation of stats
cael.run()

# Extract statistics per user
statistics_per_user = {
    name: cael.get_by_name(name)
    for name in cael.names
}

and the statistics_per_user variable would be a dictionary of the form:

{
  "grader1@princeton.edu": {
    "submissions.graded": {
      "hello": 5,
      "loops": 6,
      "nbody": 0,
      "sierpinski": 8,
      "programming-exam-1": 6,
      "hamming": 0,
      "lfsr": 2,
      "guitar": 5,
      "markov": 6,
      "tspp": 4,
      "atomic": 29
    },
    "comments.counter.custom": {
      "hello": 9,
      "loops": 6,
      "nbody": 0,
      "sierpinski": 14,
      "programming-exam-1": 6,
      "hamming": 0,
      "lfsr": 4,
      "guitar": 8,
      "markov": 14,
      "tspp": 7,
      "atomic": 36
    },
    "comments.counter.rubric": {
      "hello": 7,
      "loops": 15,
      "nbody": 0,
      "sierpinski": 13,
      "programming-exam-1": 8,
      "hamming": 0,
      "lfsr": 6,
      "guitar": 10,
      "markov": 17,
      "tspp": 13,
      "atomic": 38
    }
  },
  "grader2@princeton.edu": {
      /* ... grader2@princeton.edu's statistics here ... */
  },
  /* ... more graders ... */
}

License

This project is licensed under the LGPLv3 license, with the understanding that importing a Python modular is similar in spirit to dynamically linking against it.

  • You can use the library/CLI codepost-stats in any project, for any purpose, as long as you provide some acknowledgement to this original project for use of the library (for open source software, just explicitly including codepost-stats in the dependency such as a pyproject.toml or Pipfile is acknowledgement enough for me!).

  • If you make improvements to codepost-stats, you are required to make those changes publicly available.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

codepost-stats-0.1.4.tar.gz (18.1 kB view hashes)

Uploaded Source

Built Distribution

codepost_stats-0.1.4-py3-none-any.whl (22.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page