Skip to main content

FRC post match + live match logging reader abstraction

Project description

FRC Vlogger

What is this?

Vlogger is a generic library that provides an abstraction over the various kinds of files and live sources that are used in FRC.
This package is developed and used by FRC Valor 6800 for post match analysis.

Supported Sources

  • WPILog (supports structs and protobufs)
  • NetworkTables4 (supports structs and protobufs)
  • CTRE Hoot (file format does not support custom types)
  • DSLog/DSEvents, unlikely to be added soon
  • Phoenix Diagnostic Server

Motivation

Clients usually just care about the "meat" of the source (that is, the field name, the value, and the timestamp). It usually does not matter to the client where the data came from (i.e. the logic is the same whether it is from a live source or from a log file), and this means that every source should be exposed in a single API that should be a drop in replacement.
Additionally, there is no ready to use package in Python to parse WPILog files or connect to NetworkTables4 servers.
This package was heavily inspired by AdvantageScope's dataSources folder code.

API Structure

Each source is initialized with:

  • A reference to the "connection"
    • For historical logs (i.e. from a log file), this will usually be the path of the log file
    • For live sources (i.e. connecting to a server), this will usually be the hostname of the target machine
  • A list of regexes to match the regexes against. This was a design choice made to improve performance by only parsing fields that are going to be used. While not recommended, a regex of "" can be used to match all fields.
  • Any additional arguments that are required for that specific source. This may be for additional configuration or outside executables (the hoot source uses this) to properly parse the file

Examples

Initializing a generic source

If the file/connection source is not known, it is recommended to use the get_source function to iterate through the sources and performing validation on each.

import vlogger

# "" regex matches with anything, i.e. any field
with vlogger.get_source("my_log.wpilog", [""]) as source:
    for field in source:
        print(field)

Initializing a specific source

If the file/connection source is known, it may be faster and more readable to explicitly initialize the specific source. This example uses the Hoot source, which requires a reference to the owlet executable (if not found in PATH).

from vlogger.sources.wpilog import Hoot

with Hoot("my_log.hoot", ["^MyTargetFields$"], owlet="../my-owlet") as hoot:
    for field in hoot:
        print(field)

Merging sources

Vlogger has the ability to merge multiple sources into one iterable that will be parsed in chronological order. While it has been tested, keep in mind that some sources such as WPILog and even NT4 have been found to itself be store/give data in a non-chronological order. While it has a very low error rate, it is still something to keep in mind when using this feature.

import vlogger

with vlogger.get_source("my_log.wpilog", [""]) as wpilog, \
     vlogger.get_source("my_log.hoot", [""]) as hoot:
    for field in vlogger.merge_sources(wpilog, hoot):
        print(field)

Notes

Vlogger uses the logging library internally to log information about the sources, but by design does not configure the logger at all. This means that program that uses Vlogger has the responsibility of setting up the logger.

Contributing

Contributions are always welcome, especially tasks like adding new sources or fixing bugs. If you are making a big change, please create an issue beforehand to come up with a plan before finishing the code.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

frc_vlogger-1.1.2.tar.gz (8.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

frc_vlogger-1.1.2-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file frc_vlogger-1.1.2.tar.gz.

File metadata

  • Download URL: frc_vlogger-1.1.2.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for frc_vlogger-1.1.2.tar.gz
Algorithm Hash digest
SHA256 ee586cc6a114b10f502b8fd6cc14545e4bc2ff3d3b8844829a25c16512221d00
MD5 996c06cbf7573faafdd7f8555ad9f0a0
BLAKE2b-256 bc9d3d7d94ff7c1b2a9385cc03beb3ca70b0ae82e26013b6c92a303175da04b2

See more details on using hashes here.

File details

Details for the file frc_vlogger-1.1.2-py3-none-any.whl.

File metadata

  • Download URL: frc_vlogger-1.1.2-py3-none-any.whl
  • Upload date:
  • Size: 10.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for frc_vlogger-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2a9eb6a387a061b90fba3e37650843c7f1c4f64df2b6d18a35254a4a5acc3ba9
MD5 4e95d104f0e0d15c20d5eda043b391d2
BLAKE2b-256 84f5d849042de69cde0578ffb5b8ad449f043235ab5dc0e06c56173c5fac42b7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page