Metadata-Version: 2.1
Name: metarace
Version: 2.1.2
Summary: Cyclesport results and timing toolkit
Author-email: Nathan Fraser <ndf-zz@6-v.org>
License: MIT
Project-URL: homepage, https://github.com/ndf-zz/metarace
Keywords: cyclesport,results,timing
Classifier: Development Status :: 3 - Alpha
Classifier: Topic :: Other/Nonlisted Topic
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE

# 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](https://github.com/ndf-zz/metarace-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](https://github.com/ndf-zz/metarace-tagreg) : Transponder
     id management.
   - [ttstart](https://github.com/ndf-zz/metarace-ttstart) : Time
     Trial starter console.


## Work in Progress

   - include grapheme support in strops
   - update pango text layouts to align vertically by text baseline
   - re-write report library for better sectioning and dynamic updates
   - module documentation
   - sample scripts


## Module Overview

### metarace: Base Library

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


### jsonconfig: Configuration File Wrapper

A thin wrapper on a dictionary-based 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.


### sender: Legacy DHI Scoreboard Interface

Thread object for drawing text on a
[Caprica](https://github.com/ndf-zz/caprica)
or Galactica DHI scoreboard over TCP,
UDP and serial connections.


### gemini: Numeric LED Scoreboard Interface

Thread object for writing to a pair of Swiss Timing Gemini
numeric LED boards, and lap count displays.


### 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

Execute a process on the host system to
mirror result files to a remote server,
or to run a script.


### eventdb: CSV Event List

Store details for 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)
   - 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 evince mosquitto

Create a virtualenv for metarace and associated packages:

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

Activate the virtualenv and install packages with pip:

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

