Source code for planetary_coverage.events.csv
"""Events csv file module."""
from .event import AbstractEventsFile
from ..html import Html, table
[docs]class CsvEventsFile(AbstractEventsFile):
"""CSV events file object.
Parameters
----------
fname: str or pathlib.Path
Input CSV event filename.
primary_key: str, optional
Header primary key (default: `name`)
header: str, optional
Optional header definition (to be appended at the beginning of the file).
"""
fields, rows = [], []
def __init__(self, fname, primary_key='name', header=None):
super().__init__(fname, primary_key, header)
def __getitem__(self, key):
if isinstance(key, str) and key.lower() in self.fields:
i = self.fields.index(key.lower())
return [row[i] for row in self.rows]
return super().__getitem__(key)
def _ipython_key_completions_(self):
return list(self.keys()) + self.fields
def _read_rows(self):
"""Read CSV rows content."""
content = (self.header + '\n') if self.header else ''
content += self.fname.read_text(encoding='utf-8')
header, *lines = content.splitlines()
# Parse header columns
self.fields = [
field.lower().replace('#', '').strip() if field else f'column_{i}'
for i, field in enumerate(header.split(','))
]
# Strip rows content
self.rows = [
tuple(value.strip() for value in line.split(','))
for line in lines
if not line.startswith('#') and line.strip()
]
@property
def csv(self):
"""Formatted CSV content."""
return Html(table(self.rows, header=self.fields))