用于管理自动导出个人数据的工具

export-manager的Python项目详细描述


出口经理

此工具有助于管理个人数据的自动导出/备份(例如,从Todoist或Goodreads等云服务)。在

它可以处理:

  • 根据计划运行导出(注意:export_manager本身必须通过cron/launchd/etc等调度程序运行)
  • 保持数据和日志井然有序
  • 清理旧数据
  • 收集指标并生成报告,以帮助您查看备份是否正常工作

术语:

  • ^{str}和特定数据包的{/str}和相关数据集的集合
  • parcel:一次性导出的数据(例如,您在2020-0215T01:02:03Z检索到的Todoist数据)和相关元数据

入门

  1. 安装python3和pip
  2. pip install export_manager
  3. 使用该工具为每个数据集设置目录:
    mkdir ~/exports
    export_manager init ~/exports/todoist
    export_manager init ~/exports/goodreads
    # etc. The names can be anything you want, those are just examples.
    这将创建如下目录结构: ^{pr2}$ 在
  4. 编辑每个子目录中的config.toml文件,以指定计划和要运行的命令。 例如,如果安装exporteer_todoist,则可以使用以下配置从Todoist导出数据:
    # Command to invoke. $PARCEL_PATH will be set to ~/exports/todoist/data/DATETIME# $DATASET_PATH is also available and will be set to ~/exports/todoistcmd="TODOIST_API_TOKEN=your_token exporteer_todoist full_sync > $PARCEL_PATH.json"# Only get a new export if the last one is at least 1 day old.interval="1 day"# Only keep the most recent 5 successful exports.# If you don't specify this, export_manager will not delete old exports.keep=5
  5. 运行export_manager process ~/exports/*运行所有到期的导出和清理。 设置cron或launchd作业以定期运行此作业。在

指标和报告

你不应该相信你的备份,除非你在测试它们。 测试必须涉及一些手动操作-如果它是完全自动化的,你永远不会知道自动化是否会崩溃。 但理想情况下,您应该自动化收集所有证据以证明备份正在工作的过程,这样您所要做的就是定期查看它并说“是的,看起来不错。”

export_manager提供一个可以生成的报告来帮助您:

export_manager report ~/exports/*

这将:

  • 警告您任何明显的问题,例如数据集过期或失败。在
  • 告诉您最近成功导出每个数据集的时间。在
  • 向您展示每个数据集最近成功包裹的指标,并将其与7天和180天前的数据进行比较。在

默认情况下,度量包括生成地块时的字节数和文件数。在

您还可以为config.toml文件中的每个数据集定义自定义度量。 例如,对于json数据,可以使用jq来计算json的一些元素。 以下配置将创建一个名为“tasks”的度量,以跟踪上面配置的todoist导出中的任务数:

metrics.tasks.cmd="jq '.items | length' $PARCEL_PATH"

process命令在每次生成新包时收集所有配置的度量,并将它们存储在metrics.csv中。在

在Git中跟踪包裹

如果将数据集目录设为git repo,并在config.toml中设置git = true,则成功导出的数据文件以及指标.csv文件,将在每次更改后提交。在

直接摄取文件

有些服务很难从自动导出,但确实提供了一种手动导出数据的方法。 导出管理器可以为您跟踪这些手动导出。 为了最小化手动工作量,可以将其配置为自动拉入与特定路径模式匹配的任何文件,这样您只需将手动导出的文件转储到该位置。 例如,如果将以下内容放入config.toml

ingest.paths=["/Users/me/Dropbox/*.opml"]

然后,每次运行process命令时,导出管理器都会检查/Users/me/Dropbox中带有该后缀的文件。 如果找到了,它将将它们移动到dataset目录中,为它们分配一个包ID,对它们运行度量,等等

(默认情况下,文件的修改时间用作地块ID。 如果您希望使用当前日期/时间作为包裹ID,可以将ingest.time_source = "now"放在config.toml中。)

附加文件

命令li上提供了每个命令的帮助ne和在doc folder中。在

您可以以编程方式使用导出管理器。 最重要的模块是export_manager.dataset。在

发展

设置:

  1. 安装python3和pip
  2. 克隆回购
  3. 我建议创建一个venv:
    cd export_manager
    python3 -m venv venv
    source venv/bin/activate
    
  4. 安装依赖项:
    pip install .
    pip install -r requirements-dev.txt
    

要运行单元测试:

PYTHONPATH=src pytest

(如图所示重写PYTHONPATH可确保测试针对src/目录中的代码而不是包的已安装副本运行。)

要运行CLI,请执行以下操作:

PYTHONPATH=src python -m export_manager ...

贡献

欢迎在GitHub上的https://github.com/brokensandals/export_manager上报告错误和请求请求。在

许可证

根据MIT License的条款,这是开源的。在

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

推荐PyPI第三方库


热门话题
java如何向类添加适用于该类中所有对象的单个@XmlAttribute注释   java未处理的继续记录跟踪类org。阿帕奇。波伊。hssf。记录塔比德雷科德   Eclipse中java代码的rest连接超时,而不是浏览器的rest连接超时   数组我的Java插入排序逻辑有什么问题?   java使用Http客户端进行请求,该请求返回内容类型为“application/vnd.msexcel”的jsp页面   java连接到数据库(Derby)   url编码如何使用java发布而不使用url编码url的查询部分   正则表达式使用Java替换字符串中的模式   Java中声明数组的区别   java hibernate ReferenceColumnNames未映射到单个属性   java如何对地图集合的分层键进行排序?   java ValueAnimator在我的手机上似乎工作不正常   java如何使用Hibernate Lucene搜索访问实体中外键的排序字段名?   在同一台机器上以不同的JAVA路径运行两个Tomcat   java如何在Eclipse中记录最新的git提交哈希?   java为什么我必须将JRE、编译器和facet全部降级为Java1。8在Eclipse中创建简单Web服务时   无法将java DataBufferInt解析为类型