Source code for piecash_utilities.report.options

import ast
import datetime

import jinja2


[docs]class Option: """An option to be used in a report Attributes: type (str): the type of the option of the form 'gnc:make-number-range-option' section (str): the section/tab where the option should appear in the option dialog sort_tag (str): a string defining the sort order in the tab documentation_string (str): the doc string of the option default_value (str): the default value of the option name (str): the name of the variable """ def __init__(self, type, section, sort_tag, documentation_string, default_value, name=None): self.type = type self.section = section self.name = name self.sort_tag = sort_tag self.documentation_string = documentation_string self.default_value = default_value
[docs] def render_scheme(self): pass
[docs] def render_serialise(self): return jinja2.Template(""" (op-value "{{option.section}}" "{{option.name}}")""").render(option=self)
[docs] def parse(self, value): return ast.literal_eval(value)
[docs]class DateOption(Option): def __init__(self, is_datetime=False, **kwargs): super(DateOption, self).__init__(type="gnc:make-date-option", **kwargs) self.is_datetime = is_datetime
[docs] def render_serialise(self): return jinja2.Template("""(cadr (op-value "{{option.section}}" "{{option.name}}"))""").render(option=self)
[docs] def parse(self, value): return datetime.datetime.fromtimestamp(ast.literal_eval(value))
[docs] def render_scheme(self): return jinja2.Template(""" (add-option ({{ option.type }} (N_ "{{option.section}}") (N_ "{{option.name}}") "{{option.sort_tag}}" (N_ "{{option.documentation_string}}") {{option.default_value}} ;; default #f 'absolute #f )) """).render(option=self)
[docs]class RangeOption(Option): def __init__(self, lower=0, upper=10000, decimals=2, step_size=0.01, **kwargs): super(RangeOption, self).__init__(type="gnc:make-number-range-option", **kwargs) self.lower = lower self.upper = upper self.decimals = decimals self.step_size = step_size
[docs] def render_scheme(self): return jinja2.Template("""(add-option ({{ option.type }} (N_ "{{option.section}}") (N_ "{{option.name}}") "{{option.sort_tag}}" (N_ "{{option.documentation_string}}") {{option.default_value}} ;; default {{option.lower }} ;; lower bound {{option.upper }} ;; upper bound {{option.decimals }} ;; number of decimals {{option.step_size }} ;; step size )) """).render(option=self)
[docs]class StringOption(Option): def __init__(self, **kwargs): super(StringOption, self).__init__(type="gnc:make-string-option", **kwargs)
[docs] def render_scheme(self): return jinja2.Template(""" (add-option ({{ option.type }} (N_ "{{option.section}}") (N_ "{{option.name}}") "{{option.sort_tag}}" (N_ "{{option.documentation_string}}") "{{option.default_value}}" ;; default )) """).render(option=self)
[docs] def parse(self, value): return value