A system to compile statistics automatically from a course on the codePost platform.
Project description
codePost Statistics Compiler
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 includingcodepost-stats
in the dependency such as apyproject.toml
orPipfile
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
Built Distribution
Hashes for codepost_stats-0.1.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b4287ebc8a4b8316277defeb3e5671eab950445ad01c49f66e6f2921fb3ae9b6 |
|
MD5 | 47b50e00eedf81bb448c7ff0cd468a6d |
|
BLAKE2b-256 | 344342f2cbf7f51017a197558d307684a8e16ec8fba5473f080fe45e04056d21 |