def get_project_data(project_name): """ Gets data regarding specific project from FogBugz. Returns a project dictionary object: { "project": project name, "id" : FogBugz ID of project, "owner" : project contact name, "email" : owner's email, "wiki_id": FogBugz ID of the wiki with the same name as project } """ try: fb = FogBugz(FB_URL, FB_TOKEN) except: return "Cannot connect" project_xml = fb.viewProject(sProject=project_name) person_xml = fb.viewPerson(ixPerson=project_xml.ixpersonowner.text) project_dict = { 'project': project_xml.sproject.text.encode('UTF-8'), 'id': project_xml.ixproject.text, 'owner': person_xml.sfullname.text, 'email': person_xml.semail.text, 'wiki_id': None } wiki_list = fb.listWikis() for wiki in wiki_list.wikis.childGenerator(): if project_dict['project'] == wiki.swiki.text.encode('UTF-8'): wiki_id = wiki.ixwiki.text project_dict['wiki_id'] = wiki_id return project_dict
insertValues = [] # A list of tuples, where tuples are the case's information, to be inserted or updated into dbo.Case. insertDates = set() # A set of dates to insert into dbo.TimeTable maxDate = datetime.strptime(fbSettings.LASTRECORDED,'%Y-%m-%d %H:%M:%SZ') print "previous update time = " print maxDate # Go through each case and get its information. Clean up the data along the way. for case in resp.cases.childGenerator(): # get Opened By user IDOpenedBy = case.ixpersonopenedby.string StrOpenedBy = '' if IDOpenedBy in PersonsList: StrOpenedBy = PersonsList[IDOpenedBy] else: # person was not recorded yet, search FogBugz for user person = fb.viewPerson(ixPerson=IDOpenedBy) PersonsList[IDOpenedBy] = StrOpenedBy = person.sfullname.string # get Resolved By user IDResolvedBy = case.ixpersonresolvedby.string StrResolvedBy = '' if IDResolvedBy == '0': StrResolvedBy = None else: if IDResolvedBy in PersonsList: StrResolvedBy = PersonsList[IDResolvedBy] else: person = fb.viewPerson(ixPerson=IDResolvedBy) PersonsList[IDResolvedBy] = StrResolvedBy = person.sfullname.string # get Closed By user
class Bugz(object): def __init__(self): self.config = yaml.load(file('bugzbot.conf', 'r')) self.fb = FogBugz(self.config['FOGBUGZ_URL'], self.config['FOGBUGZ_TOKEN']) def returnUser(self, _semail): self.user = self.fb.viewPerson(semail=_semail) try: self.fb_user = self.user.people.person.sfullname.string return self.fb_user except AttributeError: return "User not found" def assignTicket(self, ticket_num, user, orig_user): self.touser = self.returnUser(user) print user print self.touser if self.touser != "User not found": self.event = "This ticket was assigned to you by slack user " + \ orig_user[1] + " courtesy of bugzbot!" self.fb.edit(ixBug=ticket_num, sPersonAssignedTo=self.touser, sEvent=self.event) self.checker = self.fb.search(q=ticket_num, cols="ixPersonAssignedTo") print self.checker if self.checker.cases.case.ixpersonassignedto.string != "93": return "success" else: return "One of us screwed up. I got stuck with the ticket somehow." \ "Please follow up and manually assign the ticket so it does not get lost in the shuffle!" else: return "Fogbugz user was not found. Please try again." def returnTicket(self, option, ticket_num): if option: self.retrieve_ticket = self.fb.search(q=ticket_num, cols='ixBug,sTitle,sProject') if self.retrieve_ticket.cases['count'] == str(1): self.ticket_title = self.retrieve_ticket.cases.case.stitle.string self.ticket_project = self.retrieve_ticket.cases.case.sproject.string self.ticket_URL = "https://tenthwave.fogbugz.com/f/cases/" + ticket_num self.ticket = "Ticket: " + ticket_num + " | " + self.ticket_title + \ "\n\n" + self.ticket_URL print self.ticket return self.ticket else: msg = "Something went wrong! Either Fogbugz is down, you're a magician calling a number " \ "that does not exist yet, or it somehow returned more than one ticket." print msg return msg else: self.retrieve_ticket = self.fb.search( q=ticket_num, cols="ixBug,sTitle,sLatestTextSummary,sArea,sProject") if self.retrieve_ticket.cases['count'] == str(1): self.ticket_title = self.retrieve_ticket.cases.case.stitle.string self.ticket_area = self.retrieve_ticket.cases.case.sarea.string self.ticket_project = self.retrieve_ticket.cases.case.sproject.string self.ticket_URL = "https://tenthwave.fogbugz.com/f/cases/" + ticket_num self.ticket_last_update = self.retrieve_ticket.cases.case.slatesttextsummary.string self.ticket = self.ticket_URL + "\n\nTicket: " + ticket_num + "\n" + self.ticket_project + \ " : " + self.ticket_area + "\n*" + self.ticket_title + "*\n\n" + self.ticket_last_update print self.ticket return self.ticket else: msg = "Something went wrong! Either Fogbugz is down, you're a magician calling a number " \ "that does not exist yet, or it somehow returned more than one ticket." print msg return msg