Skip to content

Latest commit

 

History

History
141 lines (92 loc) · 3.51 KB

formats.rst

File metadata and controls

141 lines (92 loc) · 3.51 KB

Data Formats

These tools were designed for easy interoperability. The data formats are both human and machine readable, easy to edit, easy to parse.

Here is a formal grammar:

file ::= (entry|day-separator|comment|old-style-comment)*

entry ::= timestamp ":" SPACE title NEWLINE

day-separator ::= NEWLINE

comment ::= "#" anything* NEWLINE

old-style-comment ::= anything* NEWLINE

title ::= anything*

timestamp is YYYY-MM-DD HH:MM with a single space between the date and the time.

anything is any character except a newline.

NEWLINE is whatever Python considers it to be (i.e. CR LF or just LF).

GTimeLog adds a blank line between days. It ignores them when loading, but this is likely to change in the future.

GTimeLog considers any lines not starting with a valid timestamp to be comments. This is likely to change in the future, so please use '#' to indicate real comments if you find you need them.

All lines should be sorted by time. Currently GTimeLog won't complain if they're not, and it will sort them to compensate.

GTimeLog doesn't re-write the file, it only appends to it.

Example:

# this is a comment
2015-09-14 08:03: arrived at work **
2015-09-14 11:57: project-foo: working on task #1234
2015-09-14 13:04: lunch **
2015-09-14 16:34: project-foo: working on task #1234
2015-09-14 16:57: checking mail

2015-09-15 08:01: arrived at work **
...

Bugs:

  • There's no place for timezones. If you want to track your travel times with GTimeLog, you're gonna have a bad time.
  • If you work late at night and change the value of "virtual midnight", old historical entries can be misinterpreted.

Task list is a text file, with one task per line. Empty lines and lines starting with a '#' are ignored. Task names should consist of a group name (project name, XP-style story, whatever), a colon, and a task name. Tasks will be grouped. If there is no colon on a line, the task will be grouped under "Other".

Example:

# usual everyday tasks
mail
sysadmining
# project tasks
project-foo: fix bug with frobnicator (GH: #42)
project-foo: implement feature X (GH: #123)
project-bar: daily standup

Daily reports look like this:

random text
random text
Entry title                Duration
Entry title                Duration
random text
Entry title                Duration
Entry title                Duration
random text

Formal grammar:

report ::= (entry|comment)*

entry ::= title space space duration newline

comment ::= anything* newline

title ::= anything*

duration ::= hours "," space minutes
          |  hours space minutes
          |  hours
          |  minutes

hours ::= number space "hour"
       |  number space "hours"

minutes ::= number space "min"

There is a convention that entries that include two asterisks in their titles indicate slacking or pauses between work activities.

This is a comma-separated-value (CSV) file that logs all sent reports. The columns are: timestamp, report kind (daily/weekly/monthly), report date, recipient's email address.

Weekly report dates use the ISO week numbering (YYYY/WW).

Example:

2015-09-09 13:11:41,dayly,2015-09-09,activity@example.com
2015-09-09 13:12:39,weekly,2015/37,activity@example.com
2015-09-09 13:12:44,monthly,2015-09,activity@example.com
2015-09-09 13:12:57,daily,2015-09-09,activity@example.com