def __init__(self, provider): error_message = "The provider cannot be None. If you meant to use the CollectionProvider pass in a tuple or list" Guard.against_none(provider, error_message) if isinstance(provider, (list, tuple)): self.provider = CollectionProvider(provider) else: self.provider = provider self.expressions = [] self.order_expressions = [] self.group_expression = None self.parser = ExpressionParser()
class Query(object): def __init__(self, provider): error_message = "The provider cannot be None. If you meant to use the CollectionProvider pass in a tuple or list" Guard.against_none(provider, error_message) if isinstance(provider, (list, tuple)): self.provider = CollectionProvider(provider) else: self.provider = provider self.expressions = [] self.order_expressions = [] self.group_expression = None self.parser = ExpressionParser() def where(self, clause): self.expressions.append(self.parser.parse(clause.strip())) return self def group_by(self, *args): for arg in args: self.group_expression = self.parser.parse(arg.strip()) return self def order_by(self, *args): for arg in args: self.order_expressions.append(self.parser.parse(arg.strip())) return self def select(self, *cols): empty_message = "Selecting with no fields is not valid. " \ + "When using From(provider).select method, " \ + "please provide a list of expressions or strings as fields." Guard.against_empty(cols, empty_message) for col in cols: Guard.against_empty(col, empty_message) Guard.accepts_only(cols, [str, Expression], "Selecting with invalid type. " \ + "When using From(provider).select method, " \ + "please provide a list of expressions or strings as fields.") return self.provider.parse(self, action=Actions.Select, cols=cols) def select_many(self): return self.provider.parse(self, action=Actions.SelectMany) def count(self): return self.provider.parse(self, action=Actions.Count) def max(self, column="item"): return self.provider.parse(self, action=Actions.Max, column=column) def min(self, column="item"): return self.provider.parse(self, action=Actions.Min, column=column) def sum(self, column="item"): return self.provider.parse(self, action=Actions.Sum, column=column) def avg(self, column="item"): return self.provider.parse(self, action=Actions.Avg, column=column)