Source code for olaf.common.oresat_file

"""File name format for OreSat files"""

from os import uname
from os.path import basename
from time import time


[docs] def new_oresat_file(keyword: str, card: str = "", date: float = -1.0, ext: str = "") -> str: """ Convenience function for making valid oresat file_names Parameters ---------- keyword: str The keyword for the new file_name card: str The card name for the file_name. If not set, the hostname will be used. date: float Unix timestamp the file was made. Set to a :py:func:`time.time` value or set to a negative number to use current time. ext: str The file extension. Optional. Returns ------- str The new oresat file name. """ if not card: card = uname()[1] if card.startswith("oresat-"): card = card[7:] # remove 'oresat-' if date < 0: date_str = str(int(time() * 1000)) else: date_str = str(int(date * 1000)) # make sure the extension starts with a '.' if len(ext) > 0 and ext[0] != ".": ext = "." + ext name = card + "_" + keyword + "_" + date_str + ext return name.lower()
[docs] class OreSatFile: """A class that follows the OreSat file format.""" def __init__(self, file: str): """ Parameters ---------- file_name: str Name of the OreSat file. Raises ------ ValueError If file name format is wrong. """ self._name = basename(file) split = self._name.split("_") if len(split) != 3: raise ValueError("invalid OreSat file name") self._card = split[0] self._keyword = split[1] temp = split[2] if not self._card or not self._keyword or not temp: raise ValueError("invalid OreSat file name") if "." in temp: self._date = float(temp.split(".")[0]) / 1000 self._extension = temp[temp.find(".") :] else: self._date = float(temp) / 1000 self._extension = "" def __repr__(self): return f"{self.__class__.__name__} {self._name}" def __str__(self): return self._name def __lt__(self, archive_file2): return self._date < archive_file2.date def __gt__(self, archive_file2): return self._date > archive_file2.date @property def name(self) -> str: """str: The name of the file. Read only.""" return self._name @property def card(self) -> str: """str: The card the file is for or the card the file was made on. Read only.""" return self._card @property def keyword(self) -> str: """str: The keyword for the file, this can be used to figure out what todo with the file. Read only.""" return self._keyword @property def date(self) -> float: """float: The Unix time the file was made in milliseconds. Read only.""" return self._date @property def extension(self) -> str: """str: The file extension. Can be an empty string. Read only.""" return self._extension