Oslo系列之oslo.utils

每个人的一生都有许多梦想,但如果其中一个不断搅扰着你,剩下的就仅仅是行动了。

oslo.utils封装了OpenStack各个组件中常用的工具类或工具方法,包含了导入、文件、编码、线程、反射等多种工具类或方法。本文将详细介绍oslo.utils中重要的常用的功能。

importutils

importutils提供了多个方法用于导入python包、类、对象等操作。常用方法如下:

  • import_class(import_str):导入一个类,输入一个”包.类”的字符串,返回其指定的类。
  • import_object(import_str, args, *kwargs):导入一个对象,第一个输入参数为”包.类”的字符串,之后的参数用于创建对应类的对象,该方法即通过import_class(import_str)方法返回一个指定的类,然后根据args、kwargs等参数创建一个类的对象返回。
  • import_object_ns(name_space, import_str, args, *kwargs):尝试从一个默认的namespace中导入一个对象,首先通过”name_space.import_str”导入类,如果没找到相应的类则通过”import_str”导入类,然后创建指定的类对象返回。
  • import_module(import_str):导入一个模块,输入一个表示模块路径的字符串,返回对应的模块。
  • import_versioned_module(module, version, submodule=None):导入指定版本的模块,导入的格式为”{module}.v{version}.submodule”。
  • try_import(import_str, default=None):尝试导入指定模块,如果导入失败,返回default参数指定的模块,如果default未指定,默认返回None。
  • import_any(module, *modules):尝试从一组模块中导入一个模块,对(module, ) + modules做循环遍历,如果导入的模块不为空则返回。

uuidutils

uuidutils提供了一系列用于管理UUID的方法。主要包含以下三个方法:

  • generate_uuid(dashed=True):生成一个随机的UUID,输入参数dashed表示UUID中是否需要包含”-“符号。
  • _format_uuid_string(string):格式化UUID字符串,即将UUID去掉urn:、uuid,并将所有字母转换为小写。
    is_uuid_like(val):判断一个字符串是否是一个UUID。

encodeutils

encodeutils为OpenStack个组件提供了一系列编码相关的操作。常用方法如下:

  • safe_encode(text, incoming=None, encoding=’utf-8’, errors=’strict’):将指定的text或bytes数据设置为encoding指定的编码,其中incoming为text当前的编码,如果未指定则使用系统默认编码或标准输出编码。
  • safe_decode(text, incoming=None, errors=’strict’):将指定text解码。
  • to_utf8(text):将指定的text设置为utf-8编码。
  • exception_to_unicode(exc):将指定异常信息设置为unicode编码。

eventletutils

eventletutils提供了一系列多线程和协程的工具方法。常用方法如下:

  • is_monkey_patched(module):确定模块是否使用eventlet补丁。
  • fetch_current_thread_functor():获取当前线程,如果使用eventlet补丁,则返回当前的eventlet绿色线程;否则,返回当前的普通线程。
  • warn_eventlet_not_patched(expected_patched_modules=None, what=’this library’):如果使用了没有补丁了eventlet,则提出警告。
  • Event():生成一个提供线程操作API的类,如果使用eventlet补丁,则返回一个绿色线程的类;否则,返回普通线程的类。

fileutils

fileutils提供了一系列方便的文件操作方法。常用的方法有:

  • ensure_tree(path, mode=_DEFAULT_MODE):创建一个文件夹,path指定文件夹路径,mode指定文件夹权限。
  • delete_if_exists(path, remove=os.unlink):删除一个文件,忽略文件是否存在。
  • write_to_tempfile(content, path=None, suffix=’’, prefix=’tmp’):创建一个临时文件保存数据。
  • compute_file_checksum(path, read_chunksize=65536, algorithm=’sha256’):计算一个文件的校验和,其中path指定文件路径,read_chunksize指定从文件中一次读取的最大长度,algorithm指定了可用的算法。
  • remove_path_on_error(path, remove=delete_if_exists):检测到任何错误即删除指定文件。

除了上述utils方法之外,oslo.utils还提供了excutils异常处理工具方法,strutils字符串处理工具方法,netutils网络IP、CIDR、mac地址等的处理工具方法,imageutils镜像处理工具类等多种工具类和工具方法,在此不再赘述,有需要的同学可以查看oslo.utils的文档和源码。这些工具类或工具方法虽然实现简单,但是在OpenStack开发中有效的避免了重复代码开发,使得代码具有更好的重用性。

原文链接:https://blog.csdn.net/Bill_Xiang_/article/details/78402660

-------------本文结束 感谢您的阅读-------------
作者Magiceses
有问题请 留言 或者私信我的 微博
满分是10分的话,这篇文章你给几分