def edit_application(application, data_dict, image, keep_images):
    if 'image' in data_dict:
        del data_dict['image']
    data, errors = validate(data_dict, application_schema())
    if errors:
        raise ValidationError(errors, error_summary(errors))

    application.title = data.get('title')
    application.url = data.get('url')
    application.description = data.get('description')
    application.featured = data.get('featured')
    application.submitter = data.get('submitter')
    application.developer = data.get('developer')
    application.developer_url = data.get('developer_url')
    application.license = data.get('license')
    application.code_url = data.get('code_url')
    application.api_url = data.get('api_url')

    tags = data.get('tags', '').split(' ')
    application.update_tags(tags)

    for _image in application.images:
        if _image.id not in keep_images:
            _image.delete()

    if image is not None and hasattr(image, 'file'):
        image = ApplicationImage(name=image.filename, 
            data=image.file.read(),
            application=application)
        image.save()

    application.save()
    return application
def create_application(data_dict, image):
    if 'image' in data_dict:
        del data_dict['image']
    data, errors = validate(data_dict, application_schema())
    if errors:
        raise ValidationError(errors, error_summary(errors))

    application = Application(
            name=Application.generate_name(data.get('title')),
            title=data.get('title'),
            url=data.get('url'),
            description=data.get('description'),
            featured=data.get('featured'),
            submitter=data.get('submitter'),
            developer=data.get('developer'),
            developer_url=data.get('developer_url'),
            license=data.get('license'),
            code_url=data.get('code_url'),
            api_url=data.get('api_url'),
        )

    tags = data.get('tags', '').split(' ')
    application.update_tags(tags)

    if image and image.filename and image.file:
        image = ApplicationImage(name=image.filename, 
            data=image.file.read(),
            application=application)
        Session.add(image)
    application.save()
    return application