from math import floor
from os import getenv
from typing import List
from xdg import BaseDirectory
def first_defined_argument(*args):
return next((item for item in args if item is not None), None)
first = first_defined_argument
class Environment(object):
"""
This is where all of the configuration options (should) live.
Please review the class variables for available configuration
options through their respective environment variables.
"""
ARCHIVE = getenv('ARCHIVE_DIR', BaseDirectory.save_data_path(__package__))
ARCHIVE_SUFFIX_LENGTH = int(getenv('SUFFIX_LENGTH', 6))
ALLOWED_SENDERS = [
num for num in getenv('ALLOWED_SENDERS', '').split(',') if num
]
MESSAGE_FORMAT = getenv('MESSAGE_FORMAT', '{message}')
PRINT_COMMAND = getenv('PRINT_COMMAND', 'lp')
PRINTER_NAME = getenv('PRINTER_NAME', None)
PRINT_JOB_TIMEOUT = int(getenv('PRINT_JOB_TIMEOUT', 5)) # seconds
CPI = int(getenv('CPI', 10))
LPI = int(getenv('LPI', 6))
TEXT_SCALE = float(getenv('TEXT_SCALE', 1.0))
# Set in points; each point is 1/72 inch or 0.35mm.
MARGINS = getenv('MARGINS', None)
MARGIN_SIDES = first(getenv('MARGIN_SIDES', None), MARGINS)
MARGIN_TOP = first(getenv('MARGIN_TOP', None), MARGINS)
MARGIN_BOTTOM = first(getenv('MARGIN_BOTTOM', None), MARGINS)
MARGIN_LEFT = first(getenv('MARGIN_LEFT', None), MARGIN_SIDES, MARGINS)
MARGIN_RIGHT = first(getenv('MARGIN_RIGHT', None), MARGIN_SIDES, MARGINS)
def print_command(self, file_to_print=None) -> List[str]:
command = [self.PRINT_COMMAND]
if self.PRINTER_NAME is not None:
command.append(
"-d {}".format(self.PRINTER_NAME))
if self.TEXT_SCALE is not 1.0:
# Scale horizontally
cpi = floor(self.CPI*(1/self.TEXT_SCALE))
command.append(
"-o cpi={}".format(cpi))
# Scale vertically
lpi = floor(self.LPI*(1/self.TEXT_SCALE))
command.append(
"-o lpi={}".format(lpi))
if self.MARGIN_TOP is not None:
command.append(
"-o page-top={}".format(self.MARGIN_TOP))
if self.MARGIN_BOTTOM is not None:
command.append(
"-o page-bottom={}".format(self.MARGIN_BOTTOM))
if self.MARGIN_LEFT is not None:
command.append(
"-o page-left={}".format(self.MARGIN_LEFT))
if self.MARGIN_RIGHT is not None:
command.append(
"-o page-right={}".format(self.MARGIN_RIGHT))
if file_to_print is not None:
command.append(file_to_print)
return command