From b564e98c2e192e79b26a98a95b9c52590b5dc708 Mon Sep 17 00:00:00 2001 From: okalintu Date: Mon, 15 Aug 2016 19:42:25 +0300 Subject: [PATCH] completed csvimport feature. see examples/members.txt --- examples/members.txt | 12 ++++++++++++ members/models.py | 8 ++++---- members/views.py | 9 +++++++++ sikweb/urls.py | 3 ++- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/examples/members.txt b/examples/members.txt index 67eb1ee..87969b0 100644 --- a/examples/members.txt +++ b/examples/members.txt @@ -88,3 +88,15 @@ POST /members/api/request/:id //reject member request (== delete request and delete member) DELETE /members/api/request/:id + + +// mass import from csv +POST /members/api/csvimport +//csvformat first_name,last_name,email,POR,AYY,JAS +// example data +Pekka,Pöytä,pekka.p.pouta@mosh.pit,Tuska,1,0 + +// example response on success +{"status": "success", "errors": []} +// example response on failure (code will be 400) +{"status": "failure", "errors": ["failure adding item Pekka, P\u00f6yt\u00e42, pekka.p.pouta@mosh.pit, Tuska, Eip"]} diff --git a/members/models.py b/members/models.py index afa0bfc..97398e0 100644 --- a/members/models.py +++ b/members/models.py @@ -56,17 +56,17 @@ class Member(models.Model): except ValueError: return {"status": "failure", "errors": ["could not parse csv file"]} for row in data: - if True: + try: obj = cls.objects.create( first_name=row[0], last_name=row[1], email=row[2], POR=row[3], - AYY=bool(row[4]), - jas=bool(row[5]), + AYY=row[4].lower() in ['yes','y','1','true',"kyllä", "khyl"], + jas=row[5].lower() in ['yes','y','1','true',"kyllä", "khyl"], ) print("added obj {}".format(obj)) - else: + except: response["status"] = "failure" response["errors"].append("failure adding item {}".format(", ".join(row))) diff --git a/members/views.py b/members/views.py index 994c418..589a913 100644 --- a/members/views.py +++ b/members/views.py @@ -62,6 +62,15 @@ def member_requests(request, *args, **kwargs): reqs = list(map(lambda r: r.get_dict(),MemberRequest.objects.all())) return HttpResponse(json.dumps(reqs)) +@ensure_csrf_cookie +def csv_import(request, *args, **kwargs): + data = request.body.decode("utf-8") + resp_data = Member.import_csv(data) + resp = HttpResponse(json.dumps(resp_data)) + if resp_data['status'] == 'failure': + resp.status_code = 400 + return resp + @ensure_csrf_cookie def new_member_request(request, *args, **kwargs): try: diff --git a/sikweb/urls.py b/sikweb/urls.py index df7ca9f..d3af1d4 100644 --- a/sikweb/urls.py +++ b/sikweb/urls.py @@ -21,6 +21,7 @@ from members.views import index as mindex from members.views import members as mems from members.views import member as mem from members.views import handle_mem_request +from members.views import csv_import as mem_csv_import from members.views import new_member_request from members.views import member_requests @@ -34,7 +35,7 @@ urlpatterns = [ url(r'^members/api/members$', mems), url(r'^members/api/member/(?P\d+)$', mem), url(r'^members/api/member/$', mem), - url(r'^members/api/member/$', mem), + url(r'^members/api/csvimport$', mem_csv_import), url(r'^members/api/requests$', member_requests), url(r'^members/api/request$', new_member_request), url(r'^members/api/request/(?P\d+)$', handle_mem_request),