跳转到主要内容

基于SQL查询提供媒体的Datasette插件

项目描述

datasette-media

PyPI Changelog Tests License

Datasette插件,用于基于SQL查询提供媒体。

当您有一个包含对磁盘上文件引用的数据库表 - 或存储在BLOB列中的二进制内容 - 并且希望将其提供给用户时,请使用此插件。

安装

在Datasette相同的环境中安装此插件。

$ pip install datasette-media

HEIC图像支持

现代iPhone使用HEIC图像格式保存其照片。处理这些图像需要额外的依赖项,pyheif。您可以通过运行以下命令包含此依赖项

$ pip install datasette-media[heif]

用法

您可以使用此插件配置Datasette,根据对底层数据库表的SQL查询提供静态媒体。

媒体将通过以 /-/media/ 开头的URL提供服务。每个媒体资源的完整URL将如下所示

/-/media/type-of-media/media-key

type-of-media 将对应于配置的SQL查询,可能是 photomedia-key 将是一个用作底层SQL查询的一部分的标识符,用于找到应提供的文件。

从磁盘提供静态文件

以下 metadata.json 配置将使此插件根据对名为 apple_photos 的数据库表的查询提供文件。

{
    "plugins": {
        "datasette-media": {
            "photo": {
                "sql": "select filepath from apple_photos where uuid=:key"
            }
        }
    }
}

/-/media/photo/CF972D33-5324-44F2-8DAE-22CB3182CD31 的请求将执行以下SQL查询

select filepath from apple_photos where uuid=:key

URL中的值 - 在这种情况下为 CF972D33-5324-44F2-8DAE-22CB3182CD31 - 将作为 :key 参数传递给查询。

查询返回一个已从表中读取的 filepath 值。然后插件将从磁盘读取该文件,并在请求中提供它。

SQL查询默认运行在第一个已连接的数据库上。您可以使用"database": "name_of_db"指定不同的数据库来执行查询。要针对photos.db执行,使用以下方法

{
    "plugins": {
        "datasette-media": {
            "photo": {
                "sql": "select filepath from apple_photos where uuid=:key",
                "database": "photos"
            }
        }
    }
}

请参阅dogsheep-photos,了解可以利用此插件的应用程序示例。

从BLOB列服务二进制内容

如果您的SQL查询返回一个content列,则该列将直接服务于用户

{
    "plugins": {
        "datasette-media": {
            "photo": {
                "sql": "select thumbnail as content from photos where uuid=:key",
                "database": "thumbs"
            }
        }
    }
}

您还可以返回一个content_type列,该列将用作服务于用户的Content-Type标题

{
    "plugins": {
        "datasette-media": {
            "photo": {
                "sql": "select body as content, 'text/html;charset=utf-8' as content_type from documents where id=:key",
                "database": "documents"
            }
        }
    }
}

如果您没有指定content_type,则默认使用application/octet-stream

从URL代理服务内容

要服务从其他地方获取的内容,返回一个content_url列。这在与下一节中描述的调整图像大小功能结合使用时特别有用。

{
    "plugins": {
        "datasette-media": {
            "photos": {
                "sql": "select photo_url as content_url from photos where id=:key",
                "database": "photos",
                "enable_transform": true
            }
        }
    }
}

现在您可以通过以下方式访问该URL的调整大小后的图像版本

/-/media/photos/13?w=200

设置下载文件名

可以通过返回content_filename列来强制浏览器使用特定文件名下载内容。

{
    "plugins": {
        "datasette-media": {
            "hello": {
                "sql": "select 'Hello ' || :key as content, 'hello.txt' as content_filename"
            }
        }
    }
}

访问/-/media/hello/Groot将导致您的浏览器下载一个名为hello.txt的文件,其中包含文本Hello Groot

调整或转换图像

您的SQL查询可以通过返回额外的列来指定图像应调整大小和/或转换为其他格式。这三个都是可选的。

  • resize_width - 调整图像到的高度
  • resize_height - 调整图像到的高度
  • output_format - 要使用的输出格式(例如jpegpng) - 允许使用任何由Pillow支持的输出格式。

如果指定了其中一个但未指定另一个resize_widthresize_height,则未指定的一个将自动计算以保持图像的纵横比。

以下是一个配置示例,将所有图像调整为高度为200像素的JPEG格式

{
    "plugins": {
        "datasette-media": {
            "photo": {
                "sql": "select filepath, 200 as resize_height, 'jpeg' as output_format from apple_photos where uuid=:key",
                "database": "photos"
            }
        }
    }
}

如果您启用enable_transform配置选项,您可以在运行时使用查询字符串参数指定转换参数。例如

  • /-/media/photo/CF972D33?w=200 调整到固定宽度
  • /-/media/photo/CF972D33?h=200 调整到固定高度
  • /-/media/photo/CF972D33?format=jpeg 转换为JPEG

该选项添加方式如下

{
    "plugins": {
        "datasette-media": {
            "photo": {
                "sql": "select filepath from apple_photos where uuid=:key",
                "database": "photos",
                "enable_transform": true
            }
        }
    }
}

允许的最大高度或宽度为4000像素。您可以使用"max_width_height"选项更改此限制。

{
    "plugins": {
        "datasette-media": {
            "photo": {
                "sql": "select filepath from apple_photos where uuid=:key",
                "database": "photos",
                "enable_transform": true,
                "max_width_height": 1000
            }
        }
    }
}

配置

除了不同的命名内容类型外,还提供了以下特殊插件配置设置

  • transform_threads - 用于运行转换(例如调整大小)的线程数。默认为4。

这可以按如下方式使用

{
    "plugins": {
        "datasette-media": {
            "photo": {
                "sql": "select filepath from apple_photos where uuid=:key",
                "database": "photos"
            },
            "transform_threads": 8
        }
    }
}

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

datasette-media-0.5.1.tar.gz (11.1 kB 查看哈希值)

上传

构建分发

datasette_media-0.5.1-py3-none-any.whl (11.6 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面