Source code for datools.models

from dataclasses import dataclass
from enum import Enum
from typing import Any
from typing import Tuple


AggregateFunction = Enum(
    'AggregateFunction',
    'SUM COUNT AVERAGE')


Operator = Enum(
    'Operator',
    'EQUALS NOT_EQUALS GT LT GTEQ LTEQ')


OPERATOR_TO_SQL = {
    Operator.EQUALS: '=',
    Operator.NOT_EQUALS: '<>',
    Operator.GT: '>',
    Operator.LT: '<',
    Operator.GTEQ: '>=',
    Operator.LTEQ: '<=',
}


[docs]@dataclass class Column: name: str def __hash__(self): return self.name.__hash__() def __eq__(self, other): return self.name.__eq__(other.name)
[docs]@dataclass class Constant: value: Any
[docs]@dataclass class Aggregate: function: AggregateFunction column: Column as_name: Column
[docs] def to_sql(self): return (f'{self.function.name}({self.column.name}) ' f'AS {self.as_name.name}')
def __repr__(self): return f'Aggregate({self.to_sql()})'
[docs]@dataclass class Predicate: left: Column operator: Operator right: Constant
[docs] def to_sql(self): return (f'{self.left.name} ' f'{OPERATOR_TO_SQL[self.operator]} {self.right.value}')
def __repr__(self): return f'Predicate({self.to_sql()})'
[docs]@dataclass class Table: name: str
[docs]@dataclass class Explanation: predicates: Tuple[Predicate, ...] risk_ratio: float