61 lines
1.4 KiB
Python
61 lines
1.4 KiB
Python
from typing import List
|
|
from tbwk.RawOpener import unpack, Block
|
|
from tbwk.Measurement import Measurement
|
|
|
|
|
|
class Worksheet:
|
|
measurements: List[Measurement] = None
|
|
|
|
def __init__(self):
|
|
self.measurements = []
|
|
|
|
def __len__(self) -> int:
|
|
""" Returns the number of measurements within the worksheet. """
|
|
return len(self.measurements)
|
|
|
|
def __iter__(self):
|
|
for measurement in self.measurements:
|
|
yield measurement
|
|
|
|
def add_measurement(self, measurement: Measurement) -> None:
|
|
"""
|
|
Adds a measurement to the worksheet
|
|
|
|
:param measurement:
|
|
:return:
|
|
"""
|
|
self.measurements.append(measurement)
|
|
|
|
|
|
def import_worksheet(filename: str) -> Worksheet:
|
|
"""
|
|
imports a given filename and creates a tbwk.Worksheet object.
|
|
|
|
:param filename:
|
|
:return:
|
|
"""
|
|
|
|
with open(filename, "rb") as fh:
|
|
content = fh.read()
|
|
|
|
if content is None:
|
|
raise FileNotFoundError(f"File {filename} was not found.")
|
|
|
|
# Unpack the file
|
|
blocks = unpack(content)
|
|
|
|
# Start loading the worksheet with found data.
|
|
worksheet = Worksheet()
|
|
|
|
# Add measurements
|
|
for block in blocks:
|
|
if block.type == Block.Measurement:
|
|
# Add a measurement block
|
|
measurement = Measurement.from_block(block)
|
|
|
|
worksheet.add_measurement(measurement)
|
|
# ToDo: Import data from other blocks, too.
|
|
|
|
return worksheet
|
|
|