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)
发表了资讯
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
3
发表了资讯
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 评论
10 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部