常见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 alembic
与poetry 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
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。