Bali 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Bali 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Bali 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 Python
操作系统 跨平台
软件类型 开源软件
所属分类 云计算云原生
开源组织
地区 国产
投 递 者 JoshYuJump
适用人群 未知
收录时间 2022-04-25

软件简介

Bali 基于 FastAPI 和 gRPC,简化了云原生微服务开发。如果你想让你的项目同时支持 HTTP 和 gRPC ,那么 Bali 可以帮助你很轻松的完成。 

Bali 的特性:
* 项目结构简单。
* 融合了 `SQLAlchemy` 并提供了 model 生成的方法。
* 提供了工具类转换 model 成为 Pydantic 模式.
* 支持 GZip 解压缩.
* 🍻 **Resource** 层处理对外服务即支持 HTTP 又支持 gRPC

谁在使用

 

依赖项:

1. Python 3.8+
2. FastAPI 0.63+
3. grpcio>=1.32.0,<1.42

安装:

pip install bali-core

创建应用:

import greeter_server

# Initialized App 
app = Bali()
# Updated settings
app.settings(base_settings={'title': 'Bali App'})

启动 HTTP & RPC:

# lauch RPC 
python main.py --rpc

# lauch HTTP
python main.py --http

数据库对象的使用:

### connect
from bali.core import db

# connect to database when app started
# db is a sqla-wrapper instance
db.connect('DATABASE_URI')  
  


### Declarative mode with sqla-wrapper

class User(db.Model):
    __tablename__ "users"
    id = db.Column(db.Integer, primary_key=True)
    ...

db.create_all()

db.add(User(...))
db.commit()

todos = db.query(User).all()

### Declare models inherit from convenient base models

## BaseModel

# using BaseModel
class User(db.BaseModel):
    __tablename__ "users"
    id = db.Column(db.Integer, primary_key=True)



# BaseModel's source code 

class BaseModel(db.Model):
    __abstract__ = True

    created_time = Column(DateTime(timezone=True), default=datetime.utcnow)
    updated_time = Column(
        DateTime(timezone=True), default=datetime.utcnow, onupdate=datetime.utcnow
    )
    is_active = Column(Boolean(), default=True)


### Transaction

# SQLA-wrapper default model behavior is auto commit, auto commit will be disabled with `db.transaction` context. 
with db.transaction():
    item = Item.create(name='test1')

### Operators

# Operators provided `get_filters_expr` to transform filters (dict) to SQLAlchemy expressions.  

from bali.db.operators import get_filters_expr
from models import User

users = User.query().filter(*get_filters_expr(User, **filters)).all()

Resource

资源(Resouce)的设计借鉴了REST架构风格的几个关键概念。HTTP 和 RPC 使用的是同一套 Resouce 代码,常用的 action 的对应关系如下:

Action Route Method RPC Description
get /{id} GET Get{Resource} Get an existing resource matching the given id
list / GET List{Resource} Get all the resources
create / POST Create{Resource} Create a new resource
update /{id} PATCH Update{Resource} Update an existing resource matching the given id
delete /{id} DELETE Delete{Resource} Delete an existing resource matching the given id

缓存的使用:

from bali.core import cache

# Usage example (API)

# Read cache 
cache.get(key)

# Set cache 
cache.set(key, value, timeout=10)

 

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击加入讨论🔥(3) 发布并加入讨论🔥
发表了资讯
2022/11/10 16:57

云原生框架 Bali 3.4.0 发布:支持 Python 3.11

云原生框架 Bali 3.4.0 发布:支持 Python 3.11 新增 多环境配置文件 支持 Python 3.11 变更 更新依赖版本并移除 decamelize 依赖包 更新文档及使用案例 中断性变更 如果您的项目使用过时的 protobuf,您可能需要重新生成,因为所有依赖项都已更新 bali-cli 变更 升级 grpcio/grpcio-tools 版本

0
2
发表了资讯
2022/10/11 19:53

云原生框架 Bali 3.3.0 发布:集成数据库迁移

云原生框架 Bali 3.3.0 发布:集成数据库迁移 新增 集成 FastAPI-Migrate 声明式 API 简单初版 变更 升级 grpc plugin 版本 修复 修复 importlib-metadata 5.0 与 kombu 的冲突 同时 bali-cli 也增加了以下命名: `bali run` bali run http # 启动 http 服务 bali run rpc # 启动 rpc 服务 bali run event # 启动 event 服务 `bali shell`...

0
0
发表了资讯
2022/07/12 13:24

云原生框架 Bali 3.2.2 发布:修复未处理的事件消息堆积

修复 修复未处理的事件消息堆积 @baoj2010 PR#139 --- 比如你的 event hander 是这样的: class EventHandler: @event_handler('UserCreated') def handle_user_created(self, event: UserCreatedEvent): pass 这里消息列队里面收到 `UserDeleted` 事件,在 3.2.2 之前的版本,是不会处理 `UserDeleted` 事件的,这样就会造成消息堆积了。Bali 3.2.2 是专为这个优化单独发布的一个 patch 版本。...

0
0
发表了资讯
2022/07/05 14:50

云原生框架 Bali 3.2.1 发布:更优雅的 event handler

云原生框架 Bali 3.2.1 现已发布,更新内容如下: 新增 Event handler 支持 class 方式 @baoj2010 #128 添加 Environments 运行时环境 调整 移除依赖项 python-jose[cryptography]==3.2.0 修复 修复了事件处理程序消息队列消息堆叠 修复了generic rpc 方法比如 create 在被重写时异常的问题

0
2
发表了资讯
2022/06/17 15:33

bali 3.2.0 发布:云原生 Python 框架带来的重大变化

更新内容: 新增 引入 manager 概念 🥂 新的优雅的 API 定义 🥂 PR#122 增加 db.Base declarative_base 应用增加 __clear__ 方法,方便单元测试 为注册的 Resource 生成 gRPC 服务类 🍕 PR#125 引入 pytest-grpc 作为 gRPC 单元测试组件 调整 移除 connection.retry_on_deadlock_decorator 移除 connection.close_connection 移除 bali.schema, 用 bali.schemas 替代 标识 GRPCTestBase 废...

0
2
发表了资讯
2022/05/16 11:05

Bali 3.1.3 发布,支持事件驱动开发

这次的版本更新在原来已经支持的 HTTP、RPC 上增加了事件(event)支持。同时,软件的维护层面也增加了 CI 自动化测试的 Workflow。 更新内容: 1. 事件的定义 Event 基类 2. 事件的处理方法及事件处理独立使用一个进程 3. 文档全部使用 Mkdocs 迁移 事件的定义方法(代码示例) from bali.events import Event class HelloEvent(Event): # The __amqp_name__ here defaults to default, # which means that th...

0
2
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
3 评论
14 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部