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