Commit be9144d7 by Clinton Blackburn

Added resource for latest enrollment count

Renamed num_enrolled_students field to count

Change-Id: I1aa8108be02f5947ce61afb36c2a94db479d25dc
parent 5399bf96
......@@ -35,7 +35,7 @@ Loading Data
The fixtures directory contains demo data. This data can be loaded with the following commands:
$ ./manage.py syncdb --migrate --noinput --database=analytics
$ ./manage.py loaddata courses education_levels single_course_activity course_enrollment_birth_year course_enrollment_education course_enrollment_gender problem_response_answer_distribution --database=analytics
$ ./manage.py loaddata courses education_levels single_course_activity course_enrollment_birth_year course_enrollment_education course_enrollment_gender course_enrollment_daily problem_response_answer_distribution --database=analytics
Running Tests
-------------
......
......@@ -5,9 +5,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1894,
"num_enrolled_students": 13,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 13,
"date": "2014-07-01"
}
},
{
......@@ -16,9 +15,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1895,
"num_enrolled_students": 19,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 19,
"date": "2014-07-01"
}
},
{
......@@ -27,9 +25,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1896,
"num_enrolled_students": 3,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 3,
"date": "2014-07-01"
}
},
{
......@@ -38,9 +35,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1898,
"num_enrolled_students": 2,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2,
"date": "2014-07-01"
}
},
{
......@@ -49,9 +45,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1900,
"num_enrolled_students": 14,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 14,
"date": "2014-07-01"
}
},
{
......@@ -60,9 +55,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1901,
"num_enrolled_students": 2,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2,
"date": "2014-07-01"
}
},
{
......@@ -71,9 +65,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1906,
"num_enrolled_students": 1,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1,
"date": "2014-07-01"
}
},
{
......@@ -82,9 +75,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1907,
"num_enrolled_students": 2,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2,
"date": "2014-07-01"
}
},
{
......@@ -93,9 +85,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1909,
"num_enrolled_students": 1,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1,
"date": "2014-07-01"
}
},
{
......@@ -104,9 +95,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1911,
"num_enrolled_students": 1,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1,
"date": "2014-07-01"
}
},
{
......@@ -115,9 +105,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1912,
"num_enrolled_students": 1,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1,
"date": "2014-07-01"
}
},
{
......@@ -126,9 +115,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1913,
"num_enrolled_students": 1,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1,
"date": "2014-07-01"
}
},
{
......@@ -137,9 +125,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1914,
"num_enrolled_students": 1,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1,
"date": "2014-07-01"
}
},
{
......@@ -148,9 +135,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1915,
"num_enrolled_students": 3,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 3,
"date": "2014-07-01"
}
},
{
......@@ -159,9 +145,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1916,
"num_enrolled_students": 1,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1,
"date": "2014-07-01"
}
},
{
......@@ -170,9 +155,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1917,
"num_enrolled_students": 1,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1,
"date": "2014-07-01"
}
},
{
......@@ -181,9 +165,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1918,
"num_enrolled_students": 1,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1,
"date": "2014-07-01"
}
},
{
......@@ -192,9 +175,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1920,
"num_enrolled_students": 5,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 5,
"date": "2014-07-01"
}
},
{
......@@ -203,9 +185,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1921,
"num_enrolled_students": 7,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 7,
"date": "2014-07-01"
}
},
{
......@@ -214,9 +195,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1922,
"num_enrolled_students": 11,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 11,
"date": "2014-07-01"
}
},
{
......@@ -225,9 +205,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1923,
"num_enrolled_students": 20,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 20,
"date": "2014-07-01"
}
},
{
......@@ -236,9 +215,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1924,
"num_enrolled_students": 16,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 16,
"date": "2014-07-01"
}
},
{
......@@ -247,9 +225,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1925,
"num_enrolled_students": 21,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 21,
"date": "2014-07-01"
}
},
{
......@@ -258,9 +235,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1926,
"num_enrolled_students": 29,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 29,
"date": "2014-07-01"
}
},
{
......@@ -269,9 +245,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1927,
"num_enrolled_students": 27,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 27,
"date": "2014-07-01"
}
},
{
......@@ -280,9 +255,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1928,
"num_enrolled_students": 44,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 44,
"date": "2014-07-01"
}
},
{
......@@ -291,9 +265,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1929,
"num_enrolled_students": 56,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 56,
"date": "2014-07-01"
}
},
{
......@@ -302,9 +275,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1930,
"num_enrolled_students": 71,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 71,
"date": "2014-07-01"
}
},
{
......@@ -313,9 +285,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1931,
"num_enrolled_students": 85,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 85,
"date": "2014-07-01"
}
},
{
......@@ -324,9 +295,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1932,
"num_enrolled_students": 98,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 98,
"date": "2014-07-01"
}
},
{
......@@ -335,9 +305,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1933,
"num_enrolled_students": 115,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 115,
"date": "2014-07-01"
}
},
{
......@@ -346,9 +315,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1934,
"num_enrolled_students": 135,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 135,
"date": "2014-07-01"
}
},
{
......@@ -357,9 +325,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1935,
"num_enrolled_students": 139,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 139,
"date": "2014-07-01"
}
},
{
......@@ -368,9 +335,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1936,
"num_enrolled_students": 186,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 186,
"date": "2014-07-01"
}
},
{
......@@ -379,9 +345,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1937,
"num_enrolled_students": 207,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 207,
"date": "2014-07-01"
}
},
{
......@@ -390,9 +355,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1938,
"num_enrolled_students": 236,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 236,
"date": "2014-07-01"
}
},
{
......@@ -401,9 +365,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1939,
"num_enrolled_students": 297,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 297,
"date": "2014-07-01"
}
},
{
......@@ -412,9 +375,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1940,
"num_enrolled_students": 329,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 329,
"date": "2014-07-01"
}
},
{
......@@ -423,9 +385,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1941,
"num_enrolled_students": 394,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 394,
"date": "2014-07-01"
}
},
{
......@@ -434,9 +395,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1942,
"num_enrolled_students": 503,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 503,
"date": "2014-07-01"
}
},
{
......@@ -445,9 +405,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1943,
"num_enrolled_students": 545,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 545,
"date": "2014-07-01"
}
},
{
......@@ -456,9 +415,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1944,
"num_enrolled_students": 627,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 627,
"date": "2014-07-01"
}
},
{
......@@ -467,9 +425,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1945,
"num_enrolled_students": 634,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 634,
"date": "2014-07-01"
}
},
{
......@@ -478,9 +435,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1946,
"num_enrolled_students": 877,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 877,
"date": "2014-07-01"
}
},
{
......@@ -489,9 +445,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1947,
"num_enrolled_students": 1101,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1101,
"date": "2014-07-01"
}
},
{
......@@ -500,9 +455,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1948,
"num_enrolled_students": 998,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 998,
"date": "2014-07-01"
}
},
{
......@@ -511,9 +465,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1949,
"num_enrolled_students": 1081,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1081,
"date": "2014-07-01"
}
},
{
......@@ -522,9 +475,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1950,
"num_enrolled_students": 1117,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1117,
"date": "2014-07-01"
}
},
{
......@@ -533,9 +485,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1951,
"num_enrolled_students": 1222,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1222,
"date": "2014-07-01"
}
},
{
......@@ -544,9 +495,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1952,
"num_enrolled_students": 1343,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1343,
"date": "2014-07-01"
}
},
{
......@@ -555,9 +505,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1953,
"num_enrolled_students": 1406,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1406,
"date": "2014-07-01"
}
},
{
......@@ -566,9 +515,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1954,
"num_enrolled_students": 1525,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1525,
"date": "2014-07-01"
}
},
{
......@@ -577,9 +525,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1955,
"num_enrolled_students": 1739,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1739,
"date": "2014-07-01"
}
},
{
......@@ -588,9 +535,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1956,
"num_enrolled_students": 1769,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1769,
"date": "2014-07-01"
}
},
{
......@@ -599,9 +545,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1957,
"num_enrolled_students": 1882,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1882,
"date": "2014-07-01"
}
},
{
......@@ -610,9 +555,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1958,
"num_enrolled_students": 1966,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1966,
"date": "2014-07-01"
}
},
{
......@@ -621,9 +565,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1959,
"num_enrolled_students": 2105,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2105,
"date": "2014-07-01"
}
},
{
......@@ -632,9 +575,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1960,
"num_enrolled_students": 2355,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2355,
"date": "2014-07-01"
}
},
{
......@@ -643,9 +585,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1961,
"num_enrolled_students": 2261,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2261,
"date": "2014-07-01"
}
},
{
......@@ -654,9 +595,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1962,
"num_enrolled_students": 2405,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2405,
"date": "2014-07-01"
}
},
{
......@@ -665,9 +605,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1963,
"num_enrolled_students": 2486,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2486,
"date": "2014-07-01"
}
},
{
......@@ -676,9 +615,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1964,
"num_enrolled_students": 2546,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2546,
"date": "2014-07-01"
}
},
{
......@@ -687,9 +625,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1965,
"num_enrolled_students": 2648,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2648,
"date": "2014-07-01"
}
},
{
......@@ -698,9 +635,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1966,
"num_enrolled_students": 2562,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2562,
"date": "2014-07-01"
}
},
{
......@@ -709,9 +645,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1967,
"num_enrolled_students": 2715,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2715,
"date": "2014-07-01"
}
},
{
......@@ -720,9 +655,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1968,
"num_enrolled_students": 2751,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2751,
"date": "2014-07-01"
}
},
{
......@@ -731,9 +665,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1969,
"num_enrolled_students": 2925,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2925,
"date": "2014-07-01"
}
},
{
......@@ -742,9 +675,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1970,
"num_enrolled_students": 3164,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 3164,
"date": "2014-07-01"
}
},
{
......@@ -753,9 +685,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1971,
"num_enrolled_students": 3051,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 3051,
"date": "2014-07-01"
}
},
{
......@@ -764,9 +695,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1972,
"num_enrolled_students": 3096,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 3096,
"date": "2014-07-01"
}
},
{
......@@ -775,9 +705,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1973,
"num_enrolled_students": 3073,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 3073,
"date": "2014-07-01"
}
},
{
......@@ -786,9 +715,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1974,
"num_enrolled_students": 3286,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 3286,
"date": "2014-07-01"
}
},
{
......@@ -797,9 +725,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1975,
"num_enrolled_students": 3452,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 3452,
"date": "2014-07-01"
}
},
{
......@@ -808,9 +735,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1976,
"num_enrolled_students": 3609,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 3609,
"date": "2014-07-01"
}
},
{
......@@ -819,9 +745,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1977,
"num_enrolled_students": 3890,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 3890,
"date": "2014-07-01"
}
},
{
......@@ -830,9 +755,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1978,
"num_enrolled_students": 3986,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 3986,
"date": "2014-07-01"
}
},
{
......@@ -841,9 +765,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1979,
"num_enrolled_students": 4484,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 4484,
"date": "2014-07-01"
}
},
{
......@@ -852,9 +775,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1980,
"num_enrolled_students": 4978,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 4978,
"date": "2014-07-01"
}
},
{
......@@ -863,9 +785,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1981,
"num_enrolled_students": 5033,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 5033,
"date": "2014-07-01"
}
},
{
......@@ -874,9 +795,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1982,
"num_enrolled_students": 5376,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 5376,
"date": "2014-07-01"
}
},
{
......@@ -885,9 +805,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1983,
"num_enrolled_students": 5665,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 5665,
"date": "2014-07-01"
}
},
{
......@@ -896,9 +815,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1984,
"num_enrolled_students": 6093,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 6093,
"date": "2014-07-01"
}
},
{
......@@ -907,9 +825,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1985,
"num_enrolled_students": 6343,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 6343,
"date": "2014-07-01"
}
},
{
......@@ -918,9 +835,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1986,
"num_enrolled_students": 6915,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 6915,
"date": "2014-07-01"
}
},
{
......@@ -929,9 +845,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1987,
"num_enrolled_students": 7368,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 7368,
"date": "2014-07-01"
}
},
{
......@@ -940,9 +855,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1988,
"num_enrolled_students": 7675,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 7675,
"date": "2014-07-01"
}
},
{
......@@ -951,9 +865,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1989,
"num_enrolled_students": 8282,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 8282,
"date": "2014-07-01"
}
},
{
......@@ -962,9 +875,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1990,
"num_enrolled_students": 8668,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 8668,
"date": "2014-07-01"
}
},
{
......@@ -973,9 +885,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1991,
"num_enrolled_students": 8636,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 8636,
"date": "2014-07-01"
}
},
{
......@@ -984,9 +895,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1992,
"num_enrolled_students": 8163,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 8163,
"date": "2014-07-01"
}
},
{
......@@ -995,9 +905,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1993,
"num_enrolled_students": 8067,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 8067,
"date": "2014-07-01"
}
},
{
......@@ -1006,9 +915,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1994,
"num_enrolled_students": 7312,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 7312,
"date": "2014-07-01"
}
},
{
......@@ -1017,9 +925,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1995,
"num_enrolled_students": 5801,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 5801,
"date": "2014-07-01"
}
},
{
......@@ -1028,9 +935,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1996,
"num_enrolled_students": 3955,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 3955,
"date": "2014-07-01"
}
},
{
......@@ -1039,9 +945,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1997,
"num_enrolled_students": 2780,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 2780,
"date": "2014-07-01"
}
},
{
......@@ -1050,9 +955,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1998,
"num_enrolled_students": 1815,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 1815,
"date": "2014-07-01"
}
},
{
......@@ -1061,9 +965,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 1999,
"num_enrolled_students": 978,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 978,
"date": "2014-07-01"
}
},
{
......@@ -1072,9 +975,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2000,
"num_enrolled_students": 562,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 562,
"date": "2014-07-01"
}
},
{
......@@ -1083,9 +985,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2001,
"num_enrolled_students": 217,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 217,
"date": "2014-07-01"
}
},
{
......@@ -1094,9 +995,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2002,
"num_enrolled_students": 114,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 114,
"date": "2014-07-01"
}
},
{
......@@ -1105,9 +1005,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2003,
"num_enrolled_students": 71,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 71,
"date": "2014-07-01"
}
},
{
......@@ -1116,9 +1015,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2004,
"num_enrolled_students": 30,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 30,
"date": "2014-07-01"
}
},
{
......@@ -1127,9 +1025,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2005,
"num_enrolled_students": 22,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 22,
"date": "2014-07-01"
}
},
{
......@@ -1138,9 +1035,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2006,
"num_enrolled_students": 12,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 12,
"date": "2014-07-01"
}
},
{
......@@ -1149,9 +1045,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2007,
"num_enrolled_students": 16,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 16,
"date": "2014-07-01"
}
},
{
......@@ -1160,9 +1055,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2008,
"num_enrolled_students": 13,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 13,
"date": "2014-07-01"
}
},
{
......@@ -1171,9 +1065,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2009,
"num_enrolled_students": 17,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 17,
"date": "2014-07-01"
}
},
{
......@@ -1182,9 +1075,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2010,
"num_enrolled_students": 29,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 29,
"date": "2014-07-01"
}
},
{
......@@ -1193,9 +1085,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2011,
"num_enrolled_students": 19,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 19,
"date": "2014-07-01"
}
},
{
......@@ -1204,9 +1095,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2012,
"num_enrolled_students": 67,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 67,
"date": "2014-07-01"
}
},
{
......@@ -1215,9 +1105,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2013,
"num_enrolled_students": 230,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 230,
"date": "2014-07-01"
}
},
{
......@@ -1226,9 +1115,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"birth_year": 2014,
"num_enrolled_students": 79,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 79,
"date": "2014-07-01"
}
}
]
[
{
"model": "v0.CourseEnrollmentDaily",
"pk": 1,
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"date": "2014-06-01",
"count": 100
}
},
{
"model": "v0.CourseEnrollmentDaily",
"pk": 2,
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"date": "2014-06-02",
"count": 150
}
},
{
"model": "v0.CourseEnrollmentDaily",
"pk": 3,
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"date": "2014-06-03",
"count": 300
}
}
]
......@@ -5,9 +5,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"education_level": 6,
"num_enrolled_students": 12255,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 12255,
"date": "2014-07-01"
}
},
{
......@@ -16,9 +15,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"education_level": 7,
"num_enrolled_students": 70885,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 70885,
"date": "2014-07-01"
}
},
{
......@@ -27,9 +25,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"education_level": 3,
"num_enrolled_students": 981,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 981,
"date": "2014-07-01"
}
},
{
......@@ -38,9 +35,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"education_level": 5,
"num_enrolled_students": 51591,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 51591,
"date": "2014-07-01"
}
},
{
......@@ -49,9 +45,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"education_level": 4,
"num_enrolled_students": 6051,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 6051,
"date": "2014-07-01"
}
},
{
......@@ -60,9 +55,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"education_level": 8,
"num_enrolled_students": 53216,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 53216,
"date": "2014-07-01"
}
},
{
......@@ -71,9 +65,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"education_level": 1,
"num_enrolled_students": 667,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 667,
"date": "2014-07-01"
}
},
{
......@@ -82,9 +75,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"education_level": 2,
"num_enrolled_students": 5722,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 5722,
"date": "2014-07-01"
}
},
{
......@@ -93,9 +85,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"education_level": 9,
"num_enrolled_students": 9940,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 9940,
"date": "2014-07-01"
}
}
]
......@@ -5,9 +5,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"gender": "m",
"num_enrolled_students": 133240,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 133240,
"date": "2014-07-01"
}
},
{
......@@ -16,9 +15,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"gender": "f",
"num_enrolled_students": 77495,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 77495,
"date": "2014-07-01"
}
},
{
......@@ -27,9 +25,8 @@
"fields": {
"course": ["edX/DemoX/Demo_Course"],
"gender": "o",
"num_enrolled_students": 423,
"interval_start": "2014-07-01T00:00:00Z",
"interval_end": "2014-07-02T23:59:59Z"
"count": 423,
"date": "2014-07-01"
}
}
]
......@@ -31,12 +31,20 @@ class CourseActivityByWeek(models.Model):
class BaseCourseEnrollment(models.Model):
course = models.ForeignKey(Course, null=False)
interval_start = models.DateTimeField(null=False)
interval_end = models.DateTimeField(null=False)
num_enrolled_students = models.IntegerField(null=False)
date = models.DateField(null=False)
count = models.IntegerField(null=False)
class Meta(object):
abstract = True
unique_together = [('course', 'date',)]
class CourseEnrollmentDaily(BaseCourseEnrollment):
class Meta(object):
db_table = 'course_enrollment_daily'
ordering = ('course', '-date')
unique_together = [('course', 'date',)]
get_latest_by = 'date'
class CourseEnrollmentByBirthYear(BaseCourseEnrollment):
......@@ -45,6 +53,7 @@ class CourseEnrollmentByBirthYear(BaseCourseEnrollment):
class Meta(object):
db_table = 'course_enrollment_birth_year'
ordering = ('course', 'birth_year')
unique_together = [('course', 'date', 'birth_year')]
class EducationLevel(models.Model):
......@@ -61,6 +70,7 @@ class CourseEnrollmentByEducation(BaseCourseEnrollment):
class Meta(object):
db_table = 'course_enrollment_education_level'
ordering = ('course', 'education_level')
unique_together = [('course', 'date', 'education_level')]
class CourseEnrollmentByGender(BaseCourseEnrollment):
......@@ -69,10 +79,10 @@ class CourseEnrollmentByGender(BaseCourseEnrollment):
class Meta(object):
db_table = 'course_enrollment_gender'
ordering = ('course', 'gender')
unique_together = [('course', 'date', 'gender')]
class ProblemResponseAnswerDistribution(models.Model):
""" Each row stores the count of a particular answer to a response in a problem in a course (usage). """
class Meta(object):
......
from rest_framework import serializers
from analytics_data_api.v0.models import CourseActivityByWeek, ProblemResponseAnswerDistribution
from analytics_data_api.v0.models import CourseActivityByWeek, ProblemResponseAnswerDistribution, CourseEnrollmentDaily
class CourseActivityByWeekSerializer(serializers.ModelSerializer):
class CourseIdMixin(object):
def get_course_id(self, obj):
return obj.course.course_id
class CourseActivityByWeekSerializer(serializers.ModelSerializer, CourseIdMixin):
"""
Representation of CourseActivityByWeek that excludes the id field.
......@@ -11,9 +16,6 @@ class CourseActivityByWeekSerializer(serializers.ModelSerializer):
"""
course_id = serializers.SerializerMethodField('get_course_id')
def get_course_id(self, obj):
return obj.course.course_id
class Meta(object):
model = CourseActivityByWeek
fields = ('interval_start', 'interval_end', 'activity_type', 'count', 'course_id')
......@@ -41,3 +43,15 @@ class ProblemResponseAnswerDistributionSerializer(serializers.ModelSerializer):
'variant',
'created'
)
class CourseEnrollmentDailySerializer(serializers.ModelSerializer, CourseIdMixin):
"""
Representation of course enrollment for a single day and course.
"""
course_id = serializers.SerializerMethodField('get_course_id')
class Meta(object):
model = CourseEnrollmentDaily
fields = ('course_id', 'date', 'count')
......@@ -2,7 +2,7 @@
# change for versions greater than 1.0.0. Tests target a specific version of the API, additional tests should be added
# for subsequent versions if there are breaking changes introduced in those versions.
from datetime import datetime
from datetime import datetime, date
import random
from django.core.exceptions import ObjectDoesNotExist
......@@ -11,7 +11,7 @@ from django_dynamic_fixture import G
import pytz
from analytics_data_api.v0.models import CourseEnrollmentByBirthYear, CourseEnrollmentByEducation, EducationLevel, \
CourseEnrollmentByGender, CourseActivityByWeek, Course, ProblemResponseAnswerDistribution
CourseEnrollmentByGender, CourseActivityByWeek, Course, ProblemResponseAnswerDistribution, CourseEnrollmentDaily
from analytics_data_api.v0.serializers import ProblemResponseAnswerDistributionSerializer
from analyticsdataserver.tests import TestCaseWithAuthentication
......@@ -93,9 +93,7 @@ class CourseEnrollmentViewTestCase(object):
return self._get_non_existent_course_id()
def test_get_not_found(self):
'''
Requests made against non-existent courses should return a 404
'''
""" Requests made against non-existent courses should return a 404 """
course_id = self._get_non_existent_course_id()
self.assertFalse(self.model.objects.filter(course__course_id=course_id).exists()) # pylint: disable=no-member
response = self.authenticated_get('/api/v0/courses/%s%s' % (course_id, self.path)) # pylint: disable=no-member
......@@ -120,8 +118,8 @@ class CourseEnrollmentByBirthYearViewTests(TestCaseWithAuthentication, CourseEnr
self.assertEquals(response.status_code, 200)
expected = {
self.ce1.birth_year: self.ce1.num_enrolled_students,
self.ce2.birth_year: self.ce2.num_enrolled_students,
self.ce1.birth_year: self.ce1.count,
self.ce2.birth_year: self.ce2.count,
}
actual = response.data['birth_years']
self.assertEquals(actual, expected)
......@@ -144,8 +142,8 @@ class CourseEnrollmentByEducationViewTests(TestCaseWithAuthentication, CourseEnr
self.assertEquals(response.status_code, 200)
expected = {
self.ce1.education_level.short_name: self.ce1.num_enrolled_students,
self.ce2.education_level.short_name: self.ce2.num_enrolled_students,
self.ce1.education_level.short_name: self.ce1.count,
self.ce2.education_level.short_name: self.ce2.count,
}
actual = response.data['education_levels']
self.assertEquals(actual, expected)
......@@ -166,8 +164,8 @@ class CourseEnrollmentByGenderViewTests(TestCaseWithAuthentication, CourseEnroll
self.assertEquals(response.status_code, 200)
expected = {
self.ce1.gender: self.ce1.num_enrolled_students,
self.ce2.gender: self.ce2.num_enrolled_students,
self.ce1.gender: self.ce1.count,
self.ce2.gender: self.ce2.count,
}
actual = response.data['genders']
self.assertEquals(actual, expected)
......@@ -211,3 +209,19 @@ class AnswerDistributionTests(TestCaseWithAuthentication):
def test_get_404(self):
response = self.authenticated_get('/api/v0/problems/%s%s' % ("DOES-NOT-EXIST", self.path))
self.assertEquals(response.status_code, 404)
class CourseEnrollmentLatestViewTests(TestCaseWithAuthentication, CourseEnrollmentViewTestCase):
model = CourseEnrollmentDaily
path = '/enrollment'
@classmethod
def setUpClass(cls):
cls.course = G(Course)
cls.ce = G(CourseEnrollmentDaily, course=cls.course, date=date(2014, 1, 1), count=203)
def test_get(self):
response = self.authenticated_get('/api/v0/courses/%s%s' % (self.course.course_id, self.path,))
self.assertEquals(response.status_code, 200)
expected = {'course_id': self.ce.course.course_id, 'count': self.ce.count, 'date': self.ce.date}
self.assertDictEqual(response.data, expected)
......@@ -3,11 +3,12 @@ import re
from django.conf.urls import patterns, url
from analytics_data_api.v0.views.courses import CourseActivityMostRecentWeekView, CourseEnrollmentByEducationView, \
CourseEnrollmentByBirthYearView, CourseEnrollmentByGenderView
CourseEnrollmentByBirthYearView, CourseEnrollmentByGenderView, CourseEnrollmentLatestView
COURSE_URLS = [
('recent_activity', CourseActivityMostRecentWeekView, 'recent_activity'),
('enrollment', CourseEnrollmentLatestView, 'enrollment_latest'),
('enrollment/birth_year', CourseEnrollmentByBirthYearView, 'enrollment_by_birth_year'),
('enrollment/education', CourseEnrollmentByEducationView, 'enrollment_by_education'),
('enrollment/gender', CourseEnrollmentByGenderView, 'enrollment_by_gender'),
......
from django.core.exceptions import ObjectDoesNotExist
from django.http import Http404
from rest_framework import generics
from rest_framework.generics import RetrieveAPIView
from rest_framework.response import Response
from rest_framework.views import APIView
from analytics_data_api.v0.models import CourseActivityByWeek, CourseEnrollmentByBirthYear, \
CourseEnrollmentByEducation, CourseEnrollmentByGender
from analytics_data_api.v0.serializers import CourseActivityByWeekSerializer
CourseEnrollmentByEducation, CourseEnrollmentByGender, CourseEnrollmentDaily
from analytics_data_api.v0.serializers import CourseActivityByWeekSerializer, CourseEnrollmentDailySerializer
class CourseActivityMostRecentWeekView(generics.RetrieveAPIView):
......@@ -46,7 +47,6 @@ class CourseActivityMostRecentWeekView(generics.RetrieveAPIView):
activity_type = activity_type.lower()
try:
print CourseActivityByWeek.objects.all()
return CourseActivityByWeek.get_most_recent(course_id, activity_type)
except ObjectDoesNotExist:
raise Http404
......@@ -85,7 +85,7 @@ class CourseEnrollmentByBirthYearView(AbstractCourseEnrollmentView):
def render_data(self, data):
return {
'birth_years': dict(data.values_list('birth_year', 'num_enrolled_students'))
'birth_years': dict(data.values_list('birth_year', 'count'))
}
......@@ -99,7 +99,7 @@ class CourseEnrollmentByEducationView(AbstractCourseEnrollmentView):
def render_data(self, data):
return {
'education_levels': dict(data.values_list('education_level__short_name', 'num_enrolled_students'))
'education_levels': dict(data.values_list('education_level__short_name', 'count'))
}
......@@ -118,5 +118,18 @@ class CourseEnrollmentByGenderView(AbstractCourseEnrollmentView):
def render_data(self, data):
return {
'genders': dict(data.values_list('gender', 'num_enrolled_students'))
'genders': dict(data.values_list('gender', 'count'))
}
class CourseEnrollmentLatestView(RetrieveAPIView):
""" Returns the latest enrollment count for the specified course. """
model = CourseEnrollmentDaily
serializer_class = CourseEnrollmentDailySerializer
def get_object(self, queryset=None):
try:
course_id = self.kwargs['course_id']
return CourseEnrollmentDaily.objects.filter(course__course_id=course_id).order_by('-date')[0]
except IndexError:
raise Http404
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment