From c5ab5de00e45dc96c32173e4697b3fd713c08c88 Mon Sep 17 00:00:00 2001 From: Arvind Date: Thu, 9 Jan 2014 18:33:57 +0530 Subject: [PATCH] Abstracting query to ``Query`` class. Now a developer can instansiate a ``Query`` object with a table from database and then run pre-defined queries. --- query.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 query.py diff --git a/query.py b/query.py new file mode 100644 index 0000000..f86543c --- /dev/null +++ b/query.py @@ -0,0 +1,50 @@ +import logger +from sqlalchemy.sql import func + + +class Query: + """Objects of query class can be used to run specific queries.""" + def __init__(self, table): + self.t = logger.Logger(table) + + + def posts(self, date, dateRange): + return self.t.lt.query.filter(self.t.lt.status == 3, + self.t.lt.posted.between(date, dateRange)).count() + + def recordings(self, date, dateRange): + return self.t.lt.query.filter(self.t.lt.posted.between(date, + dateRange)).count() + def filter_by_title(self, title, date, dateRange): + return self.t.lt.query.filter(self.t.lt.title.like(title+'%'), + self.t.lt.posted.between(date, dateRange)).count() + + def load(self, channel, date, dateRange): + query = self.t.lt.query.with_entities(func.sum(self.t.lt.duration).label('sum')).filter(self.t.lt.dcontext == "callback", self.t.lt.channel.like(channel+'%'), self.t.lt.calldate.between(date, dateRange)) + sum = 0 + for res in query: + sum = res.sum/60 + return sum + + def average(self, date, dateRange): + query = self.t.lt.query.with_entities(func.avg(self.t.lt.duration).label('average')).filter(self.t.lt.dcontext == "callback", self.t.lt.calldate.between(date, dateRange)) + average = 0 + for res in query: + average = res.average/60 + return average + + def sum(self, date, dateRange): + query = self.t.lt.query.with_entities(func.sum(self.t.lt.duration).label('sum')).filter(self.t.lt.dcontext == "callback", self.t.lt.calldate.between(date, dateRange)) + sum = 0 + for res in query: + sum = res.sum/60 + return sum + + def missedCalls(self, date, dateRange): + return self.t.lt.query.filter(((self.t.lt.dcontext == 'mobilink') | + (self.t.lt.dcontext == 'mobilinktata')) & + (self.t.lt.calldate.between(date, dateRange))).count() + + def answeredCalls(self, date, dateRange): + return self.t.lt.query.filter(self.t.lt.dcontext == 'callback', + self.t.lt.calldate.between(date, dateRange)).count() \ No newline at end of file -- 1.7.10.4