Changeset 364
- Timestamp:
- Tue Jan 8 00:59:46 2008
- Files:
-
- server/trunk/update/test/test_update_server.py (modified) (diff)
- server/trunk/update/server/current/Configuration.ini (modified) (diff)
- server/trunk/update/server/ganttpv_update_server.py (modified) (diff)
- server/trunk/update/server/HTMLIndex.py (added)
- server/trunk/update/server/HTML.py (modified) (diff)
- server/trunk/update/client/Share Changes with Server.py (modified) (diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
server/trunk/update/test/test_update_server.py
r360 r364 60 60 xpass = 1 61 61 62 pass_count = total_count = 0 63 62 64 def Result(s, p=1): 63 global xpass 65 global xpass, pass_count, total_count 66 total_count += 1 64 67 if xpass: 65 print "passed test" 68 pass_count += 1 69 print "passed %d of %d tests" % (pass_count, total_count) 66 70 else: 67 71 if p: … … 255 259 } 256 260 page = """ 257 <html><HEAD><title> 258 Project Database Server - Database Index 259 """ 261 <html><HEAD> 262 <title>Project Database Server - Database Index""" 260 263 result = server.get_html_report(web_parms) 261 264 compare_values('page text', page, result[:len(page)]) … … 270 273 } 271 274 page = """ 272 <html><HEAD><title> 273 Project Database - Web Report Index 274 """ 275 <html><HEAD> 276 <title>Project Database - Web Report Index""" 275 277 result = server.get_html_report(web_parms) 276 278 compare_values('page text', page, result[:len(page)]) … … 284 286 "Report": 4, 285 287 } 286 page = """\n<html><HEAD><title>\nNew Project / Gantt Chart (Task)\n""" 288 page = """ 289 <html><HEAD><title> 290 New Project / Gantt Chart (Task)""" 287 291 result = server.get_html_report(web_parms) 288 292 compare_values('page text', page, result[:len(page)]) -
server/trunk/update/server/current/Configuration.ini
r358 r364 29 29 30 30 server_key = CE428F03 31 32 # web security - how are web client passwords managed 33 # must be one of the following options 34 # none = no key required to view reports 35 # session = keys stored session, session expires one week after last use 36 37 web_security = session -
server/trunk/update/server/ganttpv_update_server.py
r358 r364 36 36 import Data 37 37 import HTML 38 import HTMLIndex 38 39 import datetime 39 40 import os … … 64 65 server_name = "GanttPV Server" # unique - use letters, digits, and spaces only 65 66 # if omitted, server will not publish via zero config 67 print "Server Name - '%s'" % server_name 66 68 67 69 # server location - must be a static ip address … … 83 85 server_key = "CE428F03" # <-- change this key for each server 84 86 87 # web security 88 if config.has_option('network', 'web_security'): 89 web_security = config.get('network', 'web_security').rstrip() 90 if web_security not in ('none', 'session'): 91 web_security = 'session' 92 else: 93 web_security = 'session' 94 print "Web Security - %s" % web_security 95 85 96 print "\nClients need the following parameters to add files to this server:" 86 97 print "%s:%d,%s\n" % (server_ip, server_port, server_key) … … 159 170 # SaveSessions() # only save it at least 1 day since the last time it was accessed??? 160 171 161 dblist = current_sessions[session]['DB'] 162 if db < 0 or db >= len(dblist): 163 if debug: print "Failed - db was outside of length of database list", db 164 return 0 165 request_fs = dblist[db][1] # signature 172 # if debug: print 'server web_security is:', web_security 173 if web_security == 'session': 174 dblist = current_sessions[session]['DB'] 175 if db < 0 or db >= len(dblist): 176 if debug: print "Failed - db was outside of length of database list", db 177 return 0 178 request_fs = dblist[db][1] # signature 179 else: 180 request_fs = db 166 181 167 182 # request_fs = webindex.get(request_fs) # is database available? … … 171 186 172 187 # request_key = parms.get('Key') 173 request_key = dblist[db][2] # key 174 if debug: print "request key", request_key 175 if request_key in get_keys(edit_keys): # is key authorized? 176 if debug: print "Pass - request key is in change keys" 188 if web_security == 'session': 189 request_key = dblist[db][2] # key 190 if debug: print "request key", request_key 191 if request_key in get_keys(edit_keys): # is key authorized? 192 if debug: print "Pass - request key is in change keys" 193 return -2 194 elif request_key in get_keys(view_keys): # is key authorized? 195 if debug: print "Pass - request key is in view keys" 196 return -1 197 personal_key = get_resource_id_from_key(request_key) 198 if personal_key: 199 if debug: print "Pass - request key is a personal key", personal_key 200 return personal_key # return person's resource id 201 if debug: print "Failed - request key wasn't found", personal_key 202 return 0 203 else: # web_security == 'none' 177 204 return -2 178 elif request_key in get_keys(view_keys): # is key authorized?179 if debug: print "Pass - request key is in view keys"180 return -1181 personal_key = get_resource_id_from_key(request_key)182 if personal_key:183 if debug: print "Pass - request key is a personal key", personal_key184 return personal_key # return person's resource id185 if debug: print "Failed - request key wasn't found", personal_key186 return 0187 205 188 206 def clear_session(parms): … … 196 214 # lookup key, create session, add key to session 197 215 def add_database_to_session(parms): 216 # delete sessions over two weeks old 217 then = datetime.datetime.now() - datetime.timedelta(14) # 2 weeks ago 218 for s in current_sessions.keys(): 219 if current_sessions[s]['LastAccess'] < then: 220 if debug: print 'deleting session %s' % s 221 del current_sessions[s] 222 198 223 session = parms.get('S') 199 224 key = parms.get('Key') … … 242 267 243 268 # return requested html report 269 def WriteHTMLReport(fp, reportid, parms): 270 if reportid == 0: # write the default report (report 0) 271 if debug: print "about to create report 0" 272 HTMLIndex.WriteDatabaseIndex(fp, reportid, parms) 273 return 274 275 reportdb = Data.Database['Report'] 276 if reportid != 1: 277 if not (reportid in reportdb and not reportdb[reportid].get('zzStatus') == 'deleted'): 278 if debug: print "not valid report id" 279 return "" 280 rr = reportdb[reportid] 281 282 if 1: # not local: 283 if reportid == 1 or not rr.get('Web'): # write the default report (report 1) 284 HTMLIndex.WriteReportIndex(fp, reportid, parms) 285 return 286 HTML.WriteHTML(fp, reportid, parms) # use dict eventually to select report 287 return 288 244 289 def get_html_report(parms): 245 290 if debug: print "starting get_html_report", parms 246 291 292 parms['Security'] = web_security # from server config file 293 247 294 edit_keys = ("OwnerKey", "EditKey", "WebEditKey") 248 295 view_keys = ("ViewKey", "WebViewKey") 249 id = web_permissions_okay(parms, edit_keys, view_keys) 296 id = web_permissions_okay(parms, edit_keys, view_keys) # switch to database 249 296 if not id: 250 297 if debug: print "didn't pass web permissions\nending get_html_report", id 251 298 return "" 252 299 253 if debug: print "permission id:", id 300 session = parms.get('S') 301 if session and session in current_sessions: 302 parms['SS'] = current_sessions[session] # dictionary of this session 303 304 parms['SDB'] = served # all databases 305 254 306 if id > 0: # specific person's key used 255 307 parms['ResourceFilter'] = id … … 258 310 parms['ResourceFilter'] = None # override anything in parms 259 311 260 # parms['ResourceFilter'] = 1 # used to test logic261 262 312 parms['AllowEdit'] = id == -2 or id > 0 # offer edit version of report 263 313 264 if debug: print "about to create a reporttext object"265 314 reportid = parms.get("Report") 266 315 report = ReportText(reportid) # create file-like object to capture report 267 316 HTML.self = report # so self.ReportID will give report number -- needed? 268 if debug: print "about to create a html page"269 270 session = parms.get('S')271 if session and session in current_sessions:272 parms['SS'] = current_sessions[session] # dictionary of this session273 parms['SDB'] = served # all databases274 317 275 318 if debug: print "reportid, parms:", reportid, parms 276 HTML.WriteHTML(report, reportid, parms) # use dict eventually to select report 277 if debug: print "created an html page" 278 # if debug: print "let's see it" 279 # if debug: print report.text 280 if debug: print "ending get_html_report" 319 # HTML.WriteHTML(report, reportid, parms) # use dict eventually to select report 320 WriteHTMLReport(report, reportid, parms) # use dict eventually to select report 321 281 322 return report.text 282 323 -
server/trunk/update/server/HTML.py
r221 r364 41 41 # 060902 - Alex - indent subtask names 42 42 # 060914 - Alex - use time-scale headers from Data (takes advantage of the better-looking headers in v0.7) 43 # 080107 - Brian - move index reports to separate module 43 44 44 45 # Note: The fonts used in this script are larger than in GanttPV. To reduce font size to more closely match GanttPV, change the "font-size" lines in the header strings. … … 124 125 return result 125 126 126 def DefineHeaders(): 127 global header1, header2, header2a, header3, footer1, footer2 127 # idea - convert to using the following templates -- TODO! 128 128 129 header1 = """ 130 <html><HEAD><title> 131 """ 132 header2 = """ 133 </title><meta http-equiv="content-type" content="text/html;charset=""" + cset + """"><STYLE> 129 # usage: template_page % (title, style, links, report_body) 130 template_page = ''' 131 <html><HEAD> 132 <title>%s</title> 133 <meta http-equiv="content-type" content="text/html;charset=UTF-8"> 134 <STYLE>%s</STYLE> 135 </HEAD><body> 136 %s 137 <div align=center> 138 %s 139 </div> 140 </body> 141 </html> 142 ''' 143 144 template_style = ''' 134 145 h3, td { font-family: verdana,arial,helvetica,sans-serif; } 135 146 h3 { font-size: 14px; color:#000000; background-color: #ffffff; } … … 150 161 .time { font-family: verdana,arial,helvetica,sans-serif; font-size: 8px; color:#808080; } 151 162 A.time { text-decoration:none } 163 ''' 164 165 # usage: template_report % (post_url, page_heading, report_rows, report_time) 166 # report_time = datetime.datetime.today().strftime("%y-%m-%d %H:%M")) # convert to display format 167 template_report = ''' 168 <form method="post" action="ganttpv_report.py%s"> 169 <table cellspacing=0 cellpadding=0> 170 <tr><td> </td><td align=center> 171 %s 172 <table border="1" cellspacing="0" cellpadding="1">\r 173 %s 174 </table> 175 </td><td> </td></tr> 176 <tr><td> </td><td align=right> 177 <div class="time"> 178 <a class="time" href="http://www.pureviolet.net/ganttpv/">GanttPV</a> %s 179 </div>' 180 </td><td> </td></tr> 181 </table> 182 </form> 183 ''' 184 185 def DefineHeaders(): 186 global header1, header2, header2a, header3, footer1, footer2 187 188 header1 = """ 189 <html><HEAD><title> 190 """ 191 header2 = """ 192 </title><meta http-equiv="content-type" content="text/html;charset=""" + cset + """"><STYLE> 193 """ + template_style + """ 152 194 </STYLE></HEAD><body> 153 195 <form method="post" action="ganttpv_report.py%s">%s … … 224 266 return columnID, columnName, columnTable 225 267 226 def WriteDatabaseIndex(fp, reportid, parms): 227 if debug: print "Starting WriteDatabaseIndex" 228 229 session = parms.get('S') 230 if debug: print "session", session 231 232 fp.write(header1) 233 fp.write(MakeString(_("Project Database Server - Database Index"))) 234 fp.write(header2 % ("", " ")) 235 fp.write('<h3>') 236 fp.write(MakeString(_("Databases Available in Server"))) 237 fp.write('</h3>\r') 238 239 fp.write('Database Key: <input type=text name="Key">') 240 fp.write('<input type=submit value="submit"><p>\r') 241 242 fp.write(header2a) 243 244 fp.write('<tr><td class="head">') 245 fp.write(MakeString(_("Database"))) 246 fp.write('</th><td class="head">') 247 fp.write(MakeString(_('Link'))) 248 fp.write('</th></tr>') 249 250 # build list of row options 251 session_data = parms.get('SS') # dictionary for this session 252 # sessions = parms.get('SD') 253 served = parms.get('SDB') # all of the databases, index by file signature 254 255 if session_data: 256 rlist = session_data.get('DB') # list of database keys 257 else: 258 rlist = [] 259 260 # rlist = Data.GetRowList(1) # report 2 shows projects and reports 261 db = 0 262 cnt = 0 263 for webkey, signature, key in rlist: 264 db = served.get(signature) # the database that corresponds to this key 265 if db: 266 webname = db.database['Other'][1].get('WebName') 267 fp.write('<tr><td class="body">') 268 fp.write((webname or "Database") + (" (%d)" % (signature % 1000))) 269 fp.write('</td><td class="body">') 270 fp.write('<a href="ganttpv_report.py?DB=%d;Report=1">' % cnt) 271 fp.write(MakeString(_('Show Reports'))) 272 fp.write('</a>') 273 fp.write('</td></tr>') 274 cnt += 1 275 276 if db == 0: 277 fp.write('<tr><td colspan=2>') 278 fp.write(MakeString(_("No databases."))) 279 fp.write('</td></tr>') 280 281 fp.write(footer1) 282 fp.write('<div class="time">') 283 # fp.write('<p><hr>') 284 fp.write('<a class="time" href="http://www.pureviolet.net/ganttpv/">GanttPV</a> ') 285 # fp.write('Exported on ') 286 dToday = datetime.datetime.today() # returns datetime object for now 287 fp.write(dToday.strftime("%y-%m-%d %H:%M")) # convert to display format 288 fp.write('</div>') 289 fp.write(footer2) 290 fp.close() 291 return 292 293 def WriteReportIndex(fp, reportid, parms): 294 edit = parms.get('AllowEdit') 295 db = parms.get('DB') 296 db_link = '<a class="index" href="ganttpv_report.py">Database Index</a>' 297 webname = Data.Other.get('WebName') or 'Project Database' 298 299 fp.write(header1) 300 fp.write(MakeString(_("%s - Web Report Index") % webname)) 301 fp.write(header2 % ("", db_link)) 302 fp.write('<h3>') 303 fp.write(MakeString(_("Web Reports in %s") % webname)) 304 fp.write('</h3>\r') 305 fp.write(header2a) 306 307 # database short cuts 308 reportdb = Data.Database['Report'] 309 rowdb = Data.Database['ReportRow'] 310 projectdb = Data.Database['Project'] 311 312 fp.write('<tr><td class="head">') 313 fp.write(MakeString(_("Project"))) 314 fp.write('</th><td class="head">') 315 fp.write(MakeString(_("Report"))) 316 fp.write('</th><td class="head" colspan=2>') 317 fp.write(MakeString(_('Report Format'))) 318 # fp.write('</th><td class="head">') 319 # fp.write(MakeString(_('Edit'))) 320 # fp.write('</th><td class="head">') 321 # fp.write(MakeString(_('Multi'))) 322 fp.write('</th></tr>') 323 324 # build list of row options 325 326 rlist = Data.GetRowList(1) # report 2 shows projects and reports 327 prior_pid = 0 328 329 for k in rlist: 330 rr = Data.ReportRow[k] 331 id = rr.get('TableID') 332 table = rr.get('TableName') # should always be 'ReportType' or 'ColumnType' 333 334 hidden = rr.get('Hidden') 335 deleted = reportdb[id].get('zzStatus') == 'deleted' 336 project = table == 'Project' 337 if hidden or deleted: continue 338 if project: # display project if any of it's reports are visible 339 continue 340 341 projectid = reportdb[id].get('ProjectID') 342 if not projectid in projectdb: continue 343 344 rn = reportdb[id].get('Name') 345 web = reportdb[id].get('Web') 346 pid = reportdb[id].get('ProjectID') 347 pn = projectdb[pid].get('Name') 348 349 if web or 0: 350 fp.write('<tr><td class="body">') 351 if prior_pid != pid: 352 fp.write(MakeString(pn)) 353 prior_pid = pid 354 else: 355 fp.write(' ') 356 357 fp.write('</td><td class="body">') 358 fp.write(MakeString(rn)) 359 360 fp.write('</td><td class="body">') 361 fp.write('<a href="ganttpv_report.py?DB=%d;Report=%d">' % (db, id)) 362 fp.write(MakeString(_('View'))) 363 364 fp.write('</a>') 365 fp.write('</td><td class="body">') 366 if edit: 367 fp.write('<a href="ganttpv_report.py?DB=%d;Report=%d;Edit=yes;InPlace=yes">' % (db, id)) 368 fp.write(MakeString(_('Edit'))) 369 370 fp.write('</a>') 371 else: 372 fp.write(' ') 373 # fp.write('</td><td class="body">') 374 # if edit: 375 # fp.write('<a href="ganttpv_report.py?DB=%d;Report=%d;Edit=yes">' % (db, id)) 376 # fp.write(MakeString(_('Multi'))) 377 # 378 # fp.write('</a>') 379 # else: 380 # fp.write(' ') 381 fp.write('</td></tr>') 382 383 if prior_pid == 0: 384 fp.write('<tr><td colspan=4>') 385 fp.write(MakeString(_("No reports available on the web."))) 386 387 fp.write('</td></tr>') 388 389 fp.write(footer1) 390 fp.write('<div class="time">') 391 # fp.write('<p><hr>') 392 fp.write('<a class="time" href="http://www.pureviolet.net/ganttpv/">GanttPV</a> ') 393 # fp.write('Exported on ') 394 dToday = datetime.datetime.today() # returns datetime object for now 395 fp.write(dToday.strftime("%y-%m-%d %H:%M")) # convert to display format 396 fp.write('</div>') 397 fp.write(footer2) 398 fp.close() 399 return 268 ##def WriteDatabaseIndex(fp, reportid, parms): 269 ## if debug: print "Starting WriteDatabaseIndex" 270 ## 271 ## session = parms.get('S') 272 ## if debug: print "session", session 273 ## 274 ## fp.write(header1) 275 ## fp.write(MakeString(_("Project Database Server - Database Index"))) 276 ## fp.write(header2 % ("", " ")) 277 ## fp.write('<h3>') 278 ## fp.write(MakeString(_("Databases Available in Server"))) 279 ## fp.write('</h3>\r') 280 ## 281 ## fp.write('Database Key: <input type=text name="Key">') 282 ## fp.write('<input type=submit value="submit"><p>\r') 283 ## 284 ## fp.write(header2a) 285 ## 286 ## fp.write('<tr><td class="head">') 287 ## fp.write(MakeString(_("Database"))) 288 ## fp.write('</th><td class="head">') 289 ## fp.write(MakeString(_('Link'))) 290 ## fp.write('</th></tr>') 291 ## 292 ## # build list of row options 293 ## session_data = parms.get('SS') # dictionary for this session 294 ### sessions = parms.get('SD') 295 ## served = parms.get('SDB') # all of the databases, index by file signature 296 ## 297 ## if session_data: 298 ## rlist = session_data.get('DB') # list of database keys 299 ## else: 300 ## rlist = [] 301 ## 302 ## # rlist = Data.GetRowList(1) # report 2 shows projects and reports 303 ## db = 0 304 ## cnt = 0 305 ## for webkey, signature, key in rlist: 306 ## db = served.get(signature) # the database that corresponds to this key 307 ## if db: 308 ## webname = db.database['Other'][1].get('WebName') 309 ## fp.write('<tr><td class="body">') 310 ## fp.write((webname or "Database") + (" (%d)" % (signature % 1000))) 311 ## fp.write('</td><td class="body">') 312 ## fp.write('<a href="ganttpv_report.py?DB=%d;Report=1">' % cnt) 313 ## fp.write(MakeString(_('Show Reports'))) 314 ## fp.write('</a>') 315 ## fp.write('</td></tr>') 316 ## cnt += 1 317 ## 318 ## if db == 0: 319 ## fp.write('<tr><td colspan=2>') 320 ## fp.write(MakeString(_("No databases."))) 321 ## fp.write('</td></tr>') 322 ## 323 ## fp.write(footer1) 324 ## fp.write('<div class="time">') 325 ## # fp.write('<p><hr>') 326 ## fp.write('<a class="time" href="http://www.pureviolet.net/ganttpv/">GanttPV</a> ') 327 ## # fp.write('Exported on ') 328 ## dToday = datetime.datetime.today() # returns datetime object for now 329 ## fp.write(dToday.strftime("%y-%m-%d %H:%M")) # convert to display format 330 ## fp.write('</div>') 331 ## fp.write(footer2) 332 ## fp.close() 333 ## return 334 335 ##def WriteReportIndex(fp, reportid, parms): 336 ## edit = parms.get('AllowEdit') 337 ## db = parms.get('DB') 338 ## db_link = '<a class="index" href="ganttpv_report.py">Database Index</a>' 339 ## webname = Data.Other.get('WebName') or 'Project Database' 340 ## 341 ## fp.write(header1) 342 ## fp.write(MakeString(_("%s - Web Report Index") % webname)) 343 ## fp.write(header2 % ("", db_link)) 344 ## fp.write('<h3>') 345 ## fp.write(MakeString(_("Web Reports in %s") % webname)) 346 ## fp.write('</h3>\r') 347 ## fp.write(header2a) 348 ## 349 ## # database short cuts 350 ## reportdb = Data.Database['Report'] 351 ## rowdb = Data.Database['ReportRow'] 352 ## projectdb = Data.Database['Project'] 353 ## 354 ## fp.write('<tr><td class="head">') 355 ## fp.write(MakeString(_("Project"))) 356 ## fp.write('</th><td class="head">') 357 ## fp.write(MakeString(_("Report"))) 358 ## fp.write('</th><td class="head" colspan=2>') 359 ## fp.write(MakeString(_('Report Format'))) 360 ### fp.write('</th><td class="head">') 361 ### fp.write(MakeString(_('Edit'))) 362 ### fp.write('</th><td class="head">') 363 ### fp.write(MakeString(_('Multi'))) 364 ## fp.write('</th></tr>') 365 ## 366 ## # build list of row options 367 ## 368 ## rlist = Data.GetRowList(1) # report 2 shows projects and reports 369 ## prior_pid = 0 370 ## 371 ## for k in rlist: 372 ## rr = Data.ReportRow[k] 373 ## id = rr.get('TableID') 374 ## table = rr.get('TableName') # should always be 'ReportType' or 'ColumnType' 375 ## 376 ## hidden = rr.get('Hidden') 377 ## deleted = reportdb[id].get('zzStatus') == 'deleted' 378 ## project = table == 'Project' 379 ## if hidden or deleted: continue 380 ## if project: # display project if any of it's reports are visible 381 ## continue 382 ## 383 ## projectid = reportdb[id].get('ProjectID') 384 ## if not projectid in projectdb: continue 385 ## 386 ## rn = reportdb[id].get('Name') 387 ## web = reportdb[id].get('Web') 388 ## pid = reportdb[id].get('ProjectID') 389 ## pn = projectdb[pid].get('Name') 390 ## 391 ## if web or 0: 392 ## fp.write('<tr><td class="body">') 393 ## if prior_pid != pid: 394 ## fp.write(MakeString(pn)) 395 ## prior_pid = pid 396 ## else: 397 ## fp.write(' ') 398 ## 399 ## fp.write('</td><td class="body">') 400 ## fp.write(MakeString(rn)) 401 ## 402 ## fp.write('</td><td class="body">') 403 ## fp.write('<a href="ganttpv_report.py?DB=%d;Report=%d">' % (db, id)) 404 ## fp.write(MakeString(_('View'))) 405 ## 406 ## fp.write('</a>') 407 ## fp.write('</td><td class="body">') 408 ## if edit: 409 ## fp.write('<a href="ganttpv_report.py?DB=%d;Report=%d;Edit=yes;InPlace=yes">' % (db, id)) 410 ## fp.write(MakeString(_('Edit'))) 411 ## 412 ## fp.write('</a>') 413 ## else: 414 ## fp.write(' ') 415 ### fp.write('</td><td class="body">') 416 ### if edit: 417 ### fp.write('<a href="ganttpv_report.py?DB=%d;Report=%d;Edit=yes">' % (db, id)) 418 ### fp.write(MakeString(_('Multi'))) 419 ### 420 ### fp.write('</a>') 421 ### else: 422 ### fp.write(' ') 423 ## fp.write('</td></tr>') 424 ## 425 ## if prior_pid == 0: 426 ## fp.write('<tr><td colspan=4>') 427 ## fp.write(MakeString(_("No reports available on the web."))) 428 ## 429 ## fp.write('</td></tr>') 430 ## 431 ## fp.write(footer1) 432 ## fp.write('<div class="time">') 433 ## # fp.write('<p><hr>') 434 ## fp.write('<a class="time" href="http://www.pureviolet.net/ganttpv/">GanttPV</a> ') 435 ## # fp.write('Exported on ') 436 ## dToday = datetime.datetime.today() # returns datetime object for now 437 ## fp.write(dToday.strftime("%y-%m-%d %H:%M")) # convert to display format 438 ## fp.write('</div>') 439 ## fp.write(footer2) 440 ## fp.close() 441 ## return 400 442 401 443 def EditPeriod(cid, date): … … 453 495 454 496 # decide which report to print 455 if reportid == 0: # write the default report (report 0) 456 if debug: print "about to create report 0" 457 WriteDatabaseIndex(fp, reportid, parms) 458 return 497 ## if reportid == 0: # write the default report (report 0) 498 ## if debug: print "about to create report 0" 499 ## WriteDatabaseIndex(fp, reportid, parms) 500 ## return 459 501 460 502 reportdb = Data.Database['Report'] 461 503 if reportid != 1: 462 if not (reportid in reportdb and not reportdb[reportid].get('zzStats') == 'deleted'): 504 if not (reportid in reportdb and not reportdb[reportid].get('zzStatus') == 'deleted'): 462 504 if debug: print "not valid report id" 463 505 return "" 464 506 rr = reportdb[reportid] 465 507 466 if not local: 467 if reportid == 1 or not rr.get('Web'): # write the default report (report 1) 468 WriteReportIndex(fp, reportid, parms) 469 return 508 ## if not local: 509 ## if reportid == 1 or not rr.get('Web'): # write the default report (report 1) 510 ## WriteReportIndex(fp, reportid, parms) 511 ## return 470 512 report = Data.Report[reportid] 471 513 … … 486 528 if debug: "override edit", parm_allow_edit, parm_edit
