Skip to content
Snippets Groups Projects
edit.py 1.83 KiB
Newer Older
  • Learn to ignore specific revisions
  • """
    This file contains functionality to get data from the database.
    """
    
    
    def switch_order(item1, item2):
    
        """ Switches order between two slides. """
    
    
        old_order = item1.order
        new_order = item2.order
    
        item2.order = -1
        db.session.commit()
        db.session.refresh(item2)
    
        item1.order = new_order
        db.session.commit()
        db.session.refresh(item1)
    
        item2.order = old_order
        db.session.commit()
        db.session.refresh(item2)
    
        return item1
    
    
    
    Victor Löfgren's avatar
    Victor Löfgren committed
    def default(item, **kwargs):
        """
        For every keyword argument, set that attribute on item to the given value.
        Raise error if item doesn't already have that attribute. Do nothing if the
        value for a given key is None. Works for any type of item.
    
        Example:
        >>> user = default(user, name="Karl Karlsson")  # Change name
        >>> user.name
        Karl Karlsson
        >>> user = default(user, efternamn="Jönsson")   # Try to set attribute that doesn't exist
        AttributeError: Item of type <class 'app.database.models.User'> has no attribute 'efternamn'
        >>> user = default(user, name=None)             # Nothing happens if value is None
        >>> user.name
        Karl Karlsson
        """
    
        for key, value in kwargs.items():
            if not hasattr(item, key):
                raise AttributeError(f"Item of type {type(item)} has no attribute '{key}'")
            if value is not None:
                setattr(item, key, value)
    
        db.session.commit()
        db.session.refresh(item)
        return item
    
    
    
    def competition(item, **kwargs):
        if kwargs["background_image_id"] == -1:
            item.background_image_id = None
            del kwargs["background_image_id"]
        return default(item, **kwargs)
    
    
    def slide(item, **kwargs):
        if kwargs["background_image_id"] == -1:
            item.background_image_id = None
            del kwargs["background_image_id"]
        return default(item, **kwargs)