用于openstack通知的数据提取和转换库

stackdistiller的Python项目详细描述


#堆垛蒸馏器

用于OpenStack通知的数据提取和转换库。

stackdistiller的设计目的是从openstack通知中提取数据。 并将其转换为与使用 通知。它由两部分组成,蒸馏器 根据yaml[配置文件](doc/event_definitions_config.md)从通知中获取的数据, 冷凝器接收蒸馏器提取的数据, 并将其格式化为特定于应用程序的对象,称为事件。 这可以是一个简单的python字典、一个xml文档树或一组 ORM模型对象。

##蒸馏器

蒸馏器读取一个yaml配置文件以确定要提取的数据 从每个通知,根据它的事件类型。事件类型可以是 使用shell glob语法通配符。蒸馏器将提取两种类型的 每次通知的数据:

  • 通知信封中的元数据,包括事件类型, 消息id(通知的uuid)和显示何时 通知由源系统生成。
  • 从通知正文中提取的一系列数据项。这些 被称为特质。特征基本上只是类型化的名称-值对。

蒸馏器还可以对提取的性状进行一些基础数据处理。 从通知中,例如从字符串中拆分值。这是 由trait插件处理。这些只是实现 traitPluginBase接口。它们在配置中按名称引用,并且 在传递给init上的蒸馏器的trait_plugin_映射中查找。 插件映射只是一个字典或类似字典的对象(例如 插件管理器)将名称映射到插件类。如果没有传递到 蒸馏器将使用一个默认值,它只包含内置插件 与堆叠蒸馏器捆绑。

如果通知与蒸馏器中的任何事件定义不匹配 配置文件,蒸馏器的to-u事件方法将返回none,指示 它无法提取该通知。这可能是你想要的 应用程序可能只对某些通知感兴趣。) 要记录来自any事件类型的基本信息,可以通过 “catchall=true”到蒸馏器,它将从 任何通知。

##冷凝器

冷凝器接收从 提取并将其格式化为适当类型的事件对象。 一个冷凝器类的实例与原始类一起被传递, 反序列化通知,发送到蒸馏器对象的to-u事件方法。 要从蒸馏器提取的数据创建自己类型的事件, 您只需要创建一个冷凝器类来接收数据。 冷凝器类不必对任何特定类进行子类化,只要 它们实现了stackdistiller.contractor.contracterbase中定义的方法。 如果你打电话到酒厂时没有把冷凝器传给酒厂, 它将为您创建默认DictionaryCondenser的实例。 这只是将事件格式化为一个普通的python字典。

##示例:

import json from stackdistiller import distiller from stackdistiller import condenser

config_file_name = “events_i_want.yaml” notification_string = open(‘a_notification_here.json’, ‘r’).read()

notification = json.loads(notification_string) config = distiller.load_config(config_file_name)

dist = distiller.Distiller(config, catchall=False)

#this is the default condenser. cond = condenser.DictionaryCondenser()

if dist.to_event(notification, cond):
# What get_event() returns is up to the condenser class. In this # case, it’s a dictionary. event = cond.get_event() print “Yay! An Event: %s” % str(event)
else:
print “Not something we are interested in. Ignoring.”

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

推荐PyPI第三方库


热门话题
Java Hibernate@ManyToMany mapping只在一个方向上在数据库中添加记录   java将文件上载到tomcat服务器外部的文件夹   java将摄像头捕获的图像上传到服务器   java如何创建Rest API并为进程添加时间延迟?   springmodulesvalidation0中缺少java注释包。8a源文件   如何在java中打印SOAP头   Spring security中的java自定义消息,包括UserDetailsService实现和异常   java如何使用Htmlunit中的表单数据登录站点   web如何在WildFly上自动运行java文件   java如何从已经使用另一个方法传递的参数的方法中获取返回值?   java我在JFrame上有一个索引越界。setContentPane   java中的循环序列/系列打印   java maven 3 webapp没有要运行的测试吗?   java CORS不允许POST请求   java再次在派生类中的Jackson中添加字段,该字段在基类中被忽略   爪哇坑测试显示仆从由于超时而异常退出   java寻找第10001个素数   java jboss是否更改web应用程序上下文根?