# encoding: utf-8
from __future__ import print_function, division, absolute_import
from functools import singledispatch
import io
import sys
from .db_objects import SiteDbo, PictureDbo, ParameterDbo, SourceTypeDbo
from .domain_objects import Site, Picture, Parameter, Parameters, SourceType
def pretty_log(log_function, what):
lines = pretty_str(what).split("\n")
# pretty_prints a final "\n" which produces an empty line in the logs, so we remove
# trailing empty lines:
if lines[-1] == "":
lines = lines[:-1]
for line in lines:
log_function(line)
def pretty_str(what):
file = io.StringIO()
pretty_print(what, file=file)
return file.getvalue()
lines = file.getvalue().split("\n")
# pretty_prints a final "\n" which produces an empty line in the logs, so we remove
# trailing empty lines:
if lines[-1] == "":
lines = lines[:-1]
for line in lines:
log_function(line)
"""
we use single dispatch on first argument to find appropriate pretty printing function.
see https://docs.python.org/3/library/functools.html#functools.singledispatch
"""
@singledispatch
def pretty_print(what, file=sys.stdout, indent=""):
raise RuntimeError("single dispatch on pretty_print for {!r} failed".format(what))
def _pretty_print_site(type_name, dd, file, indent):
lines = ""
lines += "{indent}{type_name} {name}:\n"
lines += "{indent} street : {street}\n"
lines += "{indent} city : {city}\n"
lines += "{indent} x, y, z : {coord_x}, {coord_y}, {coord_z}\n"
lines += "{indent} description : {description}\n"
pictures = dd["pictures"]
if not pictures:
lines += "{indent} pictures : none\n"
txt = lines.rstrip().format(indent=indent, type_name=type_name, **dd)
print(txt, file=file)
for p in dd["pictures"]:
pretty_print(p, file=file, indent=indent + " ")
def _pretty_print_picture(type_name, dd, file, indent):
lines = ""
lines += "{indent}{type_name}:\n"
lines += "{indent} filename : {filename}\n"
lines += "{indent} date : {date}\n"
lines += "{indent} filesize : {filesize}\n"
lines += "{indent} description : {description}\n"
txt = lines.rstrip().format(indent=indent, type_name=type_name, filesize=len(dd["data"]), **dd)
print(txt, file=file)
def _pretty_print_parameter(type_name, dd, file, indent):
lines = ""
lines += "{indent}{type_name}:\n"
lines += "{indent} name : {name}\n"
lines += "{indent} description : {description}\n"
lines += "{indent} unit : {unit}\n"
txt = lines.rstrip().format(indent=indent, type_name=type_name, **dd)
print(txt, file=file)
def _pretty_print_source_type(type_name, dd, file, indent):
lines = ""
lines += "{indent}{type_name}:\n"
lines += "{indent} name : {name}\n"
lines += "{indent} description : {description}\n"
txt = lines.rstrip().format(indent=indent, type_name=type_name, **dd)
print(txt, file=file)
def _pretty_print_parameters(type_name, parameters, file, indent):
all_lines = ""
all_lines += "{indent}{type_name}:\n"
for parameter in parameters:
lines = ""
lines += "{indent} name : {parameter.name}\n"
lines += "{indent} description : {parameter.description}\n"
lines += "{indent} unit : {parameter.unit}\n\n"
txt = lines.format(indent=indent, parameter=parameter)
all_lines += txt
txt = all_lines.rstrip().format(indent=indent, type_name=type_name)
print(txt, file=file)
@pretty_print.register(Site)
def pretty_print_site(site, file=sys.stdout, indent=""):
_pretty_print_site("Site", site, file, indent)
@pretty_print.register(SiteDbo)
def pretty_print_site(site, file=sys.stdout, indent=""):
attributes = vars(site)
attributes["pictures"] = site.pictures
_pretty_print_site("SiteDbo", attributes, file, indent)
@pretty_print.register(Picture)
def pretty_print_picture(picture, file=sys.stdout, indent=""):
_pretty_print_picture("Picture", picture, file, indent)
@pretty_print.register(PictureDbo)
def pretty_print_site(picture, file=sys.stdout, indent=""):
_pretty_print_picture("PictureDbo", vars(picture), file, indent)
@pretty_print.register(Parameter)
def pretty_print_picture(parameter, file=sys.stdout, indent=""):
_pretty_print_parameter("Parameter", parameter, file, indent)
@pretty_print.register(SourceType)
def pretty_print_picture(source_type, file=sys.stdout, indent=""):
_pretty_print_source_type("SourceType", source_type, file, indent)
@pretty_print.register(SourceTypeDbo)
def pretty_print_picture(source_type, file=sys.stdout, indent=""):
_pretty_print_source_type("SourceTypeDbo", vars(source_type), file, indent)
@pretty_print.register(Parameters)
def pretty_print_picture(parameters, file=sys.stdout, indent=""):
_pretty_print_parameters("Parameters", parameters, file, indent)
@pretty_print.register(ParameterDbo)
def pretty_print_site(parameter, file=sys.stdout, indent=""):
_pretty_print_parameter("ParameterDbo", vars(parameter), file, indent)
|