跳转到主要内容

使用从Google电子表格中获取的事件填写和同步Google日历

项目描述

Haunt monster

https://img.shields.io/pypi/v/haunts.svg

它能做什么

使用从Google电子表格中获取的事件填写Google日历。或者反过来。

如何安装

pip install haunts

先决条件

要使用Google日历和Google电子表格API,您必须生成一个Google API应用程序并下载一个credentials.json

  • 运行 haunts --config。它将创建 ~/.haunts 文件夹和一个其中的 haunts.ini 文件。

  • 通过设置 CONTROLLER_SHEET_DOCUMENT_ID 编辑 haunts.ini 文件。

  • 访问 https://console.cloud.google.com/home/dashboard 并创建一个名为 haunts 的项目。

    • 在搜索栏中,搜索 凭据API和服务 并启用它。

    • 点击 创建凭据,将 桌面 设置为 类型,并将 json 文件保存为 ~/.haunts/credentials.json

    • 在搜索栏中搜索 Google Sheets APIGoogle Calendar API 并激活它们。

  • 正常运行 haunts。它将要求您对 Google Sheets 和 Google Calendar API 进行身份验证(浏览器应自动为您打开)。此操作将创建以下文件:~/.haunts/calendars-token.json~/.haunts/sheets-token.json

如何使用

使用以下命令可访问命令行帮助

haunts --help

使用示例

同步名为“五月”的工作表中的所有可用条目

haunts May

限制同步到特定日期的事件

haunts --day=2021-05-24 --day=2021-05-25 --day=2021-05-28 May

同时限制同步到某些项目(日历)

haunts --day=2021-05-24 --day=2021-05-25 --day=2021-05-28 --project="Project X" May

仅在定义了“删除”操作的行上执行

haunts --day=2021-05-24 --day=2021-05-25 --day=2021-05-28 --project="Project X" -a D May

获取报告而不是运行日历同步

haunts --execute report --day=2021-05-24 --day=2021-05-25 --day=2021-05-28 --project="Project X" May

仅报告集合中的加班条目

haunts --execute report --day=2021-05-24 --day=2021-05-25 --day=2021-05-28 --project="Project X" --overtime May

从所有配置的日历中 读取 今天的活动并将它们写入当前“五月”工作表

haunts --execute read May

从所有配置的日历中 读取 特定日期的活动并将它们写入当前“五月”工作表

haunts --execute read -d 2023-05-15 May

它是如何工作的

haunts 的功能取决于 --execute 参数。

在其默认配置下(如果省略 --execute 或等于 sync),命令将尝试访问您必须有权访问的 Google Spreatsheet(需要写入权限),特别是:它将一次读取该电子表格中的一个工作表。该工作表内的每一行都是一个事件,它也将创建在 Google 日历中。

或者您可以提供

  • --execute report.

    在这种情况下,它仅访问 Google 电子表格以收集数据。

  • --execute read.

    在这种情况下,它通过 读取 您的日历来为您填充 Google 电子表格。

工作表定义

引用的工作表必须包含一组列。标题名称很重要,但顺序无关紧要。任何额外的列都将被忽略。

提供了一个 示例工作表

将多个工作表分割成多个工作表是为了保持每个月份在不同的工作表中,但这不是严格检查的。

每个工作表都应该包含以下标题

日期

(日期)

事件将被创建的日期。如果找不到日期,则该行将被视为空白行(因此:跳过)

开始时间

(格式为 HH:MM 的时间字符串或为空) - 可选列

如果提供了,当前事件将从给定的时间开始。这将影响此行之后定义的事件

花费

(数字或为空)

事件将持续多长时间。留空以创建全天事件。

在执行报告时,全天事件长度受 OVERTIME_FROM 配置选项的影响

项目

(字符串)

项目名称,如 config 工作表中命名(见下文)

活动

(字符串)

事件的摘要

细节

(字符串,可选)

事件描述的附加文本

事件 id

(字符串)

留空。它将被生成的事件的 id 填充

链接

(文本)

留空。它将被填充为 Google 日历中事件的链接

操作

(字符)

见下文。如果为空:当从该行创建事件时,它将被填充为 I

配置项目

电子表格还必须包含一个配置表(默认名称为config,可以在.ini文件中更改),其中您必须放置至少两列(列标题与以下相同)

id

与该项目关联的Google日历的id。您必须具有此日历的写访问权限。

name

项目的名称,例如日历的可读名称。项目名称可以与相同的日历id关联多次(这样您就可以有别名)。

read_from(可选)

仅用于–execute read的用户。

从此(可选)日历id读取事件,而不是主日历。这使得从日历中读取事件但存储在其他日历中成为可能。

name列中的值是上述引入的Project列的有效值。

事件将如何填写

假设您运行以下命令

haunts --day=2021-07-08 July

haunts将访问.ini文件中配置的电子表格中名为July的工作表。只有当Date字段与–day参数匹配的行将被考虑(如果未提供此参数:将分析整个工作表内容)。

对于每个匹配的行,haunts

  • 生成一个新事件,从默认时间开始(这可以在.ini文件中配置)。事件将持续Spent小时

  • 下一个事件将从上一个事件结束的地方开始

  • 如果事件成功创建,将在Action列中放置一个“I”。这将使未来的执行忽略该行。

  • 其他列将按上述描述读取或填写。

操作

Action列中可以找到(或自己输入)的可能值

  • I

    ignore:执行将仅忽略此行。这通常由haunts本身自动填写,但您可以手动添加此值以忽略行。例如:对于您已经在日历上有的事件,但您想同时在电子表格中跟踪。

  • II

    ignore all:与I相同,但在–execute=report模式下也会忽略行

  • D

    delete:执行将清除此行的ActionEvent idLink单元格,并在Google日历中删除相关事件。由于也清除了Action,下一次执行很可能再次填写此行。将此用作一种简陋的编辑,以更改事件上的某些内容。

当同步日历时(–execute=sync),您可以使用此列通过提供–action选项来过滤要执行的行。例如

haunts --action D July

这将仅同步“Action”列包含删除(D)值的行。

报告功能

使用haunts -e report <SHEET_NAME>将读取源电子表格以收集统计数据。

允许使用-p-d参数。

结果表格可能如下所示

Date        Project      Total
----------  ---------  -------
2022-11-20  Calendar1        2
2022-11-20  Calendar2        1
2022-11-21  Calendar2        5
2022-11-21  Calendar3        3
2022-11-23  Calendar1       10
2022-11-24  Calendar1        8
2022-11-26  Calendar4        9
2022-11-27  Calendar4        8
2022-11-27  Calendar5        1
----------  ---------  -------
                            47

对于在表中找到的每个日历和日期,它将报告总耗时。

全天事件将被考虑,并且通过配置OVERTIME_FROM(默认为:不支持加班)和WORKING_HOURS(默认为:8)也支持加班。

如果您想报告加班,可以使用–overtime标志,并且只计算加班行。

待办事项和已知问题

  • 表中的行必须按升序排序

  • haunts(尚未?)不会检查已填写的时间段,因此事件可能会重叠

  • -e report 在Python端计算值,你知道的……我们在那里有一个更可靠的电子表格

  • -e report 是根据“开始时间”列来计算加班的,而可能最好是从事件中读取开始日期

为什么?

B-Open,我们就是这样注册我们的工作日志,以及参与多个Google日历中的项目。

好吧,但为什么叫“幽灵”?

幽灵是来自龙与地下城的一个怪物,在游戏的意大利语版本中翻译为“Presenza”。

但是,“presenza”在意大利语中与“参与”是同一个术语,所以我们如何称呼我们的工作日志。

而填写工作日志则困扰着我们。

https://raw.githubusercontent.com/keul/haunts/main/docs/pm.gif

路线图

以下(雄心勃勃)的路线图基于软件的成熟度水平,目前还没有时间表。

  • Alpha

    在我这里填写工作日志

  • Beta

    与GitHib Copilot集成,为我编写代码

  • 生产/稳定

    与GTP-4集成,代替我在Slack上回复同事

  • 成熟

    盈利

  • 不活跃

    (我的意思是我,而不是软件)

鸣谢

开发人员和贡献者。

  • keul (主要的日志不喜欢者)

  • francesconazzaro (如何使用Google API的传教士)

  • gcammarota (报告工具人)

历史

0.7.4 (2024-06-25)

  • 读取事件:在操作期间增加了一些冗长性

  • 读取事件修复:不要添加被个人日历用户拒绝参加的事件

0.7.3 (2024-06-13)

  • 读取事件修复:不要为未知项目设置I标志

  • 读取事件修复:事件未按开始时间排序

  • 读取事件修复:事件时间以UTC读取。现在使用配置的正确时区

0.7.2 (2024-05-01)

  • 修复了在使用操作同步时引入的错误

  • 读取事件:防止创建重复项

  • 读取事件:现在自动从个人日历读取事件

0.7.1 (2024-04-13)

  • 读取事件选择:如果用户在邀请列表中,只有当用户接受或未回答时才添加事件

  • 读取事件:当事件来自链接的日历时,不要放置事件ID(I操作标志)

0.7.0 (2024-04-09)

  • 添加了read选项到--execute

0.6.0 (2023-03-31)

  • 添加了II操作

0.5.0 (2022-12-04)

  • --action重命名为--execute

  • 新选项:--action用于根据“操作”列的值进行筛选

  • 新选项:--overtime仅报告加班时间

0.4.0 (2022-12-01)

  • 添加了-p参数,仅对特定项目(s)进行操作

  • 添加了--action,并实现了report操作(归功于@gcammarota)

  • 当删除具有操作D的事件时,增加了更详细的日志记录

0.3.1 (2022-11-21)

  • 错误修复:如果一行使用I操作,则忽略那里的一切

  • 当找不到项目时:不要停止幽灵,而是跳过该行,在执行结束时报告。解决了#14

  • 现在支持空行。解决了#12

  • 当找不到工作表时,显示可读的错误消息。解决了#11

0.3.0 (2022-05-02)

  • 修复:未使用默认的START_TIME。解决了#4

  • 新功能:新操作:D

  • 新功能:添加了“开始时间”功能。解决了#7

  • 修复:减少写入次数。解决了#6

  • 修复:当达到每分钟请求的最大次数时,不会出现严重的失败。参见#1

  • 新功能:添加了“–config”用于初始环境配置,改进了文档

0.2.1 (2022-02-10)

  • 修复了全天标准

0.2.0 (2021-07-29)

  • 添加了对全天事件的支持

0.1.0 (2021-07-10)

  • 初始发布

项目详情


下载文件

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

源分发

haunts-0.7.4.tar.gz (177.0 kB 查看哈希值)

上传时间

构建分发

haunts-0.7.4-py2.py3-none-any.whl (21.6 kB 查看哈希值)

上传时间 Python 2 Python 3

由支持