diff --git a/gracedb/superevents/utils.py b/gracedb/superevents/utils.py index 5beeaf0012a6fd1eb54c429ae076aaece177eba8..658097aca5badcdafd4854935400a22125548a61 100644 --- a/gracedb/superevents/utils.py +++ b/gracedb/superevents/utils.py @@ -4,11 +4,10 @@ from .buildVOEvent import construct_voevent_file from .models import Superevent, Log, Labelling, EMObservation, EMFootprint, \ VOEvent, Signoff from .shortcuts import is_superevent -from .models import Superevent, Log, Labelling, EMObservation, EMFootprint -from events.models import Event, EventLog, Tag +from events.models import Event, EventLog, Tag, Label from events.permission_utils import assign_default_perms from events.shortcuts import is_event -from core.vfile import VersionedFile +from core.vfile import create_versioned_file from alerts.superevent_utils import issue_alert_for_superevent_creation, \ issue_alert_for_superevent_log, \ issue_alert_for_superevent_label_creation, \ @@ -160,10 +159,12 @@ def update_superevent(superevent, updater, issue_alert=True, **kwargs): def create_log(issuer, comment, event_or_superevent, filename="", - data_file=None, tags=[], issue_alert=False, autogenerated=False): + data_file=None, tags=[], file_version=None, issue_alert=False, + autogenerated=False): """ Assume data have already been validated by a form or serializer. tags should be a list of Tag objects (??) + data_file should be an in-memory file type """ # Initial dictionary for log creation @@ -172,6 +173,9 @@ def create_log(issuer, comment, event_or_superevent, filename="", 'comment': comment, 'filename': filename, } + if file_version is not None: + log_dict['file_version'] = file_version + if is_superevent(event_or_superevent): log_dict['superevent'] = event_or_superevent LogModel = Log @@ -188,17 +192,14 @@ def create_log(issuer, comment, event_or_superevent, filename="", # Create log object log = LogModel.objects.create(**log_dict) - # Create data file + # Create versioned file if data_file: - filepath = os.path.join(event_or_superevent.datadir, filename) - fdest = VersionedFile(filepath, 'w') - for chunk in data_file.chunks(): - fdest.write(chunk) - fdest.close() + version = create_versioned_file(filename, event_or_superevent.datadir, + data_file) # Update file_version - log.file_version = fdest.version - log.save() + log.file_version = version + log.save(update_fields=['file_version']) # Add tags to log messages for t in tags: @@ -231,7 +232,7 @@ def add_tag_to_log(log, tag, user, add_log_message=True, issue_alert=False): # Create log message to record tag addition? log_for_tag_addition = None if add_log_message: - comment = 'Tagged message {N}: {tag_name}'.format(N=log.N, + comment = 'Tagged message {N}: {tag_name}.'.format(N=log.N, tag_name=tag.name) event_or_superevent = get_log_parent(log) log_for_tag_addition = create_log(user, comment, event_or_superevent, @@ -249,8 +250,8 @@ def remove_tag_from_log(log, tag, user, add_log_message=True, # Create log message to record tag removal? log_for_tag_removal = None if add_log_message: - comment = 'Removed tag {tag_name} from message {N}'.format( - N=log.N, tag_name=tag.name), + comment = 'Removed tag {tag_name} from message {N}.'.format( + N=log.N, tag_name=tag.name) event_or_superevent = get_log_parent(log) log_for_tag_removal = create_log(user, comment, event_or_superevent, issue_alert=issue_alert, autogenerated=True) @@ -397,13 +398,14 @@ def get_or_create_tags(tag_name_list, display_name_list=[]): # TODO: add permissions checking? # TODO: move this somewhere else? -def get_superevent_by_date_id_or_404(request, superevent_id): +def get_superevent_by_date_id_or_404(request, superevent_id, queryset=None): filter_kwargs = Superevent.get_filter_kwargs_for_date_id_lookup( superevent_id) # TODO: filter queryset for user here - queryset = Superevent.objects.all() + if queryset is None: + queryset = Superevent.objects.all() return get_object_or_404(queryset, **filter_kwargs)