Skip to content

Commit 9b7cda7

Browse files
committed
Added TigaUser.update_score
1 parent 89fab90 commit 9b7cda7

File tree

7 files changed

+109
-257
lines changed

7 files changed

+109
-257
lines changed

requirements/prod_20_04.pip

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ MarkupSafe==1.1.1
6161
matplotlib==2.0.2
6262
msgpack==1.0.2
6363
numpy==1.23.1
64+
numpyencoder==0.3.0
6465
odfpy==1.4.0
6566
openapi-codec==1.3.2
6667
openpyxl==3.0.0

stats/views.py

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,11 @@
1919
import json
2020
import datetime
2121
from django.utils import timezone
22-
from tigascoring.xp_scoring import compute_user_score_in_xp_v2
2322
from rest_framework.exceptions import ParseError
2423
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
2524
import math
2625
from django.utils import translation
2726

28-
from tigascoring.xp_scoring import compute_user_score_in_xp_v2
2927
from rest_framework.exceptions import ParseError
3028
from django.core.paginator import Paginator
3129
import math
@@ -642,13 +640,8 @@ def stats_user_score(request, user_uuid=None):
642640
pass
643641

644642
if user.score_v2_struct is None:
645-
user_score = compute_user_score_in_xp_v2(user_uuid, update=True)
646-
user.score_v2_struct = json.dumps(user_score, indent=2, sort_keys=True, default=str)
647-
user.last_score_update = datetime.datetime.now()
648-
user.save()
649-
else:
650-
user_score = json.loads(user.score_v2_struct)
651-
context = { "score_data": user_score, "score_last_update": user.last_score_update }
643+
user.update_score(commit=True)
644+
context = { "score_data": user.score_v2_struct, "score_last_update": user.last_score_update }
652645
return render(request, 'stats/user_score.html', context)
653646

654647

@@ -680,17 +673,11 @@ def stats_user_ranking(request, page=1, user_uuid=None):
680673
try:
681674
user = TigaUser.objects.get(pk=user_uuid)
682675
user.get_identicon()
683-
#user_score = compute_user_score_in_xp_v2(user_uuid, update=True)
684-
if user.score_v2_struct is None:
685-
user_score = compute_user_score_in_xp_v2(user_uuid, update=True)
686-
user.score_v2_struct = json.dumps(user_score, indent=2, sort_keys=True, default=str)
687-
user.last_score_update = datetime.datetime.now()
688-
user.save()
689-
else:
690-
user_score = json.loads( user.score_v2_struct )
691-
if user_score['total_score'] > 0:
692-
user_has_score = True
693676

677+
if user.score_v2_struct is None:
678+
user.update_score(commit=True)
679+
user_score = user.score_v2_struct
680+
user_has_score = bool(user.score_v2)
694681
except TigaUser.DoesNotExist:
695682
pass
696683
seek = request.GET.get('seek', 'f')
@@ -1046,13 +1033,9 @@ def get_user_xp_data(request):
10461033
translation.activate(locale)
10471034

10481035
if u.score_v2_struct is None:
1049-
retval = compute_user_score_in_xp_v2(user_id, update=True)
1050-
u.score_v2_struct = json.dumps(retval, indent=2, sort_keys=True, default=str)
1051-
u.last_score_update = datetime.datetime.now()
1052-
u.save()
1053-
else:
1054-
retval = json.loads(u.score_v2_struct)
1036+
u.update_score(commit=True)
10551037

1038+
retval = u.score_v2_struct
10561039
retval['last_update'] = u.last_score_update
10571040

10581041
return Response(retval)

tigascoring/xp_scoring.py

Lines changed: 10 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from tigaserver_app.models import Report, TigaUser, TigaProfile, Award
1+
from tigaserver_app.models import Report, TigaUser, Award
22
from tigaserver_project import settings as conf
33
import pandas as pd
44
import datetime
@@ -324,106 +324,17 @@ def get_unrelated_awards_score( user_uuid, user_uuids ):
324324
# return str(diff.days) + _(" days ago")
325325

326326

327-
def compute_user_score_in_xp_v2_fast(user_uuid):
327+
def compute_user_score_in_xp_v2(user_uuid):
328328

329329
user = TigaUser.objects.get(pk=user_uuid)
330330
user_uuids = None
331331
if user.profile is not None:
332332
user_uuids = TigaUser.objects.filter(profile=user.profile).values('user_UUID')
333333

334-
result = {}
335-
result['total_score'] = 0
336-
result['user_uuid'] = user_uuid
337-
result['score_detail'] = {}
338-
339-
if user_uuids is None:
340-
user_reports = Report.objects.filter(user__user_UUID=user_uuid).order_by('-creation_time')
341-
else:
342-
user_reports = Report.objects.filter(user__user_UUID__in=user_uuids).order_by('-creation_time')
343-
344-
adults = user_reports.filter(type='adult')
345-
#bites = user_reports.filter(type='bite')
346-
sites = user_reports.filter(type='site')
347-
348-
adult_last_versions = adults.non_deleted().all()
349-
#bite_last_versions = bites.non_deleted().all()
350-
site_last_versions = sites.non_deleted().all()
351-
352-
results_adult = {}
353-
results_adult['score'] = 0
354-
results_adult['score_items'] = []
355-
result['score_detail']['adult'] = results_adult
356-
357-
adult_score = 0
358-
for report in adult_last_versions:
359-
result = get_adult_report_score(report, result)
360-
index = len(result['score_detail']['adult']['score_items']) - 1
361-
result['score_detail']['adult']['score'] += result['score_detail']['adult']['score_items'][index][
362-
'report_score']
363-
adult_score += result['score_detail']['adult']['score_items'][index]['report_score']
364-
result['total_score'] += adult_score
365-
366-
'''
367-
results_bite = {}
368-
results_bite['score'] = 0
369-
results_bite['score_items'] = []
370-
result['score_detail']['bite'] = results_bite
371-
372-
bite_score = 0
373-
for report in bite_last_versions:
374-
result = get_bite_report_score(report, result)
375-
index = len(result['score_detail']['bite']['score_items']) - 1
376-
result['score_detail']['bite']['score'] += result['score_detail']['bite']['score_items'][index]['report_score']
377-
bite_score += result['score_detail']['bite']['score_items'][index]['report_score']
378-
result['total_score'] += bite_score
379-
'''
380-
381-
results_site = {}
382-
results_site['score'] = 0
383-
results_site['score_items'] = []
384-
result['score_detail']['site'] = results_site
385-
386-
site_score = 0
387-
for report in site_last_versions:
388-
result = get_site_report_score(report, result)
389-
index = len(result['score_detail']['site']['score_items']) - 1
390-
result['score_detail']['site']['score'] += result['score_detail']['site']['score_items'][index]['report_score']
391-
site_score += result['score_detail']['site']['score_items'][index]['report_score']
392-
result['total_score'] += site_score
393-
394-
unrelated_score = get_unrelated_awards_score(user_uuid, user_uuids)
395-
396-
result['total_score'] += unrelated_score['score']
397-
398-
return result
399-
400-
401-
def get_uuid_replicas():
402-
profiles = TigaProfile.objects.all()
403-
exclude = []
404-
for p in profiles:
405-
if p.profile_devices.count() > 1:
406-
i = 0
407-
for d in p.profile_devices.all().order_by('user_UUID'):
408-
if i > 0:
409-
exclude.append(d.user_UUID)
410-
i+=1
411-
return exclude
412-
413-
414-
def compute_user_score_in_xp_v2(user_uuid, update=False):
415-
416-
user = TigaUser.objects.get(pk=user_uuid)
417-
user_uuids = None
418-
if user.profile is not None:
419-
user_uuids = TigaUser.objects.filter(profile=user.profile).values('user_UUID')
420-
421-
uuid_replicas = get_uuid_replicas()
422-
423-
qs_overall = TigaUser.objects.exclude(score_v2=0).exclude(user_UUID__in=uuid_replicas)
424-
qs_adult = TigaUser.objects.exclude(score_v2_adult=0).exclude(user_UUID__in=uuid_replicas)
425-
qs_site = TigaUser.objects.exclude(score_v2_site=0).exclude(user_UUID__in=uuid_replicas)
426-
#qs_bite = TigaUser.objects.exclude(score_v2_bite=0).exclude(user_UUID__in=uuid_replicas)
334+
qs_overall = TigaUser.objects.exclude(score_v2=0)
335+
qs_adult = TigaUser.objects.exclude(score_v2_adult=0)
336+
qs_site = TigaUser.objects.exclude(score_v2_site=0)
337+
#qs_bite = TigaUser.objects.exclude(score_v2_bite=0)
427338

428339
overall_df = pd.DataFrame(list(qs_overall.values_list('score_v2', 'user_UUID')), columns=['score_v2', 'user_UUID'])
429340
adult_df = pd.DataFrame(list(qs_adult.values_list('score_v2_adult', 'user_UUID')), columns=['score_v2_adult', 'user_UUID'])
@@ -461,12 +372,7 @@ def compute_user_score_in_xp_v2(user_uuid, update=False):
461372
#rank_value_bite = get_user_rank_value(bite_sorted_df, user_uuid)
462373
#min_max_bite = get_min_max(bite_sorted_df, 'score_v2_bite')
463374

464-
current_date = datetime.date.today()
465-
if user is not None:
466-
result['joined_value'] = user.registration_time.strftime("%d/%m/%Y")
467-
#result['joined_label'] = get_elapsed_label(current_date, user.registration_time.date())
468-
else:
469-
result['joined_value'] = None
375+
result['joined_value'] = user.registration_time.strftime("%d/%m/%Y")
470376

471377
if user_uuids is None:
472378
user_reports = Report.objects.filter(user__user_UUID=user_uuid).order_by('-creation_time')
@@ -494,7 +400,7 @@ def compute_user_score_in_xp_v2(user_uuid, update=False):
494400
result['score_detail']['adult'] = results_adult
495401

496402
adult_score = 0
497-
for report in adult_last_versions:
403+
for report in adult_last_versions.iterator():
498404
result = get_adult_report_score(report, result)
499405
index = len(result['score_detail']['adult']['score_items']) - 1
500406
result['score_detail']['adult']['score'] += result['score_detail']['adult']['score_items'][index]['report_score']
@@ -508,7 +414,7 @@ def compute_user_score_in_xp_v2(user_uuid, update=False):
508414

509415
'''
510416
bite_score = 0
511-
for report in bite_last_versions:
417+
for report in bite_last_versions.iterator():
512418
result = get_bite_report_score(report, result)
513419
index = len(result['score_detail']['bite']['score_items']) - 1
514420
result['score_detail']['bite']['score'] += result['score_detail']['bite']['score_items'][index]['report_score']
@@ -522,7 +428,7 @@ def compute_user_score_in_xp_v2(user_uuid, update=False):
522428
result['score_detail']['site'] = results_site
523429

524430
site_score = 0
525-
for report in site_last_versions:
431+
for report in site_last_versions.iterator():
526432
result = get_site_report_score(report, result)
527433
index = len(result['score_detail']['site']['score_items']) - 1
528434
result['score_detail']['site']['score'] += result['score_detail']['site']['score_items'][index]['report_score']
@@ -587,18 +493,6 @@ def compute_user_score_in_xp_v2(user_uuid, update=False):
587493
result['score_detail']['site']['top_perc'] = (float(site_number_below_rank) / float(site_number_total)) * 100.0
588494
result['score_detail']['site']['ranked_users'] = site_number_total
589495

590-
if update:
591-
if user_uuids is not None:
592-
all_users_in_profile = TigaUser.objects.filter(user_UUID__in=user_uuids)
593-
all_users_in_profile.update(score_v2=result['total_score'])
594-
all_users_in_profile.update(score_v2_adult=result['score_detail']['adult']['score'])
595-
all_users_in_profile.update(score_v2_site=result['score_detail']['site']['score'])
596-
else:
597-
user.score_v2 = result['total_score']
598-
user.score_v2_adult = result['score_detail']['adult']['score']
599-
user.score_v2_site = result['score_detail']['site']['score']
600-
user.save()
601-
602496
'''
603497
if bite_number_below_rank == 0 and bite_number_total == 0:
604498
result['score_detail']['bite']['top_perc'] = 100.0
@@ -610,14 +504,6 @@ def compute_user_score_in_xp_v2(user_uuid, update=False):
610504
return result
611505

612506

613-
def compute_all_user_scores():
614-
all_users = TigaUser.objects.all()
615-
for user in all_users:
616-
score = compute_user_score_in_xp_v2( user.user_UUID )
617-
user.score_v2 = score
618-
user.save()
619-
620-
621507
def get_all_user_reports(user_uuid):
622508
user = TigaUser.objects.get(pk=user_uuid)
623509
user_uuids = None
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 2.2.7 on 2024-03-15 11:50
2+
3+
import django.contrib.postgres.fields.jsonb
4+
from django.db import migrations
5+
import numpyencoder.numpyencoder
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('tigaserver_app', '0052_ensure_masked_fixes'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='tigauser',
16+
name='score_v2_struct',
17+
field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, encoder=numpyencoder.numpyencoder.NumpyEncoder, help_text='Full cached score data', null=True),
18+
),
19+
]

0 commit comments

Comments
 (0)