fogbugz/backit html.py

106 lines
3.7 KiB
Python

from fogbugz import FogBugz
import sys
from jinja2 import Template
import os
import urllib
def main():
S_FOGBUGZ_URL = 'https://mobileretail.fogbugz.com/'
S_EMAIL = 'frederik.benoist@gfi.fr'
S_PASSWORD = '6brOc-gAr6'
MAX_BUGS = 10
TEMPLATE_FILE = '/Users/fbenoist68/Code/python/fogbugz/fbBackupTemplate.html'
fb = FogBugz(S_FOGBUGZ_URL)
fb.logon(S_EMAIL, S_PASSWORD)
resp = fb.search(q='type:"Cases"',
cols='ixBug',
max=MAX_BUGS)
tmpl = Template(open(TEMPLATE_FILE,'r').read())
for case in resp.cases.findAll('case'):
ixBug = int(case['ixBug'])
print(ixBug)
respBug = fb.search(q='%s' % ixBug,cols ='sTitle,sPersonAssignedTo,sProject,sArea,sCategory,sPriority,events')
xmlBug = respBug.cases.findAll('case')[0]
bug = {}
bug['ixBug'] = int(xmlBug['ixBug'])
bug['sTitle'] = xmlBug.sTitle.string if xmlBug.sTitle.string else ''
bug['sPersonAssignedTo'] = xmlBug.sPersonAssignedTo.string if xmlBug.sPersonAssignedTo.string else ''
bug['sProject'] = xmlBug.sProject.string if xmlBug.sProject.string else ''
bug['sArea'] = xmlBug.sArea.string if xmlBug.sArea.string else ''
bug['sCategory'] = xmlBug.sCategory.string if xmlBug.sCategory.string else ''
bug['sPriority'] = xmlBug.sPriority.string if xmlBug.sPriority.string else ''
bug['events'] = []
BACKUP_DIR = '/Users/fbenoist68/Code/python/fogbugz/fogbackup'
BACKUP_DIR += '/' + xmlBug.sProject.string if xmlBug.sProject.string else ''
if not os.path.exists(BACKUP_DIR):
os.makedirs(BACKUP_DIR)
BACKUP_DIR += '/' + str(xmlBug['ixBug'])
if not os.path.exists(BACKUP_DIR):
os.makedirs(BACKUP_DIR)
for event in xmlBug.events.findAll('event'):
bugEvent = {}
bugEvent['ixBugEvent'] = int(event['ixBugEvent'])
bugEvent['sVerb'] = event.sVerb.string if event.sVerb.string else ''
bugEvent['dt'] = event.dt.string if event.dt.string else ''
bugEvent['s'] = event.s.string if event.s.string else ''
bugEvent['sChanges'] = event.sChanges.string if event.sChanges.string else ''
bugEvent['evtDescription'] = event.evtDescription.string if event.evtDescription.string else ''
bugEvent['sPerson'] = event.sPerson.string if event.sPerson.string else ''
bugEvent['s'] = event.s.string.encode('ascii', 'ignore').decode('utf-8') if event.s.string else ''
theAttachments = ''
for att in event.rgAttachments:
theAttachments += 'Attachment: ' +att.sFileName.string + '\n'
print('Downloading attachment: ' + att.sFileName.string)
str1 = att.sURL.string
str2 = 'ixAttachment='
loc1 = str1.find(str2) + len(str2)
loc2 = str1.find('&sFileName')
str3 = ';sFileName='
loc3 = str1.find(str3) + len(str3)
loc4 = str1.find('&sTicket')
theURL = S_FOGBUGZ_URL #+ att.sURL.string
theURL += 'default.asp?'
theURL += 'ixAttachment=' + str1[loc1:loc2]
theURL += '&pg=pgDownload&pgType=pgFile&sFilename=' + str1[loc3:loc4]
theURL += '&token=rnl0t87rp34rfg6q0u0rgbhe85v5r8'
#fix the replace
newFileName = att.sFileName.string.replace('/','')
newFileName = newFileName.replace(':','')
newFileName = BACKUP_DIR+'/'+newFileName
print(newFileName)
urllib.request.urlretrieve(theURL, newFileName)
bugEvent['attachment'] = theAttachments
bug['events'].append(bugEvent)
f = open('%s\\%s.html' % (BACKUP_DIR,bug['ixBug']),'w')
f.write(tmpl.render(bug=bug))
f.close()
fb.view(ixBug=ixBug)
main()