简化数据结构迁移的包
项目描述
此支持包简化了用户会话和软件版本更新之间的数据持久化。
此包的主要思想是简化版本之间的数据迁移,并允许在数据结构定义旁边定义迁移信息。
基本用法(数据序列化)
如果您只需要序列化数据,则可以使用仅JSON钩子
import json
from pydantic import BaseModel
from local_migrator import Encoder, object_hook
class SampleModel(BaseModel):
field1: int
field2: str
data = SampleModel(field1=4, field2="abc")
with open("sample.json", "w") as f_p:
json.dump(data, f_p, cls=Encoder)
with open("sample.json") as f_p:
data2 = json.load(f_p, object_hook=object_hook)
assert data == data2
迁移
要注册此信息,可以使用register_class装饰器。它有4个参数
version - 数据结构版本
migration_list - 包含元组(version. migration_function)的列表。
old_paths - 包含先前类定义的完全限定Python路径的列表。这是为了允许在代码重构期间移动类。
use_parent_migrations - 如果为True,则将使用父类的迁移。
让我们假设我们有这样的代码
from local_migrator import Encoder, object_hook
class SampleModel(BaseModel):
field1: int
field_ca_1: str
field_ca_2: float
with open("sample.json", "w") as f_p:
json.dump(data, f_p, cls=Encoder)
但是有一个决定将ca字段移动到子结构
class CaModel(BaseModel):
field_1: str
field_2: float
class SampleModel(BaseModel):
field1: int
field_ca: CaModel
然后使用local_migrator代码可能看起来像这样
from local_migrator import object_hook, register_class
class CaModel(BaseModel):
field_1: str
field_2: float
def ca_migration_function(dkt):
dkt["field_ca"] = CaModel(field1=dkt.pop("field_ca_1"),
field2=dkt.pop("field_ca_2"))
return dkt
@register_class("0.0.1", [("0.0.1", ca_migration_function)])
class SampleModel(BaseModel):
field1: int
field_ca: CaModel
with open("sample.json") as f_p:
data = json.load(f_p, object_hook=object_hook)
假设有一个决定将field1重命名为id。那么代码可能看起来像这样
from local_migrator import object_hook, register_class, rename_key
class CaModel(BaseModel):
field_1: str
field_2: float
def ca_migration_function(dkt):
dkt["field_ca"] = CaModel(field1=dkt.pop("field_ca_1"),
field2=dkt.pop("field_ca_2"))
return dkt
@register_class("0.0.2", [("0.0.1", ca_migration_function), ("0.0.2", rename_key("field1", "id"))])
class SampleModel(BaseModel):
id: int
field_ca: CaModel
with open("sample.json") as f_p:
data = json.load(f_p, object_hook=object_hook)
更多示例可以在文档的示例部分找到
附加功能
rename_key(from_key: str, to_key: str, optional=False) -> Callable[[Dict], Dict] - 用于重命名字段迁移的辅助函数。
update_argument(argument_name:str)(func: Callable) -> Callable - 用于保持向后兼容性的装饰器,通过将 dict 参数转换为基于函数类型注解的某些类。
贡献
欢迎贡献!请创建拉取请求或打开问题。对于PR,请记得添加测试和文档。
附加说明
该软件包最初命名为 nme,但后来重命名为更清楚地说明其目的。
该软件包是从 PartSeg 项目提取的,以便在另一个项目中简化重用。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。
源分发
构建分发
local-migrator-0.1.10.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b836adf9ff9c6bacf7922dfd16c26f236df47e5fb492c27c50b9b98ed9ba254c |
|
MD5 | 5b5a62682f0e309f219dcb91918513aa |
|
BLAKE2b-256 | 1eb44d6d5ef31e3de8c5f94e89b41e5c31f31cfaab9fd68bd1ba2a03ec0b67e1 |
local_migrator-0.1.10-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e91861ed84b6d35df165371f174f7ad6ae005bc61ce4aee1e87bd1384166339d |
|
MD5 | 74532dd5ad3fbd07ca9312274055fd6f |
|
BLAKE2b-256 | 06369a8f451d012549aa7e1782a95b61f482bd1001f6fc7fa7ac1bad3e399dab |