Commit 97e8e4a25326ce180eacdef34247332c1fe348e8

Authored by Felipe Bormann
1 parent feaf5b50

improved code readibility as well organization, making it more readable and DRY

analytics/static/analytics/js/behavior.js
... ... @@ -24,6 +24,7 @@ $(document).ready(function(){
24 24 });
25 25  
26 26  
  27 +
27 28  
28 29 });
29 30  
... ...
analytics/templates/analytics/category.html
... ... @@ -21,5 +21,5 @@
21 21  
22 22  
23 23 {% block content %}
24   - test
  24 +
25 25 {% endblock content %}
26 26 \ No newline at end of file
... ...
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"
... ...