Initial commit
This commit is contained in:
@ -0,0 +1,14 @@
|
||||
import logging
|
||||
import sys
|
||||
|
||||
logger = logging.getLogger("data")
|
||||
|
||||
# Configure the main logger for the data package
|
||||
if not logger.handlers:
|
||||
handler = logging.StreamHandler(sys.stdout)
|
||||
formatting = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
|
||||
handler.setFormatter(formatting)
|
||||
handler.setLevel(logging.DEBUG)
|
||||
logger.addHandler(handler)
|
||||
logger.setLevel(logging.DEBUG)
|
||||
logger.debug("Data logger registered.")
|
@ -0,0 +1,24 @@
|
||||
import logging
|
||||
from os.path import getsize
|
||||
|
||||
|
||||
logger = logging.getLogger("data.basemanager")
|
||||
|
||||
|
||||
class BaseManager:
|
||||
"""Base data file manager."""
|
||||
|
||||
def __init__(self, path: str):
|
||||
self._path = path
|
||||
logger.info(f"New file manager initialized for file {path}")
|
||||
|
||||
def get_info(self) -> dict:
|
||||
"""Get basic information about the file."""
|
||||
try:
|
||||
data = {"size": getsize(self._path)}
|
||||
return data
|
||||
except IOError:
|
||||
logger.error("Could not get file size.")
|
||||
return {"size": -1}
|
||||
|
||||
|
@ -0,0 +1,28 @@
|
||||
import csv
|
||||
import logging
|
||||
|
||||
from data.basemanager import BaseManager
|
||||
|
||||
|
||||
logger = logging.getLogger("data.csvmanager")
|
||||
|
||||
|
||||
class CSVManager(BaseManager):
|
||||
"""Data manager for CSV files."""
|
||||
|
||||
def get_info(self) -> dict:
|
||||
data = super().get_info()
|
||||
try:
|
||||
with open(self._path, "r", encoding="utf-8") as file:
|
||||
reader = csv.reader(file)
|
||||
for idx, _ in enumerate(reader):
|
||||
pass
|
||||
data["rows"] = idx
|
||||
return data
|
||||
except IOError:
|
||||
logger.error("Could not decode CSV, IO error occurred.")
|
||||
return data
|
||||
except UnicodeDecodeError:
|
||||
logger.error("CSV is not encoded in UTF8, skipping.")
|
||||
return data
|
||||
|
Reference in New Issue
Block a user