diff --git a/gracedb/api/v1/events/views.py b/gracedb/api/v1/events/views.py index b6c6b8a39b4333996f1bffbdfdc81d4d467101a3..f2fab2b528caec0f9fbf4288f344747e6a2dc83a 100644 --- a/gracedb/api/v1/events/views.py +++ b/gracedb/api/v1/events/views.py @@ -617,7 +617,7 @@ class EventDetail(InheritPermissionsAPIView): #for chunk in f.chunks(): # fdest.write(chunk) #fdest.close() - shutil.copyfileobj(f, fdest) + shutil.copyfileobj(f, fdest.file) fdest.close() # Extract Info from uploaded data diff --git a/gracedb/api/v1/superevents/views.py b/gracedb/api/v1/superevents/views.py index 2575d53aff2f0332a3790d86e1fdb4a1b665f1cd..be85aa3ad700080a5c661bea25b1e8244f0b45c2 100644 --- a/gracedb/api/v1/superevents/views.py +++ b/gracedb/api/v1/superevents/views.py @@ -15,7 +15,7 @@ from rest_framework.views import APIView from core.file_utils import get_file_list from core.http import check_and_serve_file -from core.vfile import VersionedFile, FileVersionError, FileVersionNameError +from core.vfile import FileVersionError, FileVersionNameError from events.models import Event, Label from events.view_utils import reverse as gracedb_reverse from ligoauth.utils import is_internal diff --git a/gracedb/core/vfile.py b/gracedb/core/vfile.py index c451e6b7fafb834f908a1b61b7e2bb6f339a8051..5a878672216f00adf3d0514767a474c8dc8d3bb2 100644 --- a/gracedb/core/vfile.py +++ b/gracedb/core/vfile.py @@ -24,7 +24,7 @@ class FileVersionNameError(Exception): pass -class VersionedFile(file): +class VersionedFile(object): """ Open a versioned file. @@ -74,7 +74,7 @@ class VersionedFile(file): # one scoped inside of this __init__). But I'm reluctant to mess with # Brian's code too much. self.version = version - file.__init__(self, actual_name, *args, **kwargs) + self.file = open(actual_name, *args, **kwargs) # Otherwise... @@ -124,7 +124,7 @@ class VersionedFile(file): os.O_WRONLY | os.O_CREAT | os.O_EXCL, 0o644) # re-open - file.__init__(self, actual_name, *args, **kwargs) + self.file = open(actual_name, *args, **kwargs) # lose fd we used to ensure file creation. os.close(fd) break @@ -208,6 +208,13 @@ class VersionedFile(file): return [int(f.split(',')[1]) for f in os.listdir(d) if f.startswith(name + ',')] + def write(self, s): + self.file.write(s) + + @property + def closed(self): + return self.file.closed + def close(self): if self.writing: # no need to update symlink if we were only reading. @@ -215,13 +222,13 @@ class VersionedFile(file): # file -- trying to discover the lastest version fails # painfully. (max(known_versions()) => max([])) self._repoint_symlink() - if not self.closed: - file.close(self) + if not self.file.closed: + self.file.close() def __del__(self): # XXX file does not have a __del__ method. Should we? - if not self.closed: - self.close() + if not self.file.closed: + self.file.close() @staticmethod def guess_mimetype(filename): diff --git a/gracedb/events/serialize.py b/gracedb/events/serialize.py index 56831a079483a4f7b8763ed42ef5b8d618e40fff..9551517ceb8b49bdc7208205f33a12d95e8bd839 100644 --- a/gracedb/events/serialize.py +++ b/gracedb/events/serialize.py @@ -89,7 +89,7 @@ def write_output_files(root_dir, xmldoc, log_content, \ """ f = VersionedFile(root_dir+'/'+xml_fname,'w') - xmldoc.write(f) + xmldoc.write(f.file) f.close() f = VersionedFile(root_dir+'/'+log_fname,'w')