Пример #1
0
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
Пример #2
0
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
Пример #3
0
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