oslo.utils封装了OpenStack各个组件中常用的工具类或工具方法,包含了导入、文件、编码、线程、反射等多种工具类或方法。本文将详细介绍oslo.utils中重要的常用的功能。
1. 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做循环遍历,如果导入的模块不为空则返回。
2. uuidutils
uuidutils提供了一系列用于管理UUID的方法。主要包含以下三个方法:
- generate_uuid(dashed=True):生成一个随机的UUID,输入参数dashed表示UUID中是否需要包含"-"符号。
- _format_uuid_string(string):格式化UUID字符串,即将UUID去掉urn:、uuid,并将所有字母转换为小写。
- is_uuid_like(val):判断一个字符串是否是一个UUID。
3. 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编码。
4. 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补丁,则返回一个绿色线程的类;否则,返回普通线程的类。
5. 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开发中有效的避免了重复代码开发,使得代码具有更好的重用性。