log-time-to-tempo


Namelog-time-to-tempo JSON
Version 0.0.8.post1 PyPI version JSON
download
home_pageNone
SummaryLog your work time to tempo from the command line.
upload_time2025-07-09 13:49:04
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseNone
keywords cli jira tempo
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Log Time to Tempo

[![PyPI - Version](https://img.shields.io/pypi/v/log-time-to-tempo.svg)](https://pypi.org/project/log-time-to-tempo)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/log-time-to-tempo.svg)](https://pypi.org/project/log-time-to-tempo)

-----

Log your time to tempo on a self-hosted Jira instance from the convenience of your command line.

## Requirements

This tool is developed against

- Jira Server v9.4.17
- Tempo Timesheets 17.2.0 plugin

Any deviation from that setup might lead to issues.
Feel free to provide PRs to support other configurations.

## Installation

```console
pip install log-time-to-tempo
```

## Getting Started

To initialize authentication and local caches of projects and issues, run

```
lt init
```

If you want to enable shell completion (which makes picking issues much easier), run

```
lt --install-completion
```

## Usage

### Log Time

```sh
# log full workday to default issue
lt log
# log 2h to default issue
lt log 2h
# log 2h to specific issue
lt log 2h TSI-1
# log with custom message
lt log -m "working on foo" 2h TSI-1
# log multiple entries at once
lt logm MyProject:6,OPT:2
```

### Check Logged Time

```sh
# show logged time per issue
lt stats
# show logged time per issue for current month
lt stats month
# ..also show individual worklogs
lt stats -v
```

### Check Budget (i.e. logged and remaining time per person)

```sh
# show remaining time
lt budget TS-XXXXX
```

### Set Aliases

```sh
# set alias name for a commonly used issue
lt alias TSI-7 OPT
lt alias TS-10402 ProjectName
# unset aliases
lt alias --unset ProjectName
# show all aliases
lt alias
```

## Configuration

The `lt config` command allows to change the default behavior, either system wide (`--system`) or in the local directory and subdirectories.

Here are a couple of usage examples:

```sh
# Set custom jira instance for all projects (i.e. system-wide)
lt config --system JIRA_INSTANCE https://jira.my-server.com

# Set default issue for worklogs created from current directory (and subdirectories)
lt config LT_LOG_ISSUE TSI-7

# Start all your worklogs at 10am (instead of the default 9am)
lt config --system LT_LOG_START 10

# Remove all custom configuration
lt config --unset
```

## Changes

### [latest]

[latest]: https://github.com/jannismain/log-time-to-tempo/commits/main/

<!-- ### [0.0.X] - 202X-XX-XX
[0.0.X]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.X -->

### [0.0.8] - 2025-07-09

[0.0.8]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.8

- `stats` command includes sparkline visualizations to show daily time patterns
- `budget` command shows logged and remaining hours for a given issue
- fix redundant display of configuration options in `config` command error messages

### [0.0.7] - 2025-04-10

[0.0.7]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.7

- `list` command produces output in table format
- show issue summary when suggesting similar issues
- detect overlaps with existing issues and warn user
- fix issue, where a custom default start time would prevent dynamic start time based on today's last worklog

### [0.0.6] - 2025-03-20

[0.0.6]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.6

- when logging to an issue that does not exist, provide suggestions (based on similar aliases and issue summaries)
- add `lt logm` command to log multiple entries at once (e.g. `lt logm MyProject:6,OPT:2`)

### [0.0.5] - 2025-03-03

[0.0.5]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.5

- fix `lt list` command

### [0.0.4] - 2025-01-14

[0.0.4]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.4

- on `lt alias --unset` completion, only existing aliases are suggested
- fix keyring issues
  - keyring provided by `1password-cli` could not be used to persist token → default to system keyring on macOS
  - keyring fails on platforms other than macOS → alternative keyring backends are used.
- fix issue where `lt init` would update cache twice.

### [0.0.3] - 2024-09-12

[0.0.3]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.3

- add `lt stats` command to aggregate spent time per issue
- add `lt alias` command to provide more meaningful aliases for issue descriptions
  - `lt alias --unset` to remove previously set aliases
- renamed relative date ranges
  - `week` → `last_7_days`
  - `month` → `last_30_days`
  - `week_to_date` → `week`
  - `month_to_date` → `month`
- support abbreviations for relative date ranges (e.g. `l7` for `last_7_days`)
- fix issue where app dir would not be created on first run
- fix issue with formatted durations, where days would not be accounted for
- fix issue where token was saved to third-party keyrings (e.g. 1Password)
- parse more relative dates (e.g. "3 weeks ago") (using [`dateparser.parse`][dateparser.parse])

### [0.0.2] - 2024-04-17

[0.0.2]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.2

- add `log --lunch` option to reduce the amount of math you have to do in your head when entering your time
  - lunch will simply be deducted from the total duration and your end time
- rename `log --from-time '' --to-time ''` options to `log --start '' --end ''`
- `log --day` is now case-insensitive (so `Mo` will be recognized as `monday`)
- add `--version` flag

### [0.0.1] - 2024-03-25

[0.0.1]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.1

- authorize with JIRA instance using personal access token
  - prompt for token and persist using [`keyring`][python-keyring] package
- create and list worklogs via tempo's REST API
- list projects and issues using [`jira`][python-jira] API
- cache projects and issues for faster responses and shell completion

[python-jira]: https://github.com/pycontribs/jira
[python-keyring]: https://pypi.org/project/keyring/
[dateparser.parse]: https://dateparser.readthedocs.io/en/latest/#popular-formats

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "log-time-to-tempo",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "cli, jira, tempo",
    "author": null,
    "author_email": "Jannis Mainczyk <jannis.mainczyk@codecentric.de>",
    "download_url": "https://files.pythonhosted.org/packages/81/b9/c47c2428dc962bb130f6befcd6db163e87b111424244a338d66e3e8ebdee/log_time_to_tempo-0.0.8.post1.tar.gz",
    "platform": null,
    "description": "# Log Time to Tempo\n\n[![PyPI - Version](https://img.shields.io/pypi/v/log-time-to-tempo.svg)](https://pypi.org/project/log-time-to-tempo)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/log-time-to-tempo.svg)](https://pypi.org/project/log-time-to-tempo)\n\n-----\n\nLog your time to tempo on a self-hosted Jira instance from the convenience of your command line.\n\n## Requirements\n\nThis tool is developed against\n\n- Jira Server v9.4.17\n- Tempo Timesheets 17.2.0 plugin\n\nAny deviation from that setup might lead to issues.\nFeel free to provide PRs to support other configurations.\n\n## Installation\n\n```console\npip install log-time-to-tempo\n```\n\n## Getting Started\n\nTo initialize authentication and local caches of projects and issues, run\n\n```\nlt init\n```\n\nIf you want to enable shell completion (which makes picking issues much easier), run\n\n```\nlt --install-completion\n```\n\n## Usage\n\n### Log Time\n\n```sh\n# log full workday to default issue\nlt log\n# log 2h to default issue\nlt log 2h\n# log 2h to specific issue\nlt log 2h TSI-1\n# log with custom message\nlt log -m \"working on foo\" 2h TSI-1\n# log multiple entries at once\nlt logm MyProject:6,OPT:2\n```\n\n### Check Logged Time\n\n```sh\n# show logged time per issue\nlt stats\n# show logged time per issue for current month\nlt stats month\n# ..also show individual worklogs\nlt stats -v\n```\n\n### Check Budget (i.e. logged and remaining time per person)\n\n```sh\n# show remaining time\nlt budget TS-XXXXX\n```\n\n### Set Aliases\n\n```sh\n# set alias name for a commonly used issue\nlt alias TSI-7 OPT\nlt alias TS-10402 ProjectName\n# unset aliases\nlt alias --unset ProjectName\n# show all aliases\nlt alias\n```\n\n## Configuration\n\nThe `lt config` command allows to change the default behavior, either system wide (`--system`) or in the local directory and subdirectories.\n\nHere are a couple of usage examples:\n\n```sh\n# Set custom jira instance for all projects (i.e. system-wide)\nlt config --system JIRA_INSTANCE https://jira.my-server.com\n\n# Set default issue for worklogs created from current directory (and subdirectories)\nlt config LT_LOG_ISSUE TSI-7\n\n# Start all your worklogs at 10am (instead of the default 9am)\nlt config --system LT_LOG_START 10\n\n# Remove all custom configuration\nlt config --unset\n```\n\n## Changes\n\n### [latest]\n\n[latest]: https://github.com/jannismain/log-time-to-tempo/commits/main/\n\n<!-- ### [0.0.X] - 202X-XX-XX\n[0.0.X]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.X -->\n\n### [0.0.8] - 2025-07-09\n\n[0.0.8]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.8\n\n- `stats` command includes sparkline visualizations to show daily time patterns\n- `budget` command shows logged and remaining hours for a given issue\n- fix redundant display of configuration options in `config` command error messages\n\n### [0.0.7] - 2025-04-10\n\n[0.0.7]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.7\n\n- `list` command produces output in table format\n- show issue summary when suggesting similar issues\n- detect overlaps with existing issues and warn user\n- fix issue, where a custom default start time would prevent dynamic start time based on today's last worklog\n\n### [0.0.6] - 2025-03-20\n\n[0.0.6]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.6\n\n- when logging to an issue that does not exist, provide suggestions (based on similar aliases and issue summaries)\n- add `lt logm` command to log multiple entries at once (e.g. `lt logm MyProject:6,OPT:2`)\n\n### [0.0.5] - 2025-03-03\n\n[0.0.5]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.5\n\n- fix `lt list` command\n\n### [0.0.4] - 2025-01-14\n\n[0.0.4]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.4\n\n- on `lt alias --unset` completion, only existing aliases are suggested\n- fix keyring issues\n  - keyring provided by `1password-cli` could not be used to persist token \u2192 default to system keyring on macOS\n  - keyring fails on platforms other than macOS \u2192 alternative keyring backends are used.\n- fix issue where `lt init` would update cache twice.\n\n### [0.0.3] - 2024-09-12\n\n[0.0.3]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.3\n\n- add `lt stats` command to aggregate spent time per issue\n- add `lt alias` command to provide more meaningful aliases for issue descriptions\n  - `lt alias --unset` to remove previously set aliases\n- renamed relative date ranges\n  - `week` \u2192 `last_7_days`\n  - `month` \u2192 `last_30_days`\n  - `week_to_date` \u2192 `week`\n  - `month_to_date` \u2192 `month`\n- support abbreviations for relative date ranges (e.g. `l7` for `last_7_days`)\n- fix issue where app dir would not be created on first run\n- fix issue with formatted durations, where days would not be accounted for\n- fix issue where token was saved to third-party keyrings (e.g. 1Password)\n- parse more relative dates (e.g. \"3 weeks ago\") (using [`dateparser.parse`][dateparser.parse])\n\n### [0.0.2] - 2024-04-17\n\n[0.0.2]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.2\n\n- add `log --lunch` option to reduce the amount of math you have to do in your head when entering your time\n  - lunch will simply be deducted from the total duration and your end time\n- rename `log --from-time '' --to-time ''` options to `log --start '' --end ''`\n- `log --day` is now case-insensitive (so `Mo` will be recognized as `monday`)\n- add `--version` flag\n\n### [0.0.1] - 2024-03-25\n\n[0.0.1]: https://github.com/jannismain/log-time-to-tempo/releases/tag/v0.0.1\n\n- authorize with JIRA instance using personal access token\n  - prompt for token and persist using [`keyring`][python-keyring] package\n- create and list worklogs via tempo's REST API\n- list projects and issues using [`jira`][python-jira] API\n- cache projects and issues for faster responses and shell completion\n\n[python-jira]: https://github.com/pycontribs/jira\n[python-keyring]: https://pypi.org/project/keyring/\n[dateparser.parse]: https://dateparser.readthedocs.io/en/latest/#popular-formats\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Log your work time to tempo from the command line.",
    "version": "0.0.8.post1",
    "project_urls": {
        "Documentation": "https://github.com/jannismain/log-time-to-tempo#readme",
        "Issues": "https://github.com/jannismain/log-time-to-tempo/issues",
        "Source": "https://github.com/jannismain/log-time-to-tempo"
    },
    "split_keywords": [
        "cli",
        " jira",
        " tempo"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f8add941f487c6cb747ad427aba8dadb988045cf3510dde6b8f4c9ec5d5cbacd",
                "md5": "e5df667e9910ba12b1374f7d9b436361",
                "sha256": "2f42a6053462789c67f1e52709191e0d46c184af1c0f09f8907d2554d7c0f42f"
            },
            "downloads": -1,
            "filename": "log_time_to_tempo-0.0.8.post1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e5df667e9910ba12b1374f7d9b436361",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 21964,
            "upload_time": "2025-07-09T13:49:03",
            "upload_time_iso_8601": "2025-07-09T13:49:03.065920Z",
            "url": "https://files.pythonhosted.org/packages/f8/ad/d941f487c6cb747ad427aba8dadb988045cf3510dde6b8f4c9ec5d5cbacd/log_time_to_tempo-0.0.8.post1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "81b9c47c2428dc962bb130f6befcd6db163e87b111424244a338d66e3e8ebdee",
                "md5": "a8b4350f13c45c69f4f5672a9fc0ea16",
                "sha256": "6c0bbf723a10b57e0a6b716f2f6133d62f5e66b186c3fabe4503deff7ee5c0ff"
            },
            "downloads": -1,
            "filename": "log_time_to_tempo-0.0.8.post1.tar.gz",
            "has_sig": false,
            "md5_digest": "a8b4350f13c45c69f4f5672a9fc0ea16",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 775194,
            "upload_time": "2025-07-09T13:49:04",
            "upload_time_iso_8601": "2025-07-09T13:49:04.602450Z",
            "url": "https://files.pythonhosted.org/packages/81/b9/c47c2428dc962bb130f6befcd6db163e87b111424244a338d66e3e8ebdee/log_time_to_tempo-0.0.8.post1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-09 13:49:04",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jannismain",
    "github_project": "log-time-to-tempo#readme",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "log-time-to-tempo"
}
        
Elapsed time: 0.41600s