habitmove/src/habitmove/nomiedata.py

59 lines
1.4 KiB
Python
Raw Normal View History

2021-12-02 22:08:58 +00:00
from typing import Optional, Any
from dataclasses import dataclass, field
# A nomie habit tracker. Tracks anything whose value can be encapsulated in a numerical value.
2021-12-03 15:22:54 +00:00
@dataclass(frozen=True)
2021-12-02 22:08:58 +00:00
class Tracker:
color: str
emoji: str
hidden: bool
id: str
ignore_zeros: bool
label: str
math: str
one_tap: bool
tag: str
type: str
uom: str
# TODO no idea what include does
include: str
min: int = 0
max: int = 0
goal: int = 0
default: int = 0
2021-12-02 22:08:58 +00:00
# TODO score can be string (if custom) or int (if simple good/bad)
score: str = ""
score_calc: list[dict[str, Any]] = field(default_factory=lambda: [])
2021-12-02 22:08:58 +00:00
2021-12-03 15:22:54 +00:00
@dataclass(frozen=True)
class Activity:
tracker: Tracker
value: int = 1
2021-12-03 15:22:54 +00:00
2021-12-02 22:08:58 +00:00
# A nomie note. Records any circumstance of 'something happened' through prose.
# These are undigested events, whose changed trackers are still encapsulated
# in the 'note' field as continuous text.
2021-12-03 15:22:54 +00:00
@dataclass(frozen=True)
2021-12-02 22:08:58 +00:00
class Event:
id: str
start: int
end: int
2021-12-03 15:22:54 +00:00
text: str
activities: list[Activity] = field(default_factory=lambda: [])
score: int = 0
lat: float = 0.0
lng: float = 0.0
location: str = ""
modified: bool = False
offset: str = "" # local timezone offset?
source: str = "n5" # nomie version
2021-12-02 22:08:58 +00:00
2021-12-03 15:22:54 +00:00
@dataclass(frozen=True)
2021-12-02 22:08:58 +00:00
class NomieImport:
version: str
trackers: list[Tracker]
events: list[Event]