用于解析对象名称、对象名称和管理插件/扩展的实用程序集合。
项目描述
© 2014-2019 Alice Bevan-McGregor 和贡献者。
1. 什么是骨髓包?
这个包是用于处理对象查找、解析对象名称以及管理从简单到复杂的插件架构的实用程序的组合。值得注意的是,它包括一个用于扩展的依赖图系统和用于查找合格对象名称的助手。
该库在可能的情况下进行了全面的单元测试。
2.安装
安装骨髓.package很容易,只需在终端中执行以下命令:
pip install marrow.package
注意:我们强烈建议在使用 Python 开发时始终使用某种容器、虚拟化或沙盒环境;在系统范围内安装东西很糟糕(出于各种原因)十有八九。我们更喜欢轻量级的virtualenv,其他人更喜欢像Vagrant这样健壮的解决方案。
如果你在你的应用程序的 setup.py文件中,在setup()调用的install_requires参数中添加了 marrow.package ,当你自己的应用程序或库安装时,Marrow 包将被自动安装并可用。我们建议使用“小于”版本号,以确保更新时没有意外的副作用。使用骨髓包<2.1获取当前版本的所有错误修复, 使用骨髓包<3.0获取错误修复和功能更新,同时确保不安装大的重大更改。
2.1。开发版
开发在GitHub上的 骨髓.package项目中进行。那里提供了问题跟踪、文档和下载。
安装当前的开发版本需要Git,一个分布式源代码管理系统。如果您有 Git,您可以运行以下命令来下载开发版本并将其链接到您的 Python 运行时:
git clone https://github.com/marrow/package.git (cd package; python setup.py develop)
然后,您可以随时升级到最新版本:
(cd package; git pull; python setup.py develop)
如果您想进行更改并将其贡献回项目,请分叉 GitHub 项目,进行更改并提交拉取请求。此过程超出了本文档的范围;有关更多信息,请参阅 GitHub 的文档。
3. 获取对象引用
对象引用描述解析对象所需的模块和属性路径。例如,foo:bar是一个描述在从模块中检索名为“bar”的对象之前导入“foo”的引用。在 Python 3.3+ 上,提供了一个有用的快捷方式__qualname__,它可以加快查找速度。
例如,让我们定义一个类并获取对它的引用:
from marrow.package.canonical import name
class Example(object):
pass
assert name(Example) == '__main__:Example'
您可以根据平台检索对以下任何类型对象的引用:
- 模块级别:
班级
类实例
类方法
类静态方法
功能
实例类方法
实例方法
实例静态方法
嵌套类和方法
关闭
4. 解析对象引用
提供了两个实用程序,允许您解析对对象的字符串路径引用。第一个很简单:
from marrow.package.loader import traverse
assert traverse({'foo': {'bar': 27}}, 'foo.bar') == 27
这将在字典中搜索“foo”元素,然后是“bar”元素。
traverse函数需要一些额外的可选参数。如果executable为True ,则遇到的任何可执行函数都将在没有参数的情况下执行。遍历将继续对该调用的结果。您可以根据需要更改分隔符,即使用分隔符参数更改为“/”。
默认情况下,带有下划线前缀的属性(但不是数组元素)是禁忌。他们不会解决,引发 LookupError。您可以通过将保护设置为False来允许这些。
某些允许:如果“路径段”是数字的,则将其视为数组索引。如果属性查找失败,它将使用数组表示法重新尝试该对象并从那里继续。这使得查找非常灵活。
4.1。解析导入引用
更完整的名称解析 API 使用load函数,它采用与traverse相同的可选关键字参数。此外,此函数接受一个可选的命名空间来搜索其中的插件。例如:
from marrow.package.loader import load
from pip import main
# Load class Foo from example.objects
load('example.objects:Foo')
# Load the result of the class method ``new`` of the Foo object
load('example.objects:Foo.new', executable=True)
# Load the "pip" command-line interface.
assert load('pip', 'console_scripts') is main
提供命名空间不会阻止显式对象查找(点冒号表示法)工作。
4.2. 缓存导入引用
提供了一个作为导入缓存的属性访问字典:
from marrow.package.cache import PackageCache
from pip import main
cache = PackageCache('console_scripts')
assert cache.pip is main
assert cache['pip'] is main
assert len(cache) == 1
assert 'pip' in cache
4.3. 延迟导入引用属性
您可以在从实例取消引用时延迟加载和缓存对象引用,使用来自骨髓.package.lazy模块的延迟加载实用程序。使用按位置传入的对象引用分配调用此函数的结果:
class MyClass:
debug = lazyload('logging:debug')
或以句点为前缀的遍历属性路径(使用骨髓.package.loader:traverse ):
class AnotherClass:
target = 'logging:info'
log = lazyload('.target')
任何附加参数都会传递给对load()的最终调用。这个实用程序建立在一个更简单的基础上,它也提供了经过充分测试的重用,lazy,一个像@property这样的装饰器,它将缓存结果,使用线程安全锁定来确保只对装饰函数进行一次调用, 每个实例。
5. 管理插件
这个包提供了两种处理插件和扩展的主要方法,第一种很简单,第二种提供扩展的完全依赖关系图。
5.1。插件管理器
PluginManager类有两个参数:第一个是要搜索的入口点命名空间,第二个是可选的可迭代文件夹,用于添加到已安装包的 Python 搜索路径中,从而允许您的应用程序拥有一个专用的插件文件夹。
它提供了一个register方法,该方法将名称和对象用作插件并在内部注册它,支持检索的属性和类似数组的表示法,以及插件的迭代(包括找到的所有入口点插件和任何自定义注册那些)。
5.2. 扩展管理器
在更高级别是一个名为ExtensionManager的PluginManager子类,它还公开了一种排序方法,该 方法能够解析遵循简单协议的扩展的依赖顺序:具有与以下内容匹配的属性或数组元素,所有这些都是可选的:
提供- 声明描述插件提供的功能的标签
需要- 删除此扩展功能必须存在的标签
uses — 声明必须在此扩展之前评估的标签,但不是硬性要求
first — 声明此扩展是所有其他非第一扩展的依赖项
last — 声明此扩展依赖于所有其他非最后扩展
excludes — 声明不能在其他插件中出现的标签,以便该插件可用
6.版本历史
1.0 版
初始发行。 结合其他 Marrow 项目的实用程序。
版本 1.0.1
扩展的装饰器支持。 添加了新的代码路径和测试以涵盖修饰函数的规范化。
版本 1.0.2
诊断信息。 删除了无关的诊断信息。
1.1版
添加了惰性评估。 有两个新的助手用于缓存@property样式的属性和对象引用的惰性查找。
1.2版
已弃用的 Python 2.6 和 3.3。虽然没有进行特别的向后不兼容的更改;由于 setuptools 不再支持这些版本,这些版本现在很难/不可能测试。
允许扩展声明排除。不能为扩展可用而定义的标志。
2.0 版
更新了最低 Python 版本。Marrow 包现在需要 Python 3.5 或更高版本。
删除了 Python 2 支持和特定于版本的代码。该项目已更新为现代 Python 打包标准,包括现代命名空间使用。现代命名空间与以前的命名空间机制完全不兼容;该项目不能与任何兼容 Python 2 的 Marrow 项目同时安装。
广泛的类型注释和开发中的验证。在没有优化的情况下运行(Python 或PYTHONOPTIMIZE环境变量的-O参数)类型注释将被验证。
降低了测试的脆弱性。以前的测试使用了console_scripts命名空间,这对于其他已安装库的存在来说是脆弱的,例如numpy破坏了 Travis 上的测试。
7. 执照
Marrow Pacakge 已在 MIT 开源许可下发布。
7.1。麻省理工学院许可证
版权所有 © 2014-2019 Alice Bevan-McGregor 和贡献者。
特此免费授予任何人获得本软件和相关文档文件(“软件”)的副本,以不受限制地处理本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或出售本软件的副本,并允许向其提供本软件的人这样做,但须符合以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或大部分内容中。
本软件按“原样”提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任承担任何责任,无论是在合同、侵权或其他方面,由本软件或本软件的使用或其他交易引起或与之相关。软件。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
骨髓.package-2.0.1- py2.py3 -none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 20fe27e1e8a352249f92e7fd49a0e97ce69212197bc707ee48455e4e85b2dc00 |
|
| MD5 | 22f379b8be2c570c2292a903363b1298 |
|
| 布莱克2-256 | fb200fa60d1d8b2478d76fcd50508af63e0c1aa1ead84516a449c07f9484d0c2 |