def save_override(request): """ Create or edit a buildroot override. This entails either creating a new buildroot override, or editing an existing one. To edit an existing buildroot override, the buildroot override's original id needs to be specified in the ``edited`` parameter. Args: request (pyramid.request): The current web request. Returns: dict: The new or edited override. """ data = request.validated edited = data.pop("edited") caveats = [] try: submitter = User.get(request.user.name) if edited is None: builds = data['builds'] overrides = [] if len(builds) > 1: caveats.append({ 'name': 'nvrs', 'description': 'Your override submission was ' 'split into %i.' % len(builds) }) for build in builds: log.info("Creating a new buildroot override: %s" % build.nvr) existing_override = BuildrootOverride.get(build.id) if existing_override: if not existing_override.expired_date: data['expiration_date'] = max( existing_override.expiration_date, data['expiration_date']) new_notes = f"""{data['notes']} _____________ _@{existing_override.submitter.name} ({existing_override.submission_date.strftime('%b %d, %Y')})_ {existing_override.notes}""" # Truncate notes at 2000 chars if len(new_notes) > 2000: new_notes = new_notes[:1972] + '(...)\n___Notes truncated___' overrides.append( BuildrootOverride.edit( request, edited=build, submitter=submitter, submission_date=datetime.now(), notes=new_notes, expiration_date=data['expiration_date'], expired=None, )) else: overrides.append( BuildrootOverride.new( request, build=build, submitter=submitter, notes=data['notes'], expiration_date=data['expiration_date'], )) if len(builds) > 1: result = dict(overrides=overrides) else: result = overrides[0] else: log.info("Editing buildroot override: %s" % edited) edited = Build.get(edited) if edited is None: request.errors.add('body', 'edited', 'No such build') return result = BuildrootOverride.edit( request, edited=edited, submitter=submitter, notes=data["notes"], expired=data["expired"], expiration_date=data["expiration_date"]) if not result: # Some error inside .edit(...) return except Exception as e: log.exception(e) request.errors.add('body', 'override', 'Unable to save buildroot override: %s' % e) return if not isinstance(result, dict): result = result.__json__() result['caveats'] = caveats return result
def save_override(request): """ Create or edit a buildroot override. This entails either creating a new buildroot override, or editing an existing one. To edit an existing buildroot override, the buildroot override's original id needs to be specified in the ``edited`` parameter. Args: request (pyramid.request): The current web request. Returns: dict: The new or edited override. """ data = request.validated edited = data.pop("edited") caveats = [] try: submitter = User.get(request.user.name) if edited is None: builds = data['builds'] overrides = [] if len(builds) > 1: caveats.append({ 'name': 'nvrs', 'description': 'Your override submission was ' 'split into %i.' % len(builds) }) for build in builds: log.info("Creating a new buildroot override: %s" % build.nvr) if BuildrootOverride.get(build.id): request.errors.add('body', 'builds', 'Buildroot override for %s already exists' % build.nvr) return else: overrides.append(BuildrootOverride.new( request, build=build, submitter=submitter, notes=data['notes'], expiration_date=data['expiration_date'], )) if len(builds) > 1: result = dict(overrides=overrides) else: result = overrides[0] else: log.info("Editing buildroot override: %s" % edited) edited = Build.get(edited) if edited is None: request.errors.add('body', 'edited', 'No such build') return result = BuildrootOverride.edit( request, edited=edited, submitter=submitter, notes=data["notes"], expired=data["expired"], expiration_date=data["expiration_date"]) if not result: # Some error inside .edit(...) return except Exception as e: log.exception(e) request.errors.add('body', 'override', 'Unable to save buildroot override: %s' % e) return if not isinstance(result, dict): result = result.__json__() result['caveats'] = caveats return result