Skip to main content

Work logging from the comfort of your shell.

Project description

workedon

image Python versions Tests status Coverage License Downloads

Work logging from the comfort of your shell.

demo

Installation

pip install workedon

Requirements

  • Python 3.7+

Features

  • Log work from your shell in plain text with human-readable dates/times.
    • The date/time is optional. The default is the current date/time.
    • The @ character is used to separate the text from the date/time.
  • Fetch logged work with human-readable dates/times.
  • Familiar Git-like interface.
  • Filter, sort, delete, format and display logged work on your shell.

How it works

This tool is useful in two ways - for logging work and fetching logged work. The implementation is very simple. Work is logged in the form of workedon <text> @ <date>or just workedon <text> (which uses the current date/time). There is a custom parser that reads the content, splits it at the @ to a work and a date component and then uses the awesome dateparser library to parse human-readable dates into datetime objects. This is then saved in a SQLite database (File location varies based on OS). Logged work can be fetched using multiple options that accept similar human-readable date/times. The same parser is used again to parse into datetime objects which are used to query the database. The output uses the current shell's pager to display a paged list similar to git log (your output may vary based on your shell).

Limitations

  • Your input is limited by your shell. Certain characters like the single quote ' behave differently. Put your content within double quotes to get around special characters.

    For example:

    workedon "repairing my wife's phone"
    
  • The date parser which is used may misinterpret some irregular phrases of date/time, but mostly does great.

  • There are some reserved keywords that are used as subcommands and cannot be used as the first word of your log's content:

    • workedon
    • what
    • db

    You can use double quotes here as well to get around this.

    For example, this will not work:

    workedon what my wife asked me to do @ 3pm 3 days ago
    

    This is fine:

    workedon "what my wife asked me to do" @ 3pm 3 days ago
    

Usage

$ workedon --help
Usage: workedon [OPTIONS] COMMAND [ARGS]...

  Work logging from the comfort of your shell.

  Example usages:
  1. Logging work:
  workedon studying for the SAT @ June 2010
  workedon pissing my wife off @ 2pm yesterday
  workedon painting the garage

  2. Fetching work:
  workedon what
  workedon what --from "2pm yesterday" --to "9am today"
  workedon what --today
  workedon what --past-month

Options:
  -v, --version  Show the version and exit.
  -h, --help     Show this message and exit.

Commands:
  workedon*  What you worked on, with optional date/time - see examples.
  db         Perform database maintenance (for advanced users only)
  what       Fetch logged work.

$ workedon what --help
Usage: what [OPTIONS]

  Fetch logged work.

Options:
  -r, --reverse        Reverse order while sorting.
  -n, --count INTEGER  Number of entries to return.
  -s, --last           Fetch the last thing you worked on
  -i, --id TEXT        id to fetch with.
  -f, --from TEXT      Start date-time to filter with.
  -t, --to TEXT        End date-time to filter with.
  --since TEXT         Fetch work done since a specified date-time in the past.
  -d, --past-day       Fetch work done in the past 24 hours.
  -w, --past-week      Fetch work done in the past week.
  -m, --past-month     Fetch work done in the past month.
  -y, --past-year      Fetch work done in the past year.
  -e, --yesterday      Fetch work done yesterday.
  -o, --today          Fetch work done today.
  --on TEXT            Fetch work done on a particular date/day.
  --at TEXT            Fetch work done at a particular time on a particular
                       date/day.
  --delete             Delete fetched work.
  -g, --no-page        Don't page the output.
  -l, --text-only      Output the work log text only.
  --help               Show this message and exit.

Credits

  • dateparser, for an amazing date parser. This project would not be possible without it.
  • peewee, for a nice and tiny ORM to interact with sqlite.
  • Click, for making writing CLI tools a complete pleasure.
  • jrnl, fck and Simon Willison for some inspiration.

History

0.6.1 (2023-03-19)

  • add a new "db" command
  • add --print-path to print database file path
  • add --vacuum to run VACUUM on the database
  • add --truncate to delete all saved work
  • Remove usage of reserved keyword "work" and make it available

0.6.0 (2023-02-05)

  • add fetching by id using --id/-i

0.5.9 (2023-02-05)

  • make --count work with all other options

0.5.8 (2023-01-27)

  • fix hash generation

0.5.7 (2023-01-26)

  • fix deletion

0.5.6 (2023-01-25)

  • add --since as alternative for --from
  • fix formatting in shell

0.5.5 (2023-01-23)

  • add -l/--text-only for text-only output
  • remove -d used as alternative for --delete

0.5.4 (2023-01-22)

  • add -g as alternative for no-page
  • fix help text
  • update README
  • hashlib: set usedforsecurity

0.5.3 (2023-01-18)

  • allow reverse sorting using -r/--reverse

0.5.2 (2023-01-18)

  • remove recording seconds for simple querying
  • add --no-page to avoid paging
  • improve deleting

0.5.1 (2023-01-18)

  • fix start > end check
  • add --at to fetch work done at a particular time on a particular date/day

0.5.0 (2023-01-14)

  • Breaking: rename database to won.db

0.4.5 (2023-01-13)

  • fix error message

0.4.4 (2023-01-13)

  • raise if start date is greater than end date

0.4.3 (2023-01-12)

  • don't force color when paging

0.4.2 (2023-01-12)

  • Python 3.11 support

0.4.1 (2023-01-12)

  • ask for deletion only if there's something
  • use tz aware now() for comparison

0.4.0 (2023-01-11)

  • Breaking: rename database to wondb.sqlite3
  • force colored output on windows
  • use tz aware RELATIVE_BASE

0.3.3 (2023-01-09)

  • add --delete/-d for deletion
  • add --on to fetch work done on a particular date/day
  • add --last/-s to fetch the last entered work log

0.3.2 (2023-01-08)

  • make dependency versions flexible

0.3.1 (2023-01-08)

  • Fixed README

0.3.0 (2023-01-08)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

workedon-0.6.1-py3-none-any.whl (14.4 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page