class ViewExplore(object): _cp_config = { 'auth.require': None, } def __init__(self, parent): self.parent = parent self.control = Control() def getargs(self, report=None, subfolder=None, filter=False, fromdate=None, todate=None): if str(fromdate).lower() in ('today', 't') : fromdate = datetime.datetime.now().date() elif fromdate is None: fromdate =datetime.datetime.now().date() elif isinstance(fromdate, str): fromdate = datetime.datetime(*time.strptime(fromdate, "%d/%m/%Y")[:6]).date() if str(todate).lower() in ('today', 't') or todate is None: todate = datetime.datetime.now().date() elif isinstance(todate, str): todate = datetime.datetime(*time.strptime(todate, "%d/%m/%Y")[:6]).date() columns = ['Report', 'Formats', 'As of Date', 'When Published', 'First As of', 'Most recent As of'] reportdata = { 'd' : [], 'w' : [], 'm' : [], } cache = self.control.getLatest() for period, data in cache.iteritems(): for key, item in data.iteritems(): row = { "name" : item["name"], "maxasof" : item["maxasof"], "minasof" : item["minasof"], "asof" : item["maxasof"], "published" : "", "files" : [], } if item["grouptype"] != "report": row["url"] = '/explore?report=%s' % key row["files"] = [(row["url"], row["name"], 'dir')] else: basepath = reportconfig.reportindex[item["reportid"]]["basepath"] virtualpath = reportconfig.folderindex[basepath] files = [] for info in item["files"][item["reportid"]].get(item["maxasof"], []): path = os.path.join(virtualpath, info["childpath"], info["name"]) files.append((path, info["name"], info["filetype"])) row["published"] = info["modified"] row["files"] = files row["url"] = path reportdata[period].append(row) #reportdata['d'].sort(lambda a, b : cmp((a[1],a[3]), (b[1],b[3]))) #reportdata['w'].sort(lambda a, b : cmp((a[1],a[3]), (b[1],b[3]))) #reportdata['m'].sort(lambda a, b : cmp((a[1],a[3]), (b[1],b[3]))) reportdata['d'].sort(lambda a, b : cmp(a["name"], b["name"])) reportdata['w'].sort(lambda a, b : cmp(a["name"], b["name"])) reportdata['m'].sort(lambda a, b : cmp(a["name"], b["name"])) tabledata = Table(title='Reports', columns=columns, data=reportdata, ) args = { "folder" : None, "filter" : filter, "fromdate" : fromdate, "todate" : todate, "report" : report, "reportid" : None, "subfolder" : subfolder, "tabledata" : tabledata, "reportmenu" : reportconfig.reportmenu, "generallinks" : reportconfig.generallinks, } return args def getargsDir(self, report=None, subfolder=None, filter=False, fromdate=None, todate=None): if str(fromdate).lower() in ('today', 't') : fromdate = datetime.datetime.now().date() elif fromdate is None: fromdate =datetime.datetime.now().date() elif isinstance(fromdate, str): fromdate = datetime.datetime(*time.strptime(fromdate, "%d/%m/%Y")[:6]).date() if str(todate).lower() in ('today', 't') or todate is None: todate = datetime.datetime.now().date() elif isinstance(todate, str): todate = datetime.datetime(*time.strptime(todate, "%d/%m/%Y")[:6]).date() columns = ['Report', 'Formats', 'As of Date', 'When Published', 'First As of', 'Most recent As of'] reportdata = { 'd' : [], 'w' : [], 'm' : [], } defaultItem = { "name" : None, "maxasof" : datetime.date(datetime.MINYEAR, 1, 1), "minasof" : datetime.date(datetime.MAXYEAR, 12, 31), "asof" : datetime.date(datetime.MINYEAR, 1, 1), "files" : {}, } groupindex = {} for info in self.control._filescan_cache: if info["groupname"] != report: continue groupby = info["groupby"] reportid = info["reportid"] fileasof = info["fileasof"] reportname = info["reportname"] reportItem = groupindex.get(reportname, copy.deepcopy(defaultItem)) reportItem["name"] = info["reportname"] reportItem["reportid"] = reportid if reportItem["minasof"] is None or reportItem["minasof"] > fileasof: reportItem["minasof"] = fileasof if reportItem["maxasof"] is None or reportItem["maxasof"] < fileasof: reportItem["maxasof"] = fileasof #only interested in the most recent files if reportItem["maxasof"] == fileasof: files_asof = reportItem["files"].get(fileasof, []) files_asof.append(info) #remove older(other) asof's for key in reportItem["files"].keys(): if key != fileasof: del reportItem["files"][key] reportItem["files"][fileasof] = files_asof groupindex[reportname] = reportItem for reportname, reportItem in groupindex.iteritems(): reportid = reportItem["reportid"] row = { "name" : reportItem["name"], "maxasof" : reportItem["maxasof"], "minasof" : reportItem["minasof"], "asof" : reportItem["maxasof"], "published" : "", "files" : [], } basepath = reportconfig.reportindex[reportid]["basepath"] virtualpath = reportconfig.folderindex[basepath] files = [] period = None for info in reportItem["files"].get(reportItem["maxasof"], []): path = os.path.join(virtualpath, info["childpath"], info["name"]) files.append((path, info["name"], info["filetype"])) row["published"] = info["modified"] period = info["period"] row["files"] = files row["url"] = path reportdata[period].append(row) reportdata['d'].sort(lambda a, b : cmp((a["name"],a["asof"]), (b["name"],b["asof"]))) reportdata['w'].sort(lambda a, b : cmp((a["name"],a["asof"]), (b["name"],b["asof"]))) reportdata['m'].sort(lambda a, b : cmp((a["name"],a["asof"]), (b["name"],b["asof"]))) #reportdata['d'].sort(lambda a, b : cmp(a["name"], b["name"])) #reportdata['w'].sort(lambda a, b : cmp(a["name"], b["name"])) #reportdata['m'].sort(lambda a, b : cmp(a["name"], b["name"])) tabledata = Table(title='Reports', columns=columns, data=reportdata, ) args = { "folder" : report, "filter" : filter, "fromdate" : fromdate, "todate" : todate, "report" : report, "reportid" : None, "subfolder" : subfolder, "tabledata" : tabledata, "reportmenu" : reportconfig.reportmenu, "generallinks" : reportconfig.generallinks, } return args def getargsSearch(self, reportparam=None, fromdate=None, todate=None): if str(fromdate).lower() in ('today', 't') : fromdate = datetime.datetime.now().date() elif fromdate is None: fromdate =datetime.datetime.now().date() elif isinstance(fromdate, str): fromdate = datetime.datetime(*time.strptime(fromdate, "%d/%m/%Y")[:6]).date() if str(todate).lower() in ('today', 't') or todate is None: todate = datetime.datetime.now().date() elif isinstance(todate, str): todate = datetime.datetime(*time.strptime(todate, "%d/%m/%Y")[:6]).date() columns = ['Report', 'Formats', 'As of Date', 'When Published', 'First As of', 'Most recent As of'] reportdata = { 'd' : [], 'w' : [], 'm' : [], } defaultItem = { "name" : None, "maxasof" : datetime.date(datetime.MINYEAR, 1, 1), "minasof" : datetime.date(datetime.MAXYEAR, 12, 31), "asof" : datetime.date(datetime.MINYEAR, 1, 1), "files" : {}, } groupindex = {} for info in self.control._filescan_cache: groupby = info["groupby"] reportid = info["reportid"] fileasof = info["fileasof"] reportname = info["reportname"] period = info["period"] if info["reportid"] != reportparam and info["groupname"] != reportparam: continue if not inRange(fileasof, period, fromdate, todate): continue reportItem = groupindex.get(reportname, copy.deepcopy(defaultItem)) reportItem["name"] = info["reportname"] reportItem["reportid"] = reportid if reportItem["minasof"] is None or reportItem["minasof"] > fileasof: reportItem["minasof"] = fileasof if reportItem["maxasof"] is None or reportItem["maxasof"] < fileasof: reportItem["maxasof"] = fileasof files_asof = reportItem["files"].get(fileasof, []) files_asof.append(info) reportItem["files"][fileasof] = files_asof groupindex[reportname] = reportItem for reportname, reportItem in groupindex.iteritems(): for fileasof, reportfiles in reportItem["files"].iteritems(): reportid = reportItem["reportid"] row = { "name" : reportItem["name"], "maxasof" : reportItem["maxasof"], "minasof" : reportItem["minasof"], "asof" : fileasof, "published" : "", "files" : [], } basepath = reportconfig.reportindex[reportid]["basepath"] virtualpath = reportconfig.folderindex[basepath] files = [] period = None for info in reportfiles: path = os.path.join(virtualpath, info["childpath"], info["name"]) files.append((path, info["name"], info["filetype"])) row["published"] = info["modified"] period = info["period"] row["files"] = files row["url"] = path reportdata[period].append(row) reportdata['d'].sort(lambda a, b : cmp((a["name"],a["asof"]), (b["name"],b["asof"]))) reportdata['w'].sort(lambda a, b : cmp((a["name"],a["asof"]), (b["name"],b["asof"]))) reportdata['m'].sort(lambda a, b : cmp((a["name"],a["asof"]), (b["name"],b["asof"]))) #reportdata['d'].sort(lambda a, b : cmp(a["name"], b["name"])) #reportdata['w'].sort(lambda a, b : cmp(a["name"], b["name"])) #reportdata['m'].sort(lambda a, b : cmp(a["name"], b["name"])) tabledata = Table(title='Reports', columns=columns, data=reportdata, ) args = { "folder" : None, "filter" : filter, "fromdate" : fromdate, "todate" : todate, "report" : None, "reportid" : reportparam, "subfolder" : None, "tabledata" : tabledata, "reportmenu" : reportconfig.reportmenu, "generallinks" : reportconfig.generallinks, } return args @cherrypy.expose @template.output('index.html') def index(self, report=None, subfolder=None, filter=None, reportid=None, fromdate=None, todate=None): filter = bool(filter) if str(fromdate).lower() in ('today', 't') : fromdate = datetime.datetime.now().date() elif fromdate is None: fromdate =datetime.datetime.now().date() else: fromdate = datetime.datetime(*time.strptime(fromdate, "%d/%m/%Y")[:6]).date() if str(todate).lower() in ('today', 't') or todate is None: todate = datetime.datetime.now().date() else: todate = datetime.datetime(*time.strptime(todate, "%d/%m/%Y")[:6]).date() args = self.parent.getargs() if filter: args["pagetitle"] = "Historical reports" if 0 and not any_of(member_of_ad('Whiteclif - P&L'), member_of('admin'))(): log.debug("Auth Failed") tabledata = Table(title='Reports', columns=[' '], data=[['You do not have sufficient rights to view reports']], ) reportargs = { "folder" : None, "filter" : filter, "fromdate" : fromdate, "todate" : todate, "authorised" : False, "report" : report, "subfolder" : subfolder, "reportmenu" : reportconfig.reportmenu, "tabledata" : tabledata, } else: if reportid and filter: reportargs = self.getargsSearch(reportparam=reportid, fromdate=fromdate, todate=todate) elif report: groupinfo = reportconfig.groupindex.get(report, None) if groupinfo and groupinfo.get("groupby", None) == 'groupdir': reportargs = self.getargsGroupDir(report, subfolder, filter=False, fromdate=fromdate, todate=todate) else: reportargs = self.getargsDir(report, subfolder, filter=filter, fromdate=fromdate, todate=todate) else: reportargs = self.getargs(report, subfolder, filter=filter, fromdate=fromdate, todate=todate) args.update(reportargs) args["include"] = 'reports.html' args["refresh"] = False log.debug("Rendering Template") html = template.render(**args) log.debug("Rendering Template Complete") return html