懒惰,无根,但强大的配置文件管理主要使用符号链接

confman的Python项目详细描述


说明

在没有根权限的情况下,在计算机之间惰性地同步配置文件, 在需要的时候仍然能够创建强大的规则。

虽然它主要用于管理个人配置文件(dotfiles)。 它可以用来将文件部署到几乎任何地方。

它被设计成几乎没有依赖关系,并且包含在一个小文件中。

默认情况下,它将在目标目录中创建指向文件的符号链接 在源目录中。 但是,有些文件名可以指示特殊操作(见下文)。

要求

Python2.6或更高版本(对于2.5,请尝试v0.1)。 不需要安装,尽管您可以安装它。

用法

该项目是可用的,但目前没有cli接口。 示例可在example.py和公共点文件存储库中找到。

一个简单的例子:

from confman import ConfigSource
c = ConfigSource("~/dotfiles", "~")
c.sync()

特殊操作

  • 名称以_开头的文件将被忽略。 这有助于为可编程操作提供数据。
  • 名称以.copy结尾的文件将是副本。 它将每次更新目标文件。
  • 名称以.copyonce结尾的文件将是副本。 如果任何一个文件被修改,它都不会更新目标文件。
  • 名称以.empty结尾的文件将是空文件。 如果任何一个文件被修改,它都不会更新目标文件。
  • 名称以.p.py结尾的文件是可编程操作。 它们包含python代码,并提供了一些特殊的方法。
  • 名称以.F结尾的文件是普通文件。 这意味着blah.p.py.F将以blah.p.py结尾, 以及f.F.F作为f.F。把 一个目录而不是它的所有子目录(有效地处理 作为文件的目录)。

特殊操作的所有匹配部分都被删除;myfile.empty将创建 名为myfile的空文件。

可编程操作

可编程动作可以做特殊动作所能做的一切,等等。 他们必须提出一个“转发商”,但在大多数情况下,帮助者是提供给 保持代码简短。

  • empty()引发空操作。
  • ignore()引发忽略操作。
  • redirect(filename)将创建指向所提供文件名的符号链接,并添加_redirect('myfile')将创建指向_myfile的符号链接。

文本/模板

text()template()都使用string.Template模板。

  • text(data)将把数据变量中的文本放入目标文件。
  • template(filename)的行为类似于text(),但从文件中获取数据。

它们必须分两步使用:

text('hello $name').render(hello='laurentb')

提供了一个warning变量,以帮助防止用户修改 自动生成的文件。

text('''# $warning
aaa=$var''').render(var='123')

将输出:

# WARNING: Do not edit this file, edit the template instead.
aaa=123

既然是python,如果你想的话可以使用外部库, 包括高级模板库,如mako

选项变量

您可以向confman提供一个options变量,它将被提供 到可编程动作。

from confman import ConfigSource
c = ConfigSource("~/dotfiles", "~", options={'hostname': 'myhostname'})
c.sync()

可编程的操作可以这样使用:

if options['hostname'] == 'myhostname':
    redirect('myfile')
else:
    ignore()

变量options不一定是dict,它可以是任何您想要的。

高级使用

要调试正在发生的事情(以及原因),可以执行以下操作:

from confman import ConfigSource
c.sync()
print repr(c)

更改默认行为

所有特殊操作都是可选的,可以配置或子类化。 例如,您可以更改“复制”操作的匹配:

import confman, re
# use .COPY instead of .copy
confman.CopyAction.MATCHED = re.compile(r"\.COPY$")
# use hg instead of git
confman.IgnoreAction.MATCHED = re.compile(r"_|\.hg|\.hgignore")

您还可以更改使用的类。 默认情况下,它是confman.ConfigSource.DEFAULT_CLASSES

import confman
confman.ConfigSource("~/dotfiles", "~", classes=[MyClass, confman.SymlinkAction])

开发

捐款可以以git补丁的形式发送到laurent@bachelier.name

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

推荐PyPI第三方库


热门话题
java Jboss LinkageError:加载程序约束冲突:解析重写的方法时   java Struts 1:如何使用表单bean设置<html:multibox/>值?   使用Fortify将字段设置为Null时的Java Null取消引用   用java对连接字符的图像进行分割   java无法使用Quarkus模拟,NullPointer异常,无法找到相关导入   html试图使iframe垫片与Java小程序上的CSS下拉菜单一起工作   java无法获取Base64。decodeBase64正常工作(Commons编解码器)   java为什么我不能通过点击打开jar文件?   java当用户第一次使用预先填充的sqlite数据库时,安卓应用程序如何添加新的列或表?   在tomcat中安装java GoDaddy SSL证书。。。没有与私钥匹配的证书   java试图实现一些伪代码、算法   java如何读取其他按钮id,避免所有转到第一个按钮   java使用单个   oop为什么Java Map不扩展集合?