Skip to content

Cyclesport results and timing toolkit

License

Notifications You must be signed in to change notification settings

ndf-zz/metarace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

metarace

A collection of Python modules to assist with cycle race timekeeping and official result preparation. Version 2 of Metarace is a re-write for Python 3 which removes static pyGTK/GLib dependencies.

Application-level modules are not contained in the library, they are available separately:

  • roadmeet : Timing and results for UCI Part 2 Road Races, UCI Part 5 Cyclo-Cross, criterium, road handicap and ad-hoc time trial events.
  • tagreg : Transponder id management.
  • ttstart : Time Trial starter console.

Work in Progress

  • overhaul report sections and event index for trackmeet
  • overhaul PDF text rendering
  • re-write report library
  • remove html templates
  • add js utils for in-page reports
  • include grapheme support in all strops
  • replace xls export with xlsx
  • module documentation
  • sample scripts

Module Overview

metarace: Base Library

  • shared configuration, default files and resources
  • tempfile-backed file writer
  • meet folder locking

jsonconfig: Configuration Options

Schema defined dictionary-like configuration with JSON export and import.

riderdb: CSV-backed Competitor Information

Store details for competitors, teams, and categories.

tod: Time of Day

Represent timing measurements, calculations for short intervals (<24 hours) and aggregate times.

timy: Alge Timy Chronometer

Read time of day measurements from an attached Alge Timy in PC-TIMER mode.

decoder: Transponder Decoders

Read transponder and timing information from Race Result and Chronelec devices:

  • rrs : Race Result System Decoder (passive and active)
  • rru : Race Result USB Timing Box (active)
  • thbc : Chronelec (Tag Heuer) Protime/Elite RC and LS

strops: Common String Manipulations

Commonly used functions for formatting competitor names, rankings and user inputs.

telegraph: Interprocess Communication

MQTT-backed pub/sub message exchange service.

unt4: Legacy Timing Protocol

Swiss Timing UNT4 protocol wrapper, for legacy devices and DHI communications.

countback: Accumulate and Compare Count of Places

Represent a countback of places and allow for simple placing comparisons.

htlib: HTML Generation

Functional primitives for HTML generation.

report: Report Generation

Create sectioned reports and save to PDF, HTML, XLS and JSON.

export: Result Export and Mirroring

Mirror export files to a remote host using rsync over ssh, rsync TCP daemon or by running a local script.

eventdb: CSV Event List

Store details for multple events within a meet.

Requirements

System requirements:

  • Python >= 3.9
  • Cairo
  • Pango
  • Rsvg
  • Python gi
  • Python gi-cairo
  • tex-gyre (optional, recommended)
  • evince (optional, recommended)
  • fonts-noto (optional)
  • mosquitto (optional)
  • libreoffice (optional)

Python packages:

  • pyserial: Serial port interface
  • python-dateutil: Generic date/time string parser
  • xlwt: XLS file writer
  • paho-mqtt: MQTT interface
  • grapheme: Unicode grapheme support

Installation

Check that your python version is at least 3.9 before installing. This library will not work with python versions less than 3.9.

Debian 11+

Install system requirements with apt:

$ sudo apt install python3-venv python3-pip python3-cairo python3-gi python3-gi-cairo
$ sudo apt install gir1.2-rsvg-2.0 gir1.2-pango-1.0
$ sudo apt install python3-serial python3-paho-mqtt python3-dateutil python3-xlwt

Optionally add fonts, PDF viewer and MQTT broker:

$ sudo apt install tex-gyre fonts-noto evince mosquitto

Create a virtualenv for metarace and associated packages:

$ python3 -m venv --system-site-packages venv

Activate the virtualenv and install packages with pip:

$ source ./venv/bin/activate
(venv) $ pip3 install metarace