Commit 97e8e4a25326ce180eacdef34247332c1fe348e8
1 parent
feaf5b50
Exists in
master
and in
2 other branches
improved code readibility as well organization, making it more readable and DRY
Showing
4 changed files
with
59 additions
and
40 deletions
Show diff stats
analytics/static/analytics/js/behavior.js
analytics/templates/analytics/category.html
analytics/urls.py
... | ... | @@ -4,6 +4,7 @@ from . import views |
4 | 4 | |
5 | 5 | urlpatterns = [ |
6 | 6 | url(r'^view/general/$', views.GeneralView.as_view(), name='view_general'), |
7 | + url(r'^view/category/data$', views.CategoryView.as_view(), name='view_category_data'), | |
7 | 8 | |
8 | 9 | #"api" callls |
9 | 10 | url(r'^most_used_tags/$', views.most_used_tags, name="most_used_tags"), | ... | ... |
analytics/views.py
... | ... | @@ -24,7 +24,7 @@ class GeneralView(generic.TemplateView): |
24 | 24 | def dispatch(self, request, *args, **kwargs): |
25 | 25 | |
26 | 26 | if not request.user.is_staff: |
27 | - self.template_name = "analytics/category.html" | |
27 | + return redirect('analytics:view_category_data') | |
28 | 28 | return super(GeneralView, self).dispatch(request, *args, **kwargs) |
29 | 29 | |
30 | 30 | |
... | ... | @@ -39,8 +39,16 @@ class GeneralView(generic.TemplateView): |
39 | 39 | |
40 | 40 | |
41 | 41 | def most_used_tags(request): |
42 | - tags = Tag.objects.all() | |
42 | + | |
43 | + | |
44 | + data = get_most_used_tags() | |
45 | + data = sorted(data.values(), key = lambda x: x['count'], reverse=True ) | |
46 | + data = data[:15] #get top 15 tags | |
47 | + return JsonResponse(data, safe= False) | |
48 | + | |
49 | +def get_most_used_tags(): | |
43 | 50 | |
51 | + tags = Tag.objects.all() | |
44 | 52 | data = {} |
45 | 53 | #grab all references to that tag |
46 | 54 | for tag in tags: |
... | ... | @@ -56,30 +64,31 @@ def most_used_tags(request): |
56 | 64 | else: |
57 | 65 | data[tag.name] = {'name': tag.name} |
58 | 66 | data[tag.name]['count'] = resources_count |
59 | - | |
60 | - data = sorted(data.values(), key = lambda x: x['count'], reverse=True ) | |
61 | - data = data[:15] #get top 30 tags | |
62 | - return JsonResponse(data, safe= False) | |
67 | + return data | |
63 | 68 | |
64 | 69 | |
65 | 70 | def most_active_users_in_a_month(request): |
66 | 71 | params = request.GET |
67 | 72 | days = get_days_of_the_month(params['month']) |
68 | - data = {} | |
69 | 73 | mappings = {_('January'): 1, _('February'): 2, _('March'): 3, _('April'): 4, _('May'): 5, _('June'): 6, _('July'): 7 |
70 | 74 | , _('August'): 8, _('September'): 9, _('October'): 10, _('November'): 11, _('December'): 12} |
71 | 75 | |
72 | - | |
76 | + days_list = [] | |
73 | 77 | for day in days: |
74 | - built_date = date(date.today().year, mappings[params['month']], day) | |
75 | - day_count = Log.objects.filter(datetime__date = built_date).count() | |
76 | - data[day] = day_count | |
77 | - | |
78 | - data = [{"day": day, "count": day_count} for day, day_count in data.items()] | |
78 | + built_date = date(date.today().year, mappings[params['month']], day) | |
79 | + days_list.append(built_date) | |
80 | + data = activity_in_timestamp(days_list) | |
81 | + data = [{"day": day.day, "count": day_count} for day, day_count in data.items()] | |
79 | 82 | return JsonResponse(data, safe=False) |
80 | 83 | |
81 | 84 | |
85 | +def activity_in_timestamp(days): | |
86 | + data = {} | |
87 | + for day in days: | |
88 | + day_count = Log.objects.filter(datetime__date = day).count() | |
89 | + data[day] = day_count | |
82 | 90 | |
91 | + return data | |
83 | 92 | """ |
84 | 93 | Subject view that returns a list of the most used subjects """ |
85 | 94 | |
... | ... | @@ -88,44 +97,45 @@ def most_accessed_subjects(request): |
88 | 97 | data = {} #empty response |
89 | 98 | |
90 | 99 | data = Log.objects.filter(resource = 'subject') |
91 | - subjects = {} | |
92 | - for datum in data: | |
93 | - if datum.context: | |
94 | - subject_id = datum.context['subject_id'] | |
95 | - if subject_id in subjects.keys(): | |
96 | - subjects[subject_id]['count'] = subjects[subject_id]['count'] + 1 | |
97 | - | |
98 | - else: | |
99 | - subjects[subject_id] = {'name': datum.context['subject_name'], 'count': 1 } | |
100 | - | |
100 | + subjects = get_log_count_of_resource(resource='subject') | |
101 | 101 | #order the values of the dictionary by the count in descendent order |
102 | 102 | subjects = sorted(subjects.values(), key = lambda x: x['count'], reverse=True ) |
103 | 103 | subjects = subjects[:5] |
104 | 104 | |
105 | 105 | return JsonResponse(subjects, safe=False) |
106 | 106 | |
107 | +def get_log_count_of_resource(resource = ''): | |
108 | + | |
109 | + data = Log.objects.filter(resource = resource) | |
110 | + items = {} | |
111 | + for datum in data: | |
112 | + if datum.context: | |
113 | + item_id = datum.context[resource + '_id'] | |
114 | + if item_id in items.keys(): | |
115 | + items[item_id]['count'] = items[item_id]['count'] + 1 | |
116 | + else: | |
117 | + items[item_id] = {'name': datum.context[resource+'_name'], 'count': 1} | |
118 | + return items | |
107 | 119 | |
108 | 120 | |
109 | 121 | def most_accessed_categories(request): |
110 | 122 | data = {} |
111 | 123 | |
112 | 124 | data = Log.objects.filter(resource = 'category') |
113 | - categories = {} | |
114 | - for datum in data: | |
115 | - if datum.context: | |
116 | - category_id = datum.context['category_id'] | |
117 | - if category_id in categories.keys(): | |
118 | - categories[category_id]['count'] = categories[category_id]['count'] + 1 | |
119 | - else: | |
120 | - categories[category_id] = {'name': datum.context['category_name'], 'count': 1 } | |
125 | + categories = get_log_count_of_resource('category') | |
126 | + | |
127 | + | |
121 | 128 | |
122 | 129 | categories = sorted(categories.values(), key = lambda x: x['count'], reverse = True) |
123 | 130 | categories = categories[:5] |
124 | 131 | return JsonResponse(categories, safe= False) |
125 | 132 | |
126 | -def most_accessed_resource_kind(request): | |
127 | - resources = Resource.objects.distinct() | |
128 | 133 | |
134 | +def get_resource_subclasses_count(): | |
135 | + """ | |
136 | + get the amount of objects in each sub_class of resource | |
137 | + """ | |
138 | + resources = Resource.objects.distinct() | |
129 | 139 | data = {} |
130 | 140 | for resource in resources: |
131 | 141 | key = resource.__dict__['_my_subclass'] |
... | ... | @@ -134,6 +144,13 @@ def most_accessed_resource_kind(request): |
134 | 144 | else: |
135 | 145 | data[key] = {'name': key, 'count': 1} |
136 | 146 | |
147 | + return data | |
148 | + | |
149 | + | |
150 | +def most_accessed_resource_kind(request): | |
151 | + | |
152 | + data = get_resource_subclasses_count() | |
153 | + | |
137 | 154 | data = sorted(data.values(), key = lambda x: x['count'], reverse= True) |
138 | 155 | mapping = {} |
139 | 156 | mapping['pdffile'] = str(_('PDF File')) |
... | ... | @@ -183,11 +200,7 @@ def get_days_of_the_week_log(request): |
183 | 200 | date = request.GET['date'] |
184 | 201 | date = datetime.strptime( date, '%m/%d/%Y',) |
185 | 202 | days = get_days_of_the_week(date) |
186 | - data = {} | |
187 | - | |
188 | - for day in days: | |
189 | - day_count = Log.objects.filter(datetime__date = day).count() | |
190 | - data[day] = day_count | |
203 | + data = activity_in_timestamp(days) | |
191 | 204 | data = [{"day": day.day, "count": day_count} for day, day_count in data.items()] |
192 | 205 | |
193 | 206 | return JsonResponse(data, safe= False) |
... | ... | @@ -198,4 +211,8 @@ def get_days_of_the_week(date): |
198 | 211 | days_set.append(date) |
199 | 212 | for j in range(1, 7): |
200 | 213 | days_set.append(date + timedelta(days=j)) |
201 | - return days_set | |
202 | 214 | \ No newline at end of file |
215 | + return days_set | |
216 | + | |
217 | + | |
218 | +class CategoryView(generic.TemplateView): | |
219 | + template_name = "analytics/category.html" | ... | ... |