Fix a bunch of PEP8 violations
This commit is contained in:
+39
-30
@@ -4,6 +4,7 @@ from datetime import datetime
|
||||
from io import StringIO
|
||||
import csv
|
||||
|
||||
|
||||
class Member(models.Model):
|
||||
'''
|
||||
Member model represets one member on the registry
|
||||
@@ -12,7 +13,7 @@ class Member(models.Model):
|
||||
first_name = models.CharField(max_length=127)
|
||||
last_name = models.CharField(max_length=127)
|
||||
email = models.EmailField()
|
||||
POR = models.CharField(max_length=255) # place of residence
|
||||
POR = models.CharField(max_length=255) # place of residence
|
||||
AYY = models.BooleanField(default=False)
|
||||
jas = models.BooleanField(default=False)
|
||||
created = models.DateTimeField(default=timezone.now)
|
||||
@@ -20,59 +21,64 @@ class Member(models.Model):
|
||||
|
||||
def get_dict(self):
|
||||
return {
|
||||
'id':self.id,
|
||||
'first_name':self.first_name,
|
||||
'last_name':self.last_name,
|
||||
'email':self.email,
|
||||
'POR':self.POR,
|
||||
'AYY':self.AYY,
|
||||
'jas':self.jas,
|
||||
'created':date2str(self.created),
|
||||
'paid':date2str(self.paid),
|
||||
'id': self.id,
|
||||
'first_name': self.first_name,
|
||||
'last_name': self.last_name,
|
||||
'email': self.email,
|
||||
'POR': self.POR,
|
||||
'AYY': self.AYY,
|
||||
'jas': self.jas,
|
||||
'created': date2str(self.created),
|
||||
'paid': date2str(self.paid),
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def create_from_dict(cls,d):
|
||||
def create_from_dict(cls, d):
|
||||
mbr = cls()
|
||||
mbr.update_from_dict(d)
|
||||
return mbr
|
||||
|
||||
def update_from_dict(self,d):
|
||||
def update_from_dict(self, d):
|
||||
dmap = {
|
||||
'first_name': reverseMap('first_name'),
|
||||
'last_name': reverseMap('last_name'),
|
||||
'email': reverseMap('email'),
|
||||
'POR': reverseMap('POR'),
|
||||
'AYY': reverseMap('AYY'),
|
||||
'jas': reverseMap('jas'),
|
||||
'paid': reverseMap('paid',str2date),
|
||||
'first_name': reverse_map('first_name'),
|
||||
'last_name': reverse_map('last_name'),
|
||||
'email': reverse_map('email'),
|
||||
'POR': reverse_map('POR'),
|
||||
'AYY': reverse_map('AYY'),
|
||||
'jas': reverse_map('jas'),
|
||||
'paid': reverse_map('paid', str2date),
|
||||
}
|
||||
for k,v in d.items():
|
||||
for k, v in d.items():
|
||||
try:
|
||||
self.__setattr__(dmap[k].key,dmap[k].parser(v))
|
||||
self.__setattr__(dmap[k].key, dmap[k].parser(v))
|
||||
except KeyError:
|
||||
pass
|
||||
self.save()
|
||||
|
||||
@classmethod
|
||||
def import_csv(cls, csv_string):
|
||||
reader = csv.reader(StringIO(csv_string.strip()))
|
||||
response = {"status": "success", "errors": []};
|
||||
response = {"status": "success", "errors": []}
|
||||
try:
|
||||
data = list(reader)
|
||||
except ValueError:
|
||||
return {"status": "failure", "errors": ["could not parse csv file"]}
|
||||
|
||||
affirmative_answers = ['yes', 'y', '1', 'true', "kyllä", "khyl"]
|
||||
for row in data:
|
||||
|
||||
try:
|
||||
obj = cls.objects.create(
|
||||
first_name=row[0],
|
||||
last_name=row[1],
|
||||
email=row[2],
|
||||
POR=row[3],
|
||||
AYY=row[4].lower() in ['yes','y','1','true',"kyllä", "khyl"],
|
||||
jas=row[5].lower() in ['yes','y','1','true',"kyllä", "khyl"],
|
||||
paid = timezone.now()
|
||||
AYY=row[4].lower() in affirmative_answers,
|
||||
jas=row[5].lower() in affirmative_answers,
|
||||
paid=timezone.now()
|
||||
)
|
||||
print("added obj {}".format(obj))
|
||||
|
||||
except:
|
||||
response["status"] = "failure"
|
||||
response["errors"].append("failure adding item {}".format(", ".join(row)))
|
||||
@@ -82,15 +88,17 @@ class Member(models.Model):
|
||||
def __str__(self):
|
||||
return "{} {}".format(self.first_name, self.last_name)
|
||||
|
||||
|
||||
class MemberRequest(models.Model):
|
||||
member = models.ForeignKey(Member)
|
||||
|
||||
def get_dict(self):
|
||||
return {
|
||||
'id': self.id,
|
||||
'member': self.member.get_dict(),
|
||||
'id': self.id,
|
||||
'member': self.member.get_dict(),
|
||||
}
|
||||
|
||||
|
||||
def date2str(date):
|
||||
'''
|
||||
Convert date to a standard date string
|
||||
@@ -99,11 +107,12 @@ def date2str(date):
|
||||
return None
|
||||
return date.strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
|
||||
def str2date(s):
|
||||
return datetime.strptime(s,"%Y-%m-%d %H:%M:%S")
|
||||
|
||||
class reverseMap:
|
||||
def __init__(self, key, parser=lambda x:x):
|
||||
|
||||
class reverse_map:
|
||||
def __init__(self, key, parser=lambda x: x):
|
||||
self.key = key
|
||||
self.parser = parser
|
||||
|
||||
|
||||
+52
-32
@@ -11,13 +11,13 @@ import requests
|
||||
from django.conf import settings
|
||||
import logging
|
||||
|
||||
#Logger function, you can use the same idea when implementing other loggers to other apps
|
||||
# Logger function, you can use the same idea when implementing other loggers to other apps
|
||||
memberlogger = logging.getLogger(__name__)
|
||||
logging.basicConfig(format='[%(levelname)s]%(asctime)s %(message)s', level=settings.LOGGERLEVEL, filename=settings.LOGPATH)
|
||||
|
||||
|
||||
#function to validate reCaptcha
|
||||
def validateReCaptcha(response):
|
||||
# function to validate reCaptcha
|
||||
def validate_recaptcha(response):
|
||||
values = {
|
||||
'secret': settings.GOOGLE_RECAPTCHA_SECRET_KEY,
|
||||
'response': response,
|
||||
@@ -31,43 +31,49 @@ def validateReCaptcha(response):
|
||||
return False
|
||||
return True
|
||||
|
||||
#def sendmail(subject, message):
|
||||
#send_mail(
|
||||
# subject,
|
||||
# message,
|
||||
# 'no-reply@sahkoinsinoorikilta.fi',
|
||||
# ['viestintamestari@sahkoinsinoorikilta.fi'],
|
||||
# fail_silently=False
|
||||
#)
|
||||
|
||||
def send_mail_wrapper(subject, message):
|
||||
send_mail(
|
||||
subject,
|
||||
message,
|
||||
'no-reply@sahkoinsinoorikilta.fi',
|
||||
['viestintamestari@sahkoinsinoorikilta.fi'],
|
||||
fail_silently=False
|
||||
)
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["GET"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def index(request, *args, **kwargs):
|
||||
return render(request, 'members_index.html',{})
|
||||
return render(request, 'members_index.html', {})
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
def applicationindex(request, *args, **kwargs):
|
||||
return render(request, 'application_index.html',{})
|
||||
def application_index(request, *args, **kwargs):
|
||||
return render(request, 'application_index.html', {})
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
def applicationSuccessIndex(request, *args, **kwargs):
|
||||
return render(request, 'application_success.html',{})
|
||||
def application_success_index(request, *args, **kwargs):
|
||||
return render(request, 'application_success.html', {})
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["GET"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def members(request, *args, **kwargs):
|
||||
mems = list(map(lambda m: m.get_dict(),Member.objects.all()))
|
||||
mems = list(map(lambda m: m.get_dict(), Member.objects.all()))
|
||||
return HttpResponse(json.dumps(mems))
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["GET", "POST", "DELETE","PUT"])
|
||||
@require_http_methods(["GET", "POST", "DELETE", "PUT"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def member(request,*args, **kwargs):
|
||||
def member(request, *args, **kwargs):
|
||||
|
||||
# get, put and delete together since all operate on existing objects
|
||||
if request.method in ['GET','PUT', 'DELETE']:
|
||||
if request.method in ['GET', 'PUT', 'DELETE']:
|
||||
|
||||
# get object by id or give 404
|
||||
idx = kwargs.pop("idx", None)
|
||||
@@ -106,6 +112,7 @@ def member(request,*args, **kwargs):
|
||||
except ValueError:
|
||||
return HttpResponseBadRequest('{"error" : "Invalid parameters supplied"}')
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["POST"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
@@ -117,11 +124,12 @@ def csv_import(request, *args, **kwargs):
|
||||
resp.status_code = 400
|
||||
return resp
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["GET"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def member_requests(request, *args, **kwargs):
|
||||
reqs = list(map(lambda r: r.get_dict(),MemberRequest.objects.all()))
|
||||
reqs = list(map(lambda r: r.get_dict(), MemberRequest.objects.all()))
|
||||
return HttpResponse(json.dumps(reqs))
|
||||
|
||||
|
||||
@@ -129,16 +137,18 @@ def member_requests(request, *args, **kwargs):
|
||||
def new_member_request(request, *args, **kwargs):
|
||||
try:
|
||||
data = json.loads(request.body.decode("utf-8"))
|
||||
#get captcha response from member
|
||||
# get captcha response from member
|
||||
captcha = data.pop("reCaptchaResponse", "")
|
||||
#send response to google and check it out
|
||||
captcha_ok = validateReCaptcha(captcha)
|
||||
#if not ok, inform user
|
||||
# send response to google and check it out
|
||||
captcha_ok = validate_recaptcha(captcha)
|
||||
# if not ok, inform user
|
||||
if not captcha_ok:
|
||||
return HttpResponseBadRequest('{"error" : "Captcha not ok. Please try again."}')
|
||||
#if ok continue
|
||||
return HttpResponseBadRequest('{"error": "Captcha not ok. Please try again."}')
|
||||
# if ok continue
|
||||
mem = Member.create_from_dict(data)
|
||||
req = MemberRequest.objects.create(member=mem)
|
||||
|
||||
# Build the email body
|
||||
subject = 'New application'
|
||||
message = 'You have new application\r\n'
|
||||
message += 'Member info:\r\n'
|
||||
@@ -150,13 +160,18 @@ def new_member_request(request, *args, **kwargs):
|
||||
message += 'To mail list: ' + str(mem.jas) + '\r\n'
|
||||
message += 'Created: ' + mem.created.isoformat(' ') + '\r\n'
|
||||
message += 'Please go to the http://sika.sahkoinsinoorikilta.fi/members/ and do something about it!\r\n'
|
||||
#sendmail(subject, message)
|
||||
|
||||
# TODO: send mail when application is ready
|
||||
# send_mail_wrapper(subject, message)
|
||||
|
||||
return HttpResponse(json.dumps(mem.get_dict()))
|
||||
|
||||
except ValueError:
|
||||
return HttpResponseBadRequest('{"error" : "Invalid parameters supplied"}')
|
||||
except TimeoutError:
|
||||
return HttpResponseBadRequest('{"error" : "Much error, no connection"}')
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["GET", "POST", "DELETE"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
@@ -171,23 +186,28 @@ def handle_mem_request(request, idx, *args, **kwargs):
|
||||
return HttpResponse(json.dumps(req.get_dict()))
|
||||
elif request.method == 'DELETE':
|
||||
req.member.delete()
|
||||
else: # method == POST because other aren't allowed here
|
||||
else: # method == POST because other aren't allowed here
|
||||
req.delete()
|
||||
return HttpResponse('{"status":"success"}')
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["GET"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def export_csv(request, *args, **kwargs):
|
||||
import csv
|
||||
|
||||
response = HttpResponse()
|
||||
response['Content-type'] = 'text/csv'
|
||||
response['Accept'] = 'text/csv'
|
||||
response['Content-Disposition'] = 'filename; filename=members.csv'
|
||||
writer = csv.writer(response, csv.excel)
|
||||
response.write(u'\ufeff'.encode('utf8')) # BOM (optional...Excel needs it to open UTF-8 file properly)
|
||||
response.write(u'\ufeff'.encode('utf8')) # BOM (optional...Excel needs it to open UTF-8 file properly)
|
||||
for obj in Member.objects.all():
|
||||
data = obj.get_dict()
|
||||
field_list = [str(data['id']), str(data['first_name']), str(data['last_name']), str(data['email']), str(data['POR']), str(data['AYY']), str(data['jas']), str(data['created']), str(data['paid'])]
|
||||
field_list = map(lambda s: str(data[s]),
|
||||
['id', 'first_name', 'last_name', 'email', 'POR', 'AYY', 'jas', 'created', 'paid'])
|
||||
|
||||
writer.writerow(field_list)
|
||||
return response
|
||||
|
||||
return response
|
||||
Reference in New Issue
Block a user