From 2f4e2bb8c1830af57635161324f8225eefe128e7 Mon Sep 17 00:00:00 2001
From: Branson Stephens <stephenb@uwm.edu>
Date: Mon, 24 Jun 2013 08:43:15 -0500
Subject: [PATCH] now possible to attach file to log annotation through REST
 API

---
 gracedb/api.py | 31 +++++++++++++++++++++++++++----
 1 file changed, 27 insertions(+), 4 deletions(-)

diff --git a/gracedb/api.py b/gracedb/api.py
index efdce22f7..67058fe3b 100644
--- a/gracedb/api.py
+++ b/gracedb/api.py
@@ -782,10 +782,36 @@ class EventLogList(APIView):
         event = Event.getByGraceid(graceid)
         message = request.DATA.get('message')
         tagname = request.DATA.get('tagname')
+
+        try:
+            uploadedFile = request.FILES['upload'] 
+        except:
+            uploadedFile = None
+
+        filename = None
+        if uploadedFile:
+            filename = uploadedFile.name 
+            if filename.startswith("general/"):
+                # No writing to general/
+                return HttpResponseForbidden("cannot write to general directory")
+
+            filepath = os.path.join(event.datadir(), filename)
+
+            try:
+                # Open / Write the file.
+                fdest = VersionedFile(filepath, 'w')
+                for chunk in uploadedFile.chunks(): 
+                    fdest.write(chunk)
+                fdest.close()
+            except Exception, e:
+                # XXX This needs some thought.
+                response = Response(str(e), status=status.HTTP_400_BAD_REQUEST)
+
         logentry = EventLog(
                 event=event,
                 issuer=request.user,
-                comment=message)
+                comment=message,
+                filename=filename)
         logset = event.eventlog_set.order_by("created","N")
         try:
             logentry.save()
@@ -806,9 +832,6 @@ class EventLogList(APIView):
             if retval.status_code != 201:
                 response['tagWarning'] = 'Error creating tag.'
 
-        # XXX Alter to allow file upload.  If there is an uploaded
-        uploadedFile = None
-
         # Issue alert.
         description = "LOG: "
         if uploadedFile:
-- 
GitLab