tracklater通过组合线索并在一个简单的时间轴视图上显示您的一天,帮助您跟踪事实发生后的时间。

tracklater的Python项目详细描述


tracklater

忘了跟踪你的工作时间?tracklater通过组合线索并在一个简单的时间轴视图上显示您的一天,帮助您跟踪事实发生后的时间。

初始版本支持从

时间项可以导出到

  • TOGGL

问题和项目/客户可以从

  • 吉拉
  • 泰加
  • TOGGL(项目/客户)

背景

每个用时间追踪工作的人都知道,这可能是一种真正的痛苦,特别是如果你是一个像我这样健忘的人。我几乎从来不记得启动计时器,当我启动时,我肯定不会记得关闭它们。

当与多个客户机一起工作时,正确地跟踪您的时间并能够按客户机区分所有任务是至关重要的(计费方面)。对于在办公室为同一个客户工作9-5个小时而不需要分别跟踪每个任务的人来说,这个应用程序可能有点过头了。

考虑到这一点,我构建了一个基本的应用程序,使用百里香进行被动时间跟踪,使用toggl api进行导出。我很快发现我的工作流程得到了很大的改进,每周只需考虑1-2次时间跟踪。我现在已经使用这个应用程序大约一年了,时不时地构建一个新的时间模块。

tracklater提供一组基本功能,帮助所有时间跟踪者按顺序获取时间表:

  • 时间线概述,这通常是跟踪软件中缺少的
  • 使用自动检测的项目和响应式用户界面,轻松添加时间项
  • 把你所有的面包屑,轨迹,线索,足迹放在一个地方

实施说明

每个模块都按group分隔它们的问题、时间条目和项目。这使得模块间的通信变得简单:例如,在git存储库中为groupx所做的提交将归于对应于groupx的toggl项目。

是任意的,由用户在创建其设置文件时决定。选择groups数量的好方法 为每个客户机/工作项目创建一个group

虽然所有模块都是可选的,但TimeLater的一个重要主干是thyme。 百里香模块假设一个实现,其中每天都存储在名为YYYY-MM-DD.json的文件中。建议为此设置一个自动百里香跟踪脚本。

我用一个基本的脚本来运行百里香。经过大约一年的跟踪,它有了一些发展:有时百里香跟踪失败,破坏了整个文件, 所以我绝对推荐使用这个脚本。https://gist.github.com/Eerovil/36d109d531659d24bfafea7111b12e90

要每隔20秒自动运行百里香,可以将其添加到crontab中。Windows用户可能可以使用服务(不要引用我的话)。

* * * * * DISPLAY=:0 /home/eero/Documents/thyme/track-thyme-log.sh
* * * * * ( sleep 20; DISPLAY=:0 /home/eero/Documents/thyme/track-thyme-log.sh )
* * * * * ( sleep 40; DISPLAY=:0 /home/eero/Documents/thyme/track-thyme-log.sh )

运行

克隆存储库,安装在virtualenv中并运行:

git clone git@github.com:Eerovil/TrackLater.git
cd TrackLater
mkvirtualenv tracklater -p python3.7 -a .
pip install .
tracklater

启动服务器的附加示例命令。必须在根目录中运行。

FLASK_APP=tracklater python -m flask run

用法

从百里香中选择时间条目,然后单击导出。

您也可以双击时间线来创建条目。通过选择、拖动等方式进行编辑。

贡献

构建和运行项目很容易,因为您可以简单地克隆repo并开始制作prs。

如果您的工作流与我的工作流不完全相同,并且您需要其他功能,请创建问题,我们可以开始支持您所需的模块。

对未来支持的想法:

  • JIRA时间跟踪
  • 也许是一个Chrome页面历史分析器?

设置指南

创建一个名为user_settings.py的文件到根文件夹(包含app.py

要加载测试设置,可以将from test_settings import *添加到文件末尾。这将使用测试数据,不会进行实际的api调用。

每个模块H作为自己的设置dict,包含每个组的设置dict。还有 用于非组特定设置的global键。

此示例设置文件包含两个组:group1group2

在示例workers工作流中,group1的问题从jira获取,而group2的问题从taiga.io获取, 所以你会发现jira设置没有group2键,而taiga设置没有group1键。

时间跟踪(计费)通过TOGGL完成。而且,这两个组碰巧都有自己的工作区,显然还有自己的git存储库。


# edit to your liking and save as ~/.config/tracklater.json. Remove the comments

{
    "TESTING": false,
    "ENABLED_MODULES": [
        "thyme",
        "gitmodule",
        "toggl",
        "taiga",
        "jira",
        "slack"
    ],

    "UI_SETTINGS": {
        "toggl": {
            "global": "#E01A22"
        },
        "thyme": {
            "global": "#1aef65"
        },
        "gitmodule": {
            "global": "#F44D27"
        },
        "slack": {
            "global": "#4A154B"
        }
    },
    "TOGGL": {
        "global": {
            "API_KEY": "your-api-key"
        },
        "group1": {
            "NAME": "First Group",
            "PROJECTS": {
                "Development": "default",
                "Bug fixing": "bug"
            }
        },
        "group2": {
            "NAME": "Second Group",
            "PROJECTS": {
                "Development": "default",
                "Bug fixing": "default"
            }
        }
    },

    "GIT": {
        "global": {
            # Only commits made by users with EMAILS will be shown
            "EMAILS": ["firstname.lastname@email.com"]
        },
        "group1": {
            # Full path to the git repo
            "REPOS": ["/full/path/to/group1/repo"]
        },
        "group2": {
            "REPOS": ["/full/path/to/group2/repo"]
        }
    },

    "JIRA": {
        "group1": {
            # Each group must have these settings
            "CREDENTIALS": ["username", "password"],
            "URL": "https://group1.atlassian.net",
            "PROJECT_KEY": "DEV"
        }
    },

    "TAIGA": {
        "global": {
            "CREDENTIALS": ["username", "password"]
        },
        "group2": {
            # project_slug can be found in the URL
            "project_slug": "username-group2"
        }
    },

    "THYME": {
        "global": {
            # Directory containing the json files generated by thyme
            "DIR": "/full/path/to/thyme/dir"
        }
    },

    "SLACK": {
        # Each group should contain a workspace to match all messager to a group
        "global": {
            # Global catch-all workspace for all groups
            "API_KEY": "legacy-slack-api-key-global",
            "USER_ID": "your-user-id"
        },
        "group2": {
            # Messages in this workspace will be matched to group2
            "API_KEY": "legacy-slack-api-key-group2",
            "USER_ID": "your-user-id"
        }
    }
}

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

推荐PyPI第三方库


热门话题
java启动时加载值示例代码(xml)   java什么是视图索引?当视图组将视图添加到索引1时会发生什么   java如何调用HttpUrlConnection disconnect()   java将日期转换为毫秒,givse错误结果   java正在处理“.”上的IP地址拆分字符串性格   java proguard不创建输出jar   编译中的Java默认修饰符   java中的管道I/O流   java为集合返回的最佳迭代器类型?拆分器,流?   java如何修改JTextArea中tab键的行为?   来自Android Studio HTML文档的外部应用程序中的java Open Local PDF   组件和轻量级/重量级之间的java差异   java在有向图中查找模式   python可以创建运行服务器端程序的Java Web Start应用程序吗?   NiFi中基于内容的java更新属性