From 8de3b56ad2e92f869576b635faf83701169fbfdb Mon Sep 17 00:00:00 2001
From: Tanner Prestegard <tanner.prestegard@ligo.org>
Date: Fri, 22 Jun 2018 09:11:14 -0500
Subject: [PATCH] Adding utility method for creating versioned files

Added a utility method for creating versioned files from
either a string or an in-memory file.
---
 gracedb/core/vfile.py | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/gracedb/core/vfile.py b/gracedb/core/vfile.py
index f393b7d68..574bc0143 100644
--- a/gracedb/core/vfile.py
+++ b/gracedb/core/vfile.py
@@ -1,11 +1,18 @@
-
 import os
+import six
 import tempfile
 import logging
 import errno
 import shutil
 import mimetypes
 
+from django.core.files.uploadedfile import InMemoryUploadedFile, \
+    SimpleUploadedFile, TemporaryUploadedFile, UploadedFile
+
+import logging
+logger = logging.getLogger(__name__)
+
+
 class VersionedFile(file):
     """Open a versioned file.
 
@@ -190,3 +197,21 @@ class VersionedFile(file):
         if ',' in filename:
             filename = filename.split(',')[0]
         return os.path.basename(filename)
+
+
+def create_versioned_file(filename, file_dir, file_contents):
+
+    # Get full file path
+    full_path = os.path.join(file_dir, filename)
+
+    # Create file
+    fdest = VersionedFile(full_path, 'w')
+    if isinstance(file_contents, six.string_types):
+        fdest.write(file_contents)
+    elif isinstance(file_contents, (UploadedFile, InMemoryUploadedFile,
+                    TemporaryUploadedFile, SimpleUploadedFile)):
+        for chunk in file_contents.chunks():
+            fdest.write(chunk)
+    fdest.close()
+
+    return fdest.version
-- 
GitLab