Private
Public Access
1
0

processing emails from alternate address

This commit is contained in:
Sander Roosendaal
2020-10-07 19:29:17 +02:00
parent b5b2969ef8
commit 3107182310
4 changed files with 58 additions and 16 deletions

View File

@@ -235,10 +235,13 @@ class Command(BaseCommand):
rowers = [ rowers = [
r for r in Rower.objects.all() if r.user.email.lower() == from_address r for r in Rower.objects.all() if r.user.email.lower() == from_address
] ]
rowers2 = [ try:
r for r in Rower.objects.all() if from_address in r.emailalternatives rowers2 = [
] r for r in Rower.objects.all() if from_address in r.emailalternatives
rowers = rowers+rowers2 ]
rowers = rowers+rowers2
except TypeError:
pass
except IOError: except IOError:
rowers = [] rowers = []
except Message.DoesNotExist: except Message.DoesNotExist:

View File

@@ -3743,7 +3743,10 @@ class AccountRowerForm(ModelForm):
if 'coach' not in self.instance.rowerplan: if 'coach' not in self.instance.rowerplan:
self.fields.pop('offercoaching') self.fields.pop('offercoaching')
self.initial['emailalternatives'] = ', '.join(self.instance.emailalternatives) try:
self.initial['emailalternatives'] = ', '.join(self.instance.emailalternatives)
except TypeError:
pass
def clean(self): def clean(self):
cd = self.cleaned_data cd = self.cleaned_data
@@ -3751,7 +3754,6 @@ class AccountRowerForm(ModelForm):
emailalternatives = [] emailalternatives = []
for addr in z: for addr in z:
try: try:
print(addr)
validate_email(addr) validate_email(addr)
match = User.objects.filter(email__iexact=addr) match = User.objects.filter(email__iexact=addr)
if match.count() == 0: if match.count() == 0:

View File

@@ -12,9 +12,12 @@ class EmailUpload(TestCase):
self.c = Client() self.c = Client()
u = User.objects.create_user('john', u = User.objects.create_user('john',
'sander@ds.ds', 'sander@ds.ds',
'koeinsloot') 'koeinsloot',
first_name='John',
last_name='Sloot')
r = Rower.objects.create(user=u,gdproptin=True,surveydone=True, r = Rower.objects.create(user=u,gdproptin=True,surveydone=True,
gdproptindate=timezone.now() gdproptindate=timezone.now(),
emailalternatives=['sander2@ds.nl']
) )
self.theadmin = UserFactory(is_staff=True) self.theadmin = UserFactory(is_staff=True)
@@ -76,6 +79,33 @@ workout run
self.assertEqual(w.name,'test') self.assertEqual(w.name,'test')
self.assertEqual(w.notes,'aap noot mies') self.assertEqual(w.notes,'aap noot mies')
@patch('rowers.dataprep.create_engine')
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
def test_uploadapi2(self,mocked_sqlalchemy,mocked_getsmallrowdata_db):
form_data = {
'title': 'test',
'workouttype':'rower',
'boattype': '1x',
'notes': 'aap noot mies',
'make_plot': False,
'upload_to_C2': False,
'plottype': 'timeplot',
'file': 'media/mailbox_attachments/colin3.csv',
'secret': settings.UPLOAD_SERVICE_SECRET,
'useremail': 'sander2@ds.nl',
}
url = reverse('workout_upload_api')
response = self.c.post(url,form_data,HTTP_HOST='127.0.0.1:4533')
self.assertEqual(response.status_code,200)
# should also test if workout is created
w = Workout.objects.get(id=1)
self.assertEqual(w.name,'test')
self.assertEqual(w.notes,'aap noot mies')
@patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.create_engine')
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db) @patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db)
def test_uploadapi_credentials(self,mocked_sqlalchemy,mocked_getsmallrowdata_db): def test_uploadapi_credentials(self,mocked_sqlalchemy,mocked_getsmallrowdata_db):

View File

@@ -4685,21 +4685,25 @@ def workout_upload_api(request):
if rowerform.is_valid(): if rowerform.is_valid():
u = rowerform.cleaned_data['user'] u = rowerform.cleaned_data['user']
r = getrower(u) r = getrower(u)
elif 'useremail' in post_data: else:
message = {'status':'false','message':'invalid user'}
return JSONResponse(status=400,data=message)
if 'useremail' in post_data:
us = User.objects.filter(email=post_data['useremail']) us = User.objects.filter(email=post_data['useremail'])
if len(us): if len(us):
u = us[0] u = us[0]
r = getrower(u) r = getrower(u)
else: else:
rs = [r for r in Rower.objects.all() if from_address in r.emailalternatives] r = None
if len(rs): for rwr in Rower.objects.all():
r = rs[0] if post_data['useremail'] in rwr.emailalternatives:
else: r = rwr
break
if post_data['useremail'] not in r.emailalternatives:
message = {'status':'false','message':'could not find user'} message = {'status':'false','message':'could not find user'}
return JSONResponse(status=400,data=message) return JSONResponse(status=400,data=message)
else:
message = {'status':'false','message':'invalid user'}
return JSONResponse(status=400,data=message)
notes = form.cleaned_data['notes'] notes = form.cleaned_data['notes']
if optionsform.is_valid(): if optionsform.is_valid():
@@ -4716,6 +4720,9 @@ def workout_upload_api(request):
message = optionsform.errors message = optionsform.errors
return JSONResponse(status=400,data=message) return JSONResponse(status=400,data=message)
if r is None:
message = {'status':'false','message':'something went wrong'}
return JSONResponse(status=400,data=message)
id, message, f2 = dataprep.new_workout_from_file( id, message, f2 = dataprep.new_workout_from_file(
r,f2, r,f2,