diff --git a/rowers/management/commands/autojoin.py b/rowers/management/commands/autojoin.py index 107e8305..7f5c224d 100644 --- a/rowers/management/commands/autojoin.py +++ b/rowers/management/commands/autojoin.py @@ -7,20 +7,22 @@ import arrow from django.utils import timezone from django.core.management.base import BaseCommand -from rowers.models import Rower,Workout +from rowers.models import Rower, Workout import re from django.db.models import Q from rowers.dataprep import join_workouts + def name_short(name): expr = '(.*)\s.*\(\d+\)' - match = re.findall(expr,name) + match = re.findall(expr, name) if match: return match[0] return name + def get_duplicates(a): seen = {} dupes = [] @@ -38,28 +40,25 @@ def get_duplicates(a): class Command(BaseCommand): def handle(self, *args, **options): - rs = (r for r in Rower.objects.all() if r.ispaid and r.autojoin) - now = timezone.now() + rs = (r for r in Rower.objects.all() if r.ispaid and r.autojoin) for r in rs: workouts = Workout.objects.filter(user=r, duplicate=False, startdatetime__gte=timezone.now()-datetime.timedelta(days=2)) - duplicates = get_duplicates(name_short(w.name) for w in workouts) for name, count in duplicates.items(): if count > 1: workouts2 = workouts.filter( - Q(name__contains=name) - ) + Q(name__contains=name)) duplicates2 = get_duplicates(w.date for w in workouts) for dd, count in duplicates2.items(): if count > 1: workouts3 = workouts2.filter(date=dd) ids = [w.id for w in workouts3] - id, message = join_workouts(r,ids,title=name, + id, message = join_workouts(r, ids, title=name, parent=workouts3[0], killparents=True) diff --git a/rowers/management/commands/getemail_list.py b/rowers/management/commands/getemail_list.py index 8e538392..775d1b97 100644 --- a/rowers/management/commands/getemail_list.py +++ b/rowers/management/commands/getemail_list.py @@ -1,15 +1,9 @@ -#!/srv/venv/bin/python import sys import os -# If you find a solution that does not need the two paths, please comment! -sys.path.append('$path_to_root_of_project$') -sys.path.append('$path_to_root_of_project$/$project_name$') - -os.environ['DJANGO_SETTINGS_MODULE'] = '$project_name$.settings' from django.core.management.base import BaseCommand, CommandError from django.conf import settings -from django.core.mail import send_mail, BadHeaderError,EmailMessage +from django.core.mail import send_mail, BadHeaderError, EmailMessage import datetime from rowers.models import * @@ -17,6 +11,12 @@ from rowsandall_app.settings import BASE_DIR import pandas as pd +sys.path.append('$path_to_root_of_project$') +sys.path.append('$path_to_root_of_project$/$project_name$') + +os.environ['DJANGO_SETTINGS_MODULE'] = '$project_name$.settings' + + def getemails(): rs = Rower.objects.all() firstnames = [r.user.first_name for r in rs] @@ -24,33 +24,32 @@ def getemails(): emails = [r.user.email for r in rs] is_actives = [r.user.is_active for r in rs] df = pd.DataFrame({ - 'first_name':firstnames, - 'last_name':lastnames, - 'email':emails, - 'is_active':is_actives - }) + 'first_name': firstnames, + 'last_name': lastnames, + 'email': emails, + 'is_active': is_actives}) return df - class Command(BaseCommand): def handle(self, *args, **options): email_list = getemails() - email_list.to_csv('email_list.csv',encoding='utf-8') - + email_list.to_csv('email_list.csv', encoding='utf-8') + fullemail = 'roosendaalsander@gmail.com' subject = "Rowsandall users list" message = "Dear Sander,\n\n" message += "Best Regards, the Rowsandall Team" message += "Users list attached \n\n" - - email = EmailMessage(subject, message, - 'Rowsandall ', - [fullemail]) - + + email = EmailMessage( + subject, message, + 'Rowsandall ', + [fullemail]) + email.attach_file('email_list.csv') - + os.remove('email_list.csv') - - res = email.send() + + _ = email.send() diff --git a/rowers/management/commands/getexpired.py b/rowers/management/commands/getexpired.py index 308878eb..8aef0b9e 100644 --- a/rowers/management/commands/getexpired.py +++ b/rowers/management/commands/getexpired.py @@ -16,16 +16,16 @@ os.environ['DJANGO_SETTINGS_MODULE'] = '$project_name$.settings' def getexpired(): - rs = Rower.objects.all() - lijst = [] - for r in rs: - if r.planexpires < datetime.datetime.now().date(): - if r.rowerplan == 'pro' or r.rowerplan == 'coach' or r.rowerplan == 'plan': - lijst.append(r) - if r.teamplanexpires < datetime.datetime.now().date(): - if r.rowerplan == 'pro' or r.rowerplan == 'coach' or r.rowerplan == 'plan': - lijst.append(r) - return lijst + rs = Rower.objects.all() + lijst = [] + for r in rs: + if r.planexpires < datetime.datetime.now().date(): + if r.rowerplan == 'pro' or r.rowerplan == 'coach' or r.rowerplan == 'plan': + lijst.append(r) + if r.teamplanexpires < datetime.datetime.now().date(): + if r.rowerplan == 'pro' or r.rowerplan == 'coach' or r.rowerplan == 'plan': + lijst.append(r) + return lijst class Command(BaseCommand): diff --git a/rowers/management/commands/processemail.py b/rowers/management/commands/processemail.py index 73ef5f40..f12a89ff 100644 --- a/rowers/management/commands/processemail.py +++ b/rowers/management/commands/processemail.py @@ -1,9 +1,6 @@ -#!/srv/venv/bin/python - """ Process emails """ import sys import os -PY3K = sys.version_info >= (3, 0) import zipfile from zipfile import BadZipFile @@ -18,12 +15,12 @@ import json import io from django.core.management.base import BaseCommand -#from django_mailbox.models import Message, MessageAttachment,Mailbox + from django.urls import reverse from django.conf import settings from django.utils import timezone -from rowers.models import Workout, Rower +from rowers.models import User, Workout, Rower from rowingdata import rower as rrower from rowingdata import rowingdata as rrdata @@ -37,7 +34,6 @@ import rowers.stravastuff as stravastuff import rowers.nkstuff as nkstuff from rowers.opaque import encoder -from rowers.models import User,Workout from rowers.rower_rules import user_is_not_basic from rowers.utils import dologging @@ -47,10 +43,14 @@ sys.path.append('$path_to_root_of_project$/$project_name$') os.environ['DJANGO_SETTINGS_MODULE'] = '$project_name$.settings' -if not getattr(__builtins__, "WindowsError", None): - class WindowsError(OSError): pass +PY3K = sys.version_info >= (3, 0) -def rdata(file_obj, rower=rrower()): # pragma: no cover +if not getattr(__builtins__, "WindowsError", None): + class WindowsError(OSError): + pass + + +def rdata(file_obj, rower=rrower()): # pragma: no cover """ Read rowing data file and return 0 if file doesn't exist""" try: result = rrdata(file_obj, rower=rower) @@ -60,7 +60,6 @@ def rdata(file_obj, rower=rrower()): # pragma: no cover return result - class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument( @@ -68,71 +67,57 @@ class Command(BaseCommand): action='store_true', dest='testing', default=False, - help="Run in testing mode, don't send emails", - ) + help="Run in testing mode, don't send emails", ) parser.add_argument( '--mailbox', action='store_true', dest='mailbox', default='workouts', - help="Changing mailbox name", - ) + help="Changing mailbox name", ) """Run the Email processing command """ def handle(self, *args, **options): - if 'testing' in options: - testing = options['testing'] - else: # pragma: no cover - testing = False - # Polar try: polar_available = polarstuff.get_polar_notifications() - res = polarstuff.get_all_new_workouts(polar_available) - except: # pragma: no cover + _ = polarstuff.get_all_new_workouts(polar_available) + except: # pragma: no cover exc_type, exc_value, exc_traceback = sys.exc_info() lines = traceback.format_exception(exc_type, exc_value, exc_traceback) - dologging('processemail.log',''.join('!! ' + line for line in lines)) + dologging('processemail.log', ''.join('!! ' + line for line in lines)) # Concept2 try: rowers = Rower.objects.filter(c2_auto_import=True) - for r in rowers: # pragma: no cover + for r in rowers: # pragma: no cover if user_is_not_basic(r.user): c2stuff.get_c2_workouts(r) - except: # pragma: no cover + except: # pragma: no cover exc_type, exc_value, exc_traceback = sys.exc_info() lines = traceback.format_exception(exc_type, exc_value, exc_traceback) - dologging('processemail.log',''.join('!! ' + line for line in lines)) - + dologging('processemail.log', ''.join('!! ' + line for line in lines)) try: rowers = Rower.objects.filter(rp3_auto_import=True) - for r in rowers: # pragma: no cover + for r in rowers: # pragma: no cover if user_is_not_basic(r.user): - res = rp3stuff.get_rp3_workouts(r) - except: # pragma: no cover + _ = rp3stuff.get_rp3_workouts(r) + except: # pragma: no cover exc_type, exc_value, exc_traceback = sys.exc_info() lines = traceback.format_exception(exc_type, exc_value, exc_traceback) - dologging('processemail.log',''.join('!! ' + line for line in lines)) + dologging('processemail.log', ''.join('!! ' + line for line in lines)) try: rowers = Rower.objects.filter(nk_auto_import=True) - for r in rowers: # pragma: no cover + for r in rowers: # pragma: no cover if user_is_not_basic(r.user): s = 'Starting NK Auto Import for user {id}'.format(id=r.user.id) - dologging('nklog.log',s) - res = nkstuff.get_nk_workouts(r) - except: # pragma: no cover + dologging('nklog.log', s) + _ = nkstuff.get_nk_workouts(r) + except: # pragma: no cover exc_type, exc_value, exc_traceback = sys.exc_info() lines = traceback.format_exception(exc_type, exc_value, exc_traceback) - dologging('processemail.log',''.join('!! ' + line for line in lines)) - - # Strava - #rowers = Rower.objects.filter(strava_auto_import=True) - #for r in rowers: - # if user_is_not_basic(r.user): # pragma: no cover - # stravastuff.get_strava_workouts(r) + dologging('processemail.log', ''.join('!! ' + line for line in lines)) self.stdout.write(self.style.SUCCESS( 'Successfully processed email attachments'))