声明性数据映射器

data-mapper的Python项目详细描述


数据映射器

声明性数据映射器

PyPITravis (.org) branch

说明

大多数项目使用相同数据的不同表示。 每次为在其表示形式之间转换数据而编写的代码 基本上是非常重复的。更重要的是,它总是一个错误和问题的存款 这需要开发人员或测试人员对其进行单元测试。

这个软件包试图解决这些问题…好吧,至少 普通的。

为了使开发人员的工作更容易,它主要设计用于 以陈述性的方式:描述你想要的,然后马上得到。

用例和特性

以下是最常见的用例和特性的示例:

不同的命名方案

此映射器在数据中查找属性first_namelast_name。 对于属性first_name,它试图通过第一个键来解析它 'first_name',如果找不到,则尝试第二个键'name'。 类似的过程也适用于属性last_name

fromdata_mapper.mappersimportMapperfromdata_mapper.propertiesimportPropertyclassPersonMapper(Mapper):first_name=Property('first_name','name')last_name=Property('last_name','surname')mapper=PersonMapper()assertmapper.get({'first_name':'Ivan','surname':'Bogush',})=={'first_name':'Ivan','last_name':'Bogush',}assertmapper.get({'name':'Ivan','surname':'Bogush',})=={'first_name':'Ivan','last_name':'Bogush',}

这个用例有一个故事:)

It was the first issue I wanted to solve in my other project. I had different naming schemes in different data sources, and in my databases. All of them used different names for product categories: 'categories', 'category', 'categoryId'. I found it very boring to write repeatable code to convert the same data.

解析值的任意运算

全名字符串构造

这个函数解析属性first_namemiddle_name[可选]和 last_name并将它们组合成单个字符串-full_name

fromdata_mapper.properties.operationsimportOperationfromdata_mapper.properties.stringimportStringPropertyfull_name=Operation(StringProperty('first_name'),StringProperty('middle_name',required=False),StringProperty('last_name'),func=lambda*args:' '.join(filter(None,args)),)assert'Anton Pavlovich Chekhov'==full_name.get(dict(first_name='Anton',middle_name='Pavlovich',last_name='Chekhov',))assert'Anton Chekhov'==full_name.get(dict(first_name='Anton',last_name='Chekhov',))

对象映射

听写到object

假设我们有一个类Person

classPerson:def__init__(self,id_:int,first_name:str,last_name:str,middle_name:str=None,):self.id=id_self.first_name=first_nameself.last_name=last_nameself.middle_name=middle_name

dict中的映射程序,具有类Person实例的对应键。 可以通过子类定义ObjectMapper

fromdata_mapper.mappers.objectimportObjectMapperfromdata_mapper.properties.compoundimportCompoundPropertyfromdata_mapper.properties.compound_listimportCompoundListPropertyfromdata_mapper.properties.integerimportIntegerPropertyfromdata_mapper.properties.stringimportStringPropertyclassPersonMapper(ObjectMapper):init=Personargs=CompoundListProperty(IntegerProperty('id'),StringProperty('first_name'),StringProperty('last_name'),)kwargs=CompoundProperty(middle_name=StringProperty(required=False),)first,middle,last='Iosif Aleksandrovich Brodsky'.split()person=PersonMapper().get(dict(id=1940,first_name=first,middle_name=middle,last_name=last,))assertisinstance(person,Person)assertperson.id==1940assertperson.first_name==firstassertperson.middle_name==middleassertperson.last_name==last

通过实例化ObjectMapper

fromdata_mapper.mappers.objectimportObjectMapperfromdata_mapper.properties.compoundimportCompoundPropertyfromdata_mapper.properties.compound_listimportCompoundListPropertyfromdata_mapper.properties.integerimportIntegerPropertyfromdata_mapper.properties.stringimportStringPropertymapper=ObjectMapper(init=Person,args=CompoundListProperty(IntegerProperty('id'),StringProperty('first_name'),StringProperty('last_name'),),kwargs=CompoundProperty(middle_name=StringProperty(required=False),),)first,middle,last='Iosif Aleksandrovich Brodsky'.split()person=mapper.get(dict(id=1940,first_name=first,middle_name=middle,last_name=last,))assertisinstance(person,Person)assertperson.id==1940assertperson.first_name==firstassertperson.middle_name==middleassertperson.last_name==last

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
调整大小时清除java JFrame图像   java Inmemory数据库和编程语言内存管理/垃圾收集   如何在Java中循环参数   java嵌套回收视图未获得焦点   hadoop和spark现在支持IPv6吗?   java允许在类中使用动态值。名字?   java中的Zookeeper连接   java如何从特定格式的字符串中提取数字?   java我在编译时没有收到错误,但当我运行程序时,我收到错误   用于指定身份验证架构的java Swagger配置   java AWS:elastic beanstalk是否隐式使用s3(存储)?   java如何向另一个servlet发送http请求   java写和写的区别是什么?   java在PCAP上循环了两次,这在io上是不可能的。pkts?   java ExecutionException SocketTimeoutException,同时尝试使用CompletableFuture异步调用10个不同的rest服务   svn中的eclipse Java项目,将其与maven结合   java Android数学简单   hadoop中的java多路输出格式