Log Utilities
Log Directory Helpers
pyflysight.log_utils.classify_log_dir
classify_log_dir(log_dir: Path) -> FlysightType
Identify FlySight hardware revision based on the log directory contents.
It is assumed that the provided log directory contains a single log session; no recursion is performed.
The hueristic used is a simple one: if the directory contains a SENSOR.CSV
file then it is
assumed to be a FlySight V2 log sesssion, otherwise V1. Trimmed data files, if present, are not
considered.
pyflysight.log_utils.locate_log_subdir
locate_log_subdir(top_dir: Path, flysight_type: FlysightType) -> Path
Resolve the child log directory contained under the provided top level directory.
Note
It is assumed that the provided top_dir
contains only one valid directory of log files.
Note
Directories containing trimmed V2 log data are currently not considered.
pyflysight.log_utils.LogDir
Bases: NamedTuple
flysight_type
instance-attribute
flysight_type: FlysightType
is_temp
class-attribute
instance-attribute
is_temp: bool = False
log_dir
instance-attribute
log_dir: Path
pyflysight.log_utils.iter_log_dirs
iter_log_dirs(
top_dir: Path, flysight_type: FlysightType | None = None, include_temp: bool = False
) -> abc.Generator[LogDir, None, None]
Iterate through children of the specified top level directory & yield log directories.
A specific FlySight hardware revision can be targeted using the flysight_type
argument; if
specified as None
, both hardware types will be searched for.
The include_temp
flag may be set to include logs in the FlySight V2's ./TEMP
directory. This
can be helpful for situations where the FlySight V2 device turns off prior to finalizing its
current logging session (e.g. battery runs out, hard ground impact).
Note
Order of yielded directories is not guaranteed.
Note
Directories containing trimmed log data are currently not considered.
Parsed Data Helpers
pyflysight.log_utils.get_idx
get_idx(log_data: polars.DataFrame, query: NUMERIC_T, ref_col: str = 'elapsed_time') -> int
Return the first index of the data in ref_col
closest to the provided query
value.
pyflysight.log_utils.normalize_gps_location
normalize_gps_location(
track_data: polars.DataFrame, start_coord: tuple[float, float] = (0, 0)
) -> polars.DataFrame
Shift parsed GPS coordinates so they begin at the provided starting location.
pyflysight.log_utils.normalize_gps_location_plaintext
normalize_gps_location_plaintext(
track_file: Path,
flysight_type: FlysightType,
start_coord: tuple[float, float] = (0, 0),
inplace: bool = False,
) -> None
Shift plaintext GPS coordinates so they begin at the provided starting location.
If inplace
is True
, the existing track file will be overwritten. Otherwise, the unmodified
track file will be copied to a new TRACK_old.CSV
file in the same directory.
Warning
Inplace modification is a destructive operation, all existing data will be lost and cannot be recovered.