Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
python-version: 3.12
- name: Install APT dependencies
run: |
sudo apt-get install -y git build-essential apt-utils wget libfreetype6 libpng-dev libopenblas-dev gcc gfortran libsnappy-dev
sudo apt-get install -y git build-essential apt-utils wget libfreetype6 libpng-dev libopenblas-dev gcc gfortran libsnappy-dev graphviz
- name: Install dependencies
run: |
python -m pip install --upgrade pip poetry
Expand Down
9 changes: 8 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ help:
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " coverage to run coverage check of the documentation (if enabled)"
@echo " redirectcheck to check that deleted files have proper redirects"
@echo " dummy to check syntax errors of document sources"

.PHONY: clean
Expand Down Expand Up @@ -243,8 +244,14 @@ pseudoxml:
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."

.PHONY: redirectcheck
redirectcheck:
$(SPHINXBUILD) -b rediraffecheckdiff $(ALLSPHINXOPTS) $(BUILDDIR)/rediraffe
@echo
@echo "Redirect check complete."

.PHONY: dummy
dummy:
$(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy
@echo
@echo "Build finished. Dummy builder generates no files."
@echo "Build finished. Dummy builder generates no files."
133 changes: 114 additions & 19 deletions poetry.lock

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ m2r2 = "*"
myst-parser = "*"
recommonmark = "^0.7.0"
setuptools = "*" # needed in Python 3.12+: https://github.com/CrossNox/m2r2/issues/72
sphinxext-rediraffe = "^0.2.7"

[build-system]
requires = ["poetry-core"]
Expand Down
7 changes: 6 additions & 1 deletion src/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
"sphinx.ext.extlinks",
"sphinx_tabs.tabs",
"sphinx_click",
"sphinxext.rediraffe",
]

extlinks = {
Expand All @@ -50,6 +51,10 @@
"gh-aw": ("https://github.com/ActivityWatch/%s", ""),
}

# Redirects for moved pages
rediraffe_redirects = "redirects.txt"
rediraffe_branch = "HEAD~1"

# Add any paths that contain templates here, relative to this directory.
templates_path = ["_templates"]

Expand Down Expand Up @@ -391,4 +396,4 @@

# If true, do not generate a @detailmenu in the "Top" node's menu.
#
# texinfo_no_detailmenu = False
# texinfo_no_detailmenu = False
51 changes: 48 additions & 3 deletions src/examples.rst
Original file line number Diff line number Diff line change
@@ -1,9 +1,54 @@
Examples
========

For more examples, see the examples in the aw-client repo: https://github.com/ActivityWatch/aw-client
This section provides practical examples for working with ActivityWatch, from retrieving your data to extending functionality with custom watchers.

Getting Your Data Out
----------------------

**Most users should start here:**

.. toctree::
:maxdepth: 1

examples/working-with-data

This comprehensive guide covers:

* **Canonical Events** - Get processed activity data (what the web UI uses)
* **Custom Queries** - Write your own analysis using the query language
* **Raw Events** - Advanced direct access to bucket data
* **Safety Best Practices** - Avoiding data corruption with proper testing and dry-run modes

The guide includes links to production-ready examples from the `aw-client repository <https://github.com/ActivityWatch/aw-client/tree/master/examples>`_.

Writing Your Own Watchers
-------------------------

Want to collect custom data? **See:**

.. toctree::
examples/querying-data
:maxdepth: 1

examples/writing-watchers
examples/extending

These guides cover:

* **Minimal watcher example** - Get started with a simple template
* **Full-featured watcher** - Complete example with heartbeats and proper structure
* **Best practices** - Error handling, bucket management, and testing modes
* **Rust examples** - Alternative implementation for performance-critical watchers

Watchers are small programs that collect data and send it to ActivityWatch. You can track anything with a timestamp!

Example Code Repository
-----------------------

The `aw-client examples <https://github.com/ActivityWatch/aw-client/tree/master/examples>`_ contain comprehensive, well-documented examples including:

* **Time analysis** - ``time_spent_today.py``, ``working_hours.py``
* **Data export** - ``load_dataframe.py`` for pandas integration
* **Data management** - ``redact_sensitive.py`` with safe dry-run mode
* **Advanced analysis** - ``suggest_categories.py`` with AI categorization

All examples follow safety best practices with testing modes and error handling.
27 changes: 0 additions & 27 deletions src/examples/extending.rst

This file was deleted.

92 changes: 0 additions & 92 deletions src/examples/querying-data.rst

This file was deleted.

68 changes: 0 additions & 68 deletions src/examples/raw_events.py

This file was deleted.

Loading