跳转到主要内容

常见Web应用脚手架。

项目描述

lassen

40.4881° N, 121.5049° W

MonkeySee Web应用程序的核心实用工具。不保证向后兼容,使用风险自负。

Lassen试图

  • 提供一套用于CRUD后端99%用例的约定:操作数据、存储数据并向前端提供服务。
  • 为所有事物创建类型提示定义,以提供强大的mypy支持。
  • 通过环境变量配置设置,使用数据库连接和Web服务的标准密钥集。
  • 使常见的事情变得简单,使困难的事情成为可能。

我们还构建了快速、更定制库之间的连接性

  • FastAPI用于Web应用程序路由
  • Pydantic用于数据验证
  • SQLAlchemy用于数据库管理
  • Alembic用于数据库迁移

设计哲学

后端围绕一组核心数据对象。在设计初期,这些对象通常几乎1:1地反映业务目标(用户、团队、项目)。随着复杂性的增加,它们也可能开始包括辅助元数据,例如状态枚举或其他表的本地缓存副本。这些对象可能还会根据数据库引擎进行进一步优化:索引、重构外键等。这会在数据对象和它对外部世界提供的API之间产生差异。

在某些方面,数据库表就像选择最佳数据结构。它们应该有效地将数据从磁盘移动到内存到远程客户端,然后再返回。只要数据转换速度快且无损失,那么如何制作香肠就不再那么重要。

另一方面,Web API旨在向客户端提供语义对象。这些应该是代表你的领域的对象和操作。API层应该故意约束状态/操作空间,使其具有上下文感知性。有用的API不仅仅是数据库的镜像。

在Lassen中,我们将CRUD操作视为底层数据对象上的投影。这可能涉及字段合并、字段子集等。大多数库通过强制类定义的分支来解决这种差异:为创建、更新等提供单独的定义。这通常会产生冗余代码,难以在添加新行为时筛选和推理。

我们不是在类级别配置这种CRUD,而是关注用户可以对每个字段执行的操作。下面定义的Stub类指定一个由数据库值支持的关键,然后根据每个字段的允许权限生成用于API的CRUD模式。通过这种按键定义的方式,我们旨在在代码和API契约中明确说明允许的内容,同时使访问模式与数据值本身保持一致。

结构

存储:每个数据模型都应该有自己的存储。由lassen.store提供的基类提供标准逻辑。

  • StoreBase:所有存储的基类
  • StoreFilterMixin:用于指定要使用的额外模式的过滤存储的混入
  • StoreS3Mixin:使用S3作为外部存储数据的存储的混入。支持上传和下载时的压缩。

模式:每个数据模型都应该定义一个模型类(SQLAlchemy基对象)和一系列模式对象(Pydantic),这些对象允许存储序列化模型。这些模式还常用于API层的直接CRUD引用。

我们使用一个基Stub文件从集中定义生成这些模式。当定义生成器时,应使用由lassen完全管理的路径,因为我们将每次运行时都删除并重新生成这些文件。

STORE_GENERATOR = StoreGenerator("models/auto")
SCHEMA_GENERATOR = SchemaGenerator("schemas/auto")
poetry run generate-lassen

迁移:Lassen包括一个模板化的alembic.init和env.py文件。客户端应用程序只需在项目根目录中有一个migrations文件夹。之后,您可以将poetry run alembicpoetry run migrate互换。

poetry run migrate upgrade head

设置:应用程序设置应继承我们的核心设置。这提供了一种从环境变量中加载设置的标准方式,包括常见的数据库键。

from lassen.core.config import CoreSettings, register_settings

@register_settings
class ClientSettings(CoreSettings):
    pass

模式:有关通过API返回结果时使用的辅助模式,请参阅lassen.schema

开发

安装所有额外的依赖项,以便您可以完全运行单元测试套件。

poetry install --extras "aws database datasets"

createuser lassen
createdb -O lassen lassen_db
createdb -O lassen lassen_test_db

单元测试

poetry run pytest

项目详情


下载文件

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

源分布

lassen-0.5.2.tar.gz (65.2 kB 查看哈希值)

上传时间

构建分布

lassen-0.5.2-py3-none-any.whl (73.5 kB 查看哈希值)

上传时间 Python 3

由以下支持