Source code for ultipa.utils.ufilter.ufilter

import time
from typing import List

from ultipa.utils.checkStrTime import is_valid_date


[docs] class FilterOpt: EQ = "$eq" LT = "$lt" LTE = "$lte" GT = "$gt" GTE = "$gte" BT = "$bt" IN = "$in" OR = "$or" AND = "$and" NIN = "$nin"
[docs] class FilterBase: pass
[docs] class Filter(FilterBase): def __init__(self, name: str, value: object=None): self.name = name self.value = value
[docs] def builder(self): if self.name == 'id': self.name = '_id' try: if is_valid_date(self.value): filter = '{%s:{%s:"%s"}}' % (self.name, self.opt, self.value) else: filter = '{%s:{%s:%s}}' % (self.name, self.opt, self.value) return filter except Exception as e: print(e) return "%s"%self.value
[docs] class EqFilter(Filter): def __init__(self, name: str, value: any): super().__init__(name,value) self.opt = FilterOpt.EQ
[docs] def builder(self): if self.name == 'id': self.name = '_id' try: filter = '{%s:{%s:"%s"}}' % (self.name, self.opt, self.value) return filter except: return "%s"%self.value
[docs] class LtFilter(Filter): def __init__(self, name: str, value: any): super().__init__(name, value) self.opt = FilterOpt.LT
[docs] class LteFilter(Filter): def __init__(self, name: str, value: any): super().__init__(name, value) self.opt = FilterOpt.LTE
[docs] class GtFilter(Filter): def __init__(self, name: str, value: any): super().__init__(name, value) self.opt = FilterOpt.GT
[docs] class GteFilter(Filter): def __init__(self, name: str, value: any): super().__init__(name, value) self.opt = FilterOpt.GTE
[docs] class BtFilter(Filter): def __init__(self, name: str, value: object): super().__init__(name, value) self.opt = FilterOpt.BT
[docs] def builder(self): if self.name == 'id': self.name = '_id' try: filter = '{%s:{%s:%s}}' % (self.name, self.opt, self.value) return filter except: return "%s"%self.value
[docs] class InFilter(Filter): def __init__(self, name: str, value: object): super().__init__(name, value) self.opt = FilterOpt.IN
[docs] def builder(self): if self.name == 'id': self.name = '_id' try: filter = '{%s:{%s:%s}}' % (self.name, self.opt, self.value) return filter except: return "%s"%self.value
[docs] class NinFilter(Filter): def __init__(self, name: str, value: object): super().__init__(name, value) self.opt = FilterOpt.NIN
[docs] def builder(self): if self.name == 'id': self.name = '_id' try: filter = '{%s:{%s:%s}}' % (self.name, self.opt, self.value) return filter except: return "%s"%self.value
[docs] class OrFilter(FilterBase): def __init__(self,value: List[Filter]): # super().__init__(name) self.value=value self.opt = FilterOpt.OR
[docs] def builder(self): # if self.name == 'id': # self.name = '_id' filter = '{%s:[%s]}' % (self.opt,','.join([f.builder() for f in self.value])) return filter
[docs] class AndFilter(FilterBase): def __init__(self, value: List[Filter]): # super().__init__(name) self.value=value self.opt = FilterOpt.AND
[docs] def builder(self): # if self.name == 'id': # self.name = '_id' filter = '{%s:[%s]}' % (self.opt,','.join([f.builder() for f in self.value])) # filter = filter.replace('"',"") return filter