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