跳转到主要内容

为Python对象提供简单强大的标记。

项目描述

https://travis-ci.org/xolox/python-gentag.svg?branch=master https://coveralls.io/repos/xolox/python-gentag/badge.svg?branch=master

Python包gentag为任意Python对象提供简单强大的标记。在定义您的标记和关联的对象后,您可以查询标记的差异、交集和并集以选择特定的对象。该包目前已在cPython 2.6、2.7、3.4、3.5、3.6和PyPy(2.7)上进行测试。

状态

虽然gentag背后的想法从我2012年开始就在我的脑海中浮现,但我直到2018年才将其作为一个独立的Python包发布,这也解释了为什么我将初始版本作为测试版发布。展望未来

  • 目前版本可能已经很好地满足了我的需求,在某个时候,我可能会决定用“测试版”标签替换“稳定”标签,而不做任何实质性的更改。

  • 发布gentag是我朝着发布我长期以来一直在思考的另一个Python包迈出的第一步,如果我发现将gentag集成到该包中存在困难,我不会犹豫对gentag进行(可能是重大的)更改。

安装

gentag包可在PyPI上获得,这意味着安装应该非常简单

$ pip install gentag

安装 Python 包的方式有很多种(例如,按用户安装的站点包目录虚拟环境,或者全局安装),我无意在此讨论这些方法,所以如果你感到害怕,请在返回这些说明之前先了解你的选项;-)。

使用

以下各节概述了如何开始。有关 Python API 的更多详细信息,请参阅Read the Docs上提供的 API 文档。

创建作用域

要开始,你必须创建一个 Scope 对象

>>> from gentag import Scope
>>> tags = Scope()

Scope 对象的目的是将相关的标签组合成一个标签表达式的评估上下文。

定义标记

Scope 实例允许你定义标签和相关的对象

>>> tags.define('archiving', ['deb', 'tar', 'zip'])
>>> tags.define('compression', ['bzip2', 'deb', 'gzip', 'lzma', 'zip'])
>>> tags.define('encryption', ['gpg', 'luks', 'zip'])

查询标记

一旦定义了一些标签和相关对象,你就可以查询它们,例如,这里我们查询两个标签的并集

>>> tags.evaluate('archiving | encryption')
['deb', 'gpg', 'luks', 'tar', 'zip']

这些标签表达式可以变得任意复杂

>>> tags.evaluate('(archiving | encryption) & compression')
['deb', 'zip']

支持的运算符

以下运算符可以用于组合标签

运算符

集合运算

&

交集

|

并集

-

差集

^

对称差集

这些运算符创建新的 Tag 对象,可以进一步组合。虽然以 Python 语法在运行时组合的标签没有名称,但可以使用 Scope.define() 方法定义命名的复合标签(见下文)。

默认标记

有一个特殊的标签始终可用,名称为“all”。正如你可能猜测的那样,它提供对包含所有标记对象的集合的访问

>>> tags.evaluate('all')
['bzip2', 'deb', 'gpg', 'gzip', 'luks', 'lzma', 'tar', 'zip']

这可以用于选择除特定标签之外的所有对象

>>> tags.evaluate('all - encryption')
['bzip2', 'deb', 'gzip', 'lzma', 'tar']

命名复合标记

上面查询标签部分中显示的表达式表明,可以使用集合运算符组合标签。你还可以基于表达式定义一个命名的标签

>>> tags.define('flexible', 'archiving & compression & encryption')

这样的命名复合标签可以像常规标签一样评估

>>> tags.evaluate('flexible')
['zip']

你还可以在其他复合标签内部嵌套复合标签。

历史

用法部分中的示例实际上并不非常有用,这部分是因为我不想让复杂的内容分散读者的注意力,让他们分心于使用说明;-)。

2012年,当我想要查询一个包含超过200个按以下方面分类的 Linux 服务器名称的数据库时,触发了 gentag 背后想法的实际用例

  • 分发者 ID(如“debian”或“ubuntu”这样的字符串)。

  • 发行版代号(如“trusty”或“xenial”这样的字符串)。

  • 服务器的角色(数据库、邮件服务器、Web 服务器等)。

  • 服务器的环境(生产、开发)。

轻松选择服务器子集以便 Python 程序快速操作,迅速发展成为选择服务器组的主要界面。从那时起,我一直想在其他地方使用类似的功能,但发现开发一次性解决方案的工作量太大。这就是 gentag 诞生的原因。

关于名称

gentag 的名称代表“生成标签”,因为这个包允许从现有标签生成(组合)新标签。我想感谢我的同事 Seán Murphy 想出这个名称;-)。

联系

gentag 的最新版本可在 PyPIGitHub 上获得。文档托管在 Read the Docs。有关错误报告,请创建GitHub 上的问题。如果您有任何问题、建议等,请随时通过电子邮件peter@peterodding.com发送给我。

许可

本软件根据 MIT 许可协议 许可。

© 2018 Peter Odding.

下载文件

下载适合您平台文件的文件。如果您不确定选择哪一个,请了解有关 安装软件包 的更多信息。

源代码分发

gentag-2.0.tar.gz (13.1 kB 查看哈希值)

上传时间 源代码

构建分发

gentag-2.0-py2.py3-none-any.whl (14.7 kB 查看哈希值)

上传时间 Python 2 Python 3

由支持