Changeset 2665

Show
Ignore:
Timestamp:
02/11/06 11:47:29 (18 years ago)
Author:
jerome
Message:

Ensures that date based filtering works consistently between LDAP and SQL.
Doesn't set an empty date to the other date anymore, because this gave
unexpected results :
dumpykota --data history start=20060101
gave only the history for 20060101 and not the history from
this date to the current date, as probably most people would
have expected. This is now fixed.

Location:
pykota/trunk/pykota
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/pykota/storage.py

    r2622 r2665  
    679679    def cleanDates(self, startdate, enddate) :     
    680680        """Clean the dates to create a correct filter.""" 
    681         if startdate is None : 
    682             startdate = enddate 
    683         if enddate is None :     
    684             enddate = startdate 
    685         if (startdate is None) and (enddate is None) :     
     681        if startdate :     
     682            startdate = startdate.strip().lower() 
     683        if enddate :     
     684            enddate = enddate.strip().lower() 
     685        if (not startdate) and (not enddate) :     
    686686            return (None, None) 
    687687             
    688688        now = DateTime.now()     
    689689        nameddates = ('yesterday', 'today', 'now', 'tomorrow') 
    690         datedict = { "start" : startdate.lower(), "end" : enddate.lower() }     
     690        datedict = { "start" : startdate, "end" : enddate }     
    691691        for limit in datedict.keys() : 
    692692            dateval = datedict[limit] 
    693             for name in nameddates : 
    694                 if dateval.startswith(name) : 
    695                     try : 
    696                         offset = int(dateval[len(name):]) 
     693            if dateval : 
     694                for name in nameddates : 
     695                    if dateval.startswith(name) : 
     696                        try : 
     697                            offset = int(dateval[len(name):]) 
     698                        except :     
     699                            offset = 0 
     700                        dateval = dateval[:len(name)]     
     701                        if limit == "start" : 
     702                            if dateval == "yesterday" : 
     703                                dateval = (now - 1 + offset).Format("%Y%m%d000000") 
     704                            elif dateval == "today" : 
     705                                dateval = (now + offset).Format("%Y%m%d000000") 
     706                            elif dateval == "now" : 
     707                                dateval = (now + offset).Format("%Y%m%d%H%M%S") 
     708                            else : # tomorrow 
     709                                dateval = (now + 1 + offset).Format("%Y%m%d000000") 
     710                        else : 
     711                            if dateval == "yesterday" : 
     712                                dateval = (now - 1 + offset).Format("%Y%m%d235959") 
     713                            elif dateval == "today" : 
     714                                dateval = (now + offset).Format("%Y%m%d235959") 
     715                            elif dateval == "now" : 
     716                                dateval = (now + offset).Format("%Y%m%d%H%M%S") 
     717                            else : # tomorrow 
     718                                dateval = (now + 1 + offset).Format("%Y%m%d235959") 
     719                        break 
     720                         
     721                if not dateval.isdigit() : 
     722                    dateval = None 
     723                else :     
     724                    lgdateval = len(dateval) 
     725                    if lgdateval == 4 : 
     726                        if limit == "start" :  
     727                            dateval = "%s0101 00:00:00" % dateval 
     728                        else :   
     729                            dateval = "%s1231 23:59:59" % dateval 
     730                    elif lgdateval == 6 : 
     731                        if limit == "start" :  
     732                            dateval = "%s01 00:00:00" % dateval 
     733                        else :   
     734                            mxdate = DateTime.ISO.ParseDateTime("%s01 00:00:00" % dateval) 
     735                            dateval = "%s%02i 23:59:59" % (dateval, mxdate.days_in_month) 
     736                    elif lgdateval == 8 : 
     737                        if limit == "start" :  
     738                            dateval = "%s 00:00:00" % dateval 
     739                        else :   
     740                            dateval = "%s 23:59:59" % dateval 
     741                    elif lgdateval == 10 : 
     742                        if limit == "start" :  
     743                            dateval = "%s %s:00:00" % (dateval[:8], dateval[8:]) 
     744                        else :   
     745                            dateval = "%s %s:59:59" % (dateval[:8], dateval[8:]) 
     746                    elif lgdateval == 12 : 
     747                        if limit == "start" :  
     748                            dateval = "%s %s:%s:00" % (dateval[:8], dateval[8:10], dateval[10:]) 
     749                        else :   
     750                            dateval = "%s %s:%s:59" % (dateval[:8], dateval[8:10], dateval[10:]) 
     751                    elif lgdateval == 14 :         
     752                        dateval = "%s %s:%s:%s" % (dateval[:8], dateval[8:10], dateval[10:12], dateval[12:]) 
     753                    else :     
     754                        dateval = None 
     755                    try :     
     756                        DateTime.ISO.ParseDateTime(dateval) 
    697757                    except :     
    698                         offset = 0 
    699                     dateval = dateval[:len(name)]     
    700                     if limit == "start" : 
    701                         if dateval == "yesterday" : 
    702                             dateval = (now - 1 + offset).Format("%Y%m%d000000") 
    703                         elif dateval == "today" : 
    704                             dateval = (now + offset).Format("%Y%m%d000000") 
    705                         elif dateval == "now" : 
    706                             dateval = (now + offset).Format("%Y%m%d%H%M%S") 
    707                         else : # tomorrow 
    708                             dateval = (now + 1 + offset).Format("%Y%m%d000000") 
    709                     else : 
    710                         if dateval == "yesterday" : 
    711                             dateval = (now - 1 + offset).Format("%Y%m%d235959") 
    712                         elif dateval == "today" : 
    713                             dateval = (now + offset).Format("%Y%m%d235959") 
    714                         elif dateval == "now" : 
    715                             dateval = (now + offset).Format("%Y%m%d%H%M%S") 
    716                         else : # tomorrow 
    717                             dateval = (now + 1 + offset).Format("%Y%m%d235959") 
    718                     break 
    719                      
    720             if not dateval.isdigit() : 
    721                 dateval = None 
    722             else :     
    723                 lgdateval = len(dateval) 
    724                 if lgdateval == 4 : 
    725                     if limit == "start" :  
    726                         dateval = "%s0101 00:00:00" % dateval 
    727                     else :   
    728                         dateval = "%s1231 23:59:59" % dateval 
    729                 elif lgdateval == 6 : 
    730                     if limit == "start" :  
    731                         dateval = "%s01 00:00:00" % dateval 
    732                     else :   
    733                         mxdate = DateTime.ISO.ParseDateTime("%s01 00:00:00" % dateval) 
    734                         dateval = "%s%02i 23:59:59" % (dateval, mxdate.days_in_month) 
    735                 elif lgdateval == 8 : 
    736                     if limit == "start" :  
    737                         dateval = "%s 00:00:00" % dateval 
    738                     else :   
    739                         dateval = "%s 23:59:59" % dateval 
    740                 elif lgdateval == 10 : 
    741                     if limit == "start" :  
    742                         dateval = "%s %s:00:00" % (dateval[:8], dateval[8:]) 
    743                     else :   
    744                         dateval = "%s %s:59:59" % (dateval[:8], dateval[8:]) 
    745                 elif lgdateval == 12 : 
    746                     if limit == "start" :  
    747                         dateval = "%s %s:%s:00" % (dateval[:8], dateval[8:10], dateval[10:]) 
    748                     else :   
    749                         dateval = "%s %s:%s:59" % (dateval[:8], dateval[8:10], dateval[10:]) 
    750                 elif lgdateval == 14 :         
    751                     dateval = "%s %s:%s:%s" % (dateval[:8], dateval[8:10], dateval[10:12], dateval[12:]) 
    752                 else :     
    753                     dateval = None 
    754                 try :     
    755                     DateTime.ISO.ParseDateTime(dateval) 
    756                 except :     
    757                     dateval = None 
    758             datedict[limit] = dateval     
     758                        dateval = None 
     759                datedict[limit] = dateval     
    759760        (start, end) = (datedict["start"], datedict["end"]) 
    760         if start > end : 
     761        if start and end and (start > end) : 
    761762            (start, end) = (end, start) 
    762763        return (start, end)     
  • pykota/trunk/pykota/storages/sql.py

    r2657 r2665  
    130130            thefilter = "AND %s" % thefilter 
    131131        (startdate, enddate) = self.cleanDates(startdate, enddate) 
    132         if startdate and enddate :  
    133             thefilter = "%s AND jobdate>=%s AND jobdate<=%s" % (thefilter, self.doQuote(startdate), self.doQuote(enddate)) 
     132        if startdate :  
     133            thefilter = "%s AND jobdate>=%s" % (thefilter, self.doQuote(startdate)) 
     134        if enddate :  
     135            thefilter = "%s AND jobdate<=%s" % (thefilter, self.doQuote(enddate)) 
    134136        result = self.doRawSearch("SELECT users.username,printers.printername,jobhistory.* FROM users,printers,jobhistory WHERE users.id=jobhistory.userid AND printers.id=jobhistory.printerid %s ORDER BY jobhistory.id ASC" % thefilter) 
    135137        return self.prepareRawResult(result)