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

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第三方库


热门话题
javajavax。艾尔。PropertyNotFoundException:   java为什么通过TCP发送的文件比它本身包含的文件包含更多的数据?   java为什么字符开关/案例不起作用?   php到java连接器,在哪里可以找到好的连接器   需要帮助Java简单规则形状面积计算器和if语句吗   macos如何从newstyle Oracle Java OSX捆绑包结构启动帮助页?   java既然所有的类都扩展对象,而对象是一个类,那么对象如何扩展对象呢?   java从JavaPairdd<String,Tuple2<Integer,Integer>>转换为JavaPairdd<String,Integer>   java微调器值未从一个活动传递到另一个活动   参数化类型的java数组   java不提供类。getCanonicalName是否存在性能问题?   java输入键JTextField   为什么我不能在java中调用nextLine()方法两次?   JTextPane中的java JProgressBar   java如何获取Crudepository实例?   用于提取几个<div>标记的java正则表达式   java如何使用JUnit Testrunner生成html图像   Go中Java静态属性的等价性