def run(self, edit): window = self.view.window() TEMPLATE = ( "{key} - {name}\n" "@@ Projekt: {project}\n" "@@ Projekt Name: {project_name}\n" "@@ Reporter: {reporter}\n" "@@ Bearbeiter: {assignee}\n" "\n" "@@ Description:\n" "{description}\n" "\n" "@@ Text:\n" "{text}\n" ) self.view.run_command('select_all') text = self.view.substr(self.view.sel()[0]) self.view.sel().clear() templateRegEx = re.sub(r'\{', "(?P<", TEMPLATE) templateRegEx = re.sub(r'\}', ">(.|\n)*)", templateRegEx) templateRegEx = re.compile(templateRegEx) inputValues = re.match(templateRegEx, text).groupdict() connection = LimeConnection() r = connection.update(inputValues['key'], LimeIssue().mapLimeToJira(inputValues))
def run(self, edit, issue_key=None): window = self.view.window() if not issue_key: window.run_command('prompt_issue_key', {'callback': 'open_issue'}) else: connection = LimeConnection() issue = connection.get(issue_key) TEMPLATE = ( "{key} - {name}\n" "@@ Projekt: {project}\n" "@@ Projekt Name: {project_name}\n" "@@ Reporter: {reporter}\n" "@@ Bearbeiter: {assignee}\n" # "@@ Updated: {updated}\n" "@@ Sprint: {version}\n" "\n" "@@ Description:\n" "{description}\n" "\n" "@@ Text:\n" "{text}\n" ) keywords = re.findall(r'\{([a-z_]+)\}', TEMPLATE) valuesMap = {} for key in keywords: valuesMap[key] = issue.getattr(key) text = TEMPLATE.format(**valuesMap) window.new_file() view = window.active_view() view.insert(edit, 0, text)
def run(self, edit, issue_key=None): window = self.view.window() if not issue_key: window.run_command('prompt_issue_key', {'callback': 'get_jira_headline'}) else: connection = LimeConnection() issue = connection.get(issue_key) region = self.view.sel() line = self.view.line(region[0]) self.view.insert(edit, line.end(), "\n@ "+issue.key+" - "+issue.name+"\n"+issue.description)
def getEpicMap(): name = 'JiraWithLime.sublime-settings' settings = sublime.load_settings(name) project = settings.get('project', '') conn = LimeConnection() r = conn.getEpics(project) epicMap = json.loads(r.text)["epicNames"] epicArray = [] for epic in epicMap: epicArray.append(epic["name"]) return epicMap, epicArray
def findVersionId(projectID, name): #10905 versionId = -1 connection = LimeConnection() response, data = connection.getAllVersionsOfProject(projectID) for v in data['unreleasedVersions']: if v['label'] == name: versionId = v['value'] break for v in data['releasedVersions']: if v['label'] == name: versionId = v['value'] break if versionId == -1: sublime.error_message("Could not find Version "+name) raise Exception("Could not find Version") return versionId
def run(self, edit, cycletype, issue_key=None): self.window = self.view.window() self.util = Util() settings = sublime.load_settings("JiraWithLime.sublime-settings") self.projectKey = settings.get("project", "") self.cycletype = cycletype if not issue_key: window = self.view.window() call = lambda v: window.run_command("create_test_cycle", {"cycletype": cycletype, "issue_key": v}) if cycletype == "story": window.show_input_panel("Key", self.projectKey + "-", call, None, None) else: window.show_input_panel("Lable", "", call, None, None) else: self.connection = LimeConnection() self.environment = "" self.version = "" self.versionId = "" self.key = issue_key if cycletype == "story": self.issue = self.connection.get(issue_key) self.version = self.issue.version self.versionId = self.issue.versionId self.projectId = self.issue.projectId print("projectID #### ", str(self.issue.projectId)) self.window.show_input_panel("Sprint:", self.version, self.setSprint, None, None) else: self.projectId = self.util.getProjectId(self.projectKey) self.window.show_input_panel("Sprint:", "Sprint-", self.setSprint, None, None)
def run(self, edit, issue_key=None): window = self.view.window() if not issue_key: window.run_command('prompt_issue_key', {'callback': 'new_tests'}) else: connection = LimeConnection() issue = connection.get(issue_key) TEST_HEAD_TEMPLATE = ( "{key} - {name}\n" "{description}\n" "\n" "@@ Projekt: {project}\n" "@@ Story: {key}\n" "@@ Story Reporter: {reporter}\n" "\n" "@@ Version: {version}\n" "@@ Attribute: {attribute}\n" "@@ Testgruppen: {testgroup}\n" '@@ Komponente: {component}\n' '@@ Stichwörter: {lables}\n' '@@ Bearbeiter: {assignee}\n' "\n" ) keywords = re.findall(r'\{([a-z_]+)\}', TEST_HEAD_TEMPLATE) valuesMap = {} for key in keywords: valuesMap[key] = issue.getattr(key) valuesMap['attribute'] = "Regressionstest, Live-Test, Automatisiert" valuesMap['key'] = issue_key settings = sublime.load_settings('JiraWithLime.sublime-settings') valuesMap['assignee'] = settings.get('assignee', "") valuesMap['component'] = settings.get('component', "") valuesMap['testgroup'] = settings.get('testgroup', "") text = TEST_HEAD_TEMPLATE.format(**valuesMap) window.new_file() view = window.active_view() view.insert(edit, 0, text) window.run_command('add_test_template') window.run_command('add_test_template') window.run_command('add_test_template')
def run(self, edit, testValues): print("Beginn creating Story Issues") self.window = self.view.window() self.connection = LimeConnection() self.offset = 0 self.parser = MyMarkdownParser() for test in testValues: newIssue = { 'fields' : { "project" : { 'key' : test['project'] }, "summary" : test['name'], "description" : self.parser.build_markdown(test['description']), "issuetype" : { "name" : test['type'] }, "priority" : { "id": "3" }, "customfield_11800" : test['short_description'], "components" : [], "versions" : [{"name":test['version']}], "assignee" : {'name' : test['assignee']} } } if test['type'] == 'Story': newIssue['customfield_15502'] = test['short_description'] newIssue['labels'] = test['labels'] if test['type'] == 'Subtask': if self.prevIssueKey != '': newIssue['fields']['parent'] = {"key": self.prevIssueKey } else: newIssue['fields']['parent'] = {"key": test['parent'] } for components in test['components']: if components != '': newIssue['fields']['components'].append({'name':components}) if(test['key'] == ''): self.createStory(test, newIssue, edit) else: self.updateStory(test, newIssue, edit) if test['type'] == 'Story': self.prevIssueKey = test['key'] if test['epic'] != ['']: self.createEpicLinks(test) sublime.message_dialog("Finish")
def getAllIssueKeysFromSearch(fields, values): searchString = "" for i in range(len(fields)): searchString+=fields[i] searchString+=" = " searchString+=values[i] if(i < len(fields)-1): searchString+=" and " searchJson = { 'jql' : searchString, "startAt" : 0, "maxResults" : 100, "fields" : ["id","key","issuetype"] } connection = LimeConnection() response, data = connection.searchIssues(searchJson) testList = [] for issue in data['issues']: # issue['fields']['key'] print("issueField", issue['key']) testList.append(issue['key']) return testList
def run(self, edit, testValues): print("Beginn creating Test Issues") self.window = self.view.window() self.connection = LimeConnection() self.offset = 0 self.parser = MyMarkdownParser() for test in testValues: newIssue = { 'fields' : { "project" : { 'key' : test['project'] }, "summary" : test['name'], "description" : self.parser.build_markdown(test['description']), "issuetype" : { "name" : "Test" }, "priority" : { "id": "3" }, "customfield_15603" : [test['story']], #Story "components" : [], "versions" : [{"name":test['version']}], "labels" : test['labels'], "assignee" : {'name' : test['assignee']} } } if len(test['attributes']) > 0: newIssue['fields']['customfield_15604'] = [] if len(test['testgroups']) > 0: newIssue['fields']['customfield_15601'] = [] for attribut in test['attributes']: if attribut != '': newIssue['fields']['customfield_15604'].append({'value' : attribut}) for testgroup in test['testgroups']: if testgroup != '': newIssue['fields']['customfield_15601'].append(testgroup) for components in test['components']: if components != '': newIssue['fields']['components'].append({"name":components}) if(test['key'] == ''): self.createTest(test, newIssue, edit) else: self.updateTest(test, newIssue, edit) sublime.message_dialog("Finish")
def run(self, edit, testValues): print("Beginn creating Bug Issues") self.window = self.view.window() self.connection = LimeConnection() self.offset = 0 self.parser = MyMarkdownParser() for test in testValues: newIssue = { 'fields' : { "project" : { 'key' : test['project'] }, "summary" : test['name'], "description" : self.parser.build_markdown(test['description']), "issuetype" : { "name" : "Bug" }, "priority" : { "id": "3" }, "components" : [], "fixVersions" : [{"name":test['version']}], # "labels" : test['labels'], "assignee" : {'name' : test['assignee']}, # "customfield_11018" : {"value" : test['domain']}, "customfield_11013" : {"value": test['environment']}, "customfield_16038" : test['browser'], "customfield_16039" : test['device'], "customfield_16040" : test['operatingsystem'] } } for components in test['components']: if components != '': newIssue['fields']['components'].append({"name":components}) if(test['key'] == ''): self.createBug(test, newIssue, edit) else: self.updateBug(test, newIssue, edit) sublime.message_dialog("Finish")
def getProjectId(projectKey): connection = LimeConnection() response, data = connection.getProjectId(projectKey) return data["id"]
class CreateTestCycleCommand(sublime_plugin.TextCommand): def run(self, edit, cycletype, issue_key=None): self.window = self.view.window() self.util = Util() settings = sublime.load_settings("JiraWithLime.sublime-settings") self.projectKey = settings.get("project", "") self.cycletype = cycletype if not issue_key: window = self.view.window() call = lambda v: window.run_command("create_test_cycle", {"cycletype": cycletype, "issue_key": v}) if cycletype == "story": window.show_input_panel("Key", self.projectKey + "-", call, None, None) else: window.show_input_panel("Lable", "", call, None, None) else: self.connection = LimeConnection() self.environment = "" self.version = "" self.versionId = "" self.key = issue_key if cycletype == "story": self.issue = self.connection.get(issue_key) self.version = self.issue.version self.versionId = self.issue.versionId self.projectId = self.issue.projectId print("projectID #### ", str(self.issue.projectId)) self.window.show_input_panel("Sprint:", self.version, self.setSprint, None, None) else: self.projectId = self.util.getProjectId(self.projectKey) self.window.show_input_panel("Sprint:", "Sprint-", self.setSprint, None, None) def setSprint(self, uinput): if self.version != uinput: self.version = uinput self.versionId = self.util.findVersionId(self.projectId, uinput) self.window.show_input_panel("Umgebung:", "Develop", self.setEnvironment, None, None) def setEnvironment(self, uinput): self.environment = uinput self.pushCycle() def pushCycle(self): testCycle = { "clonedCycleId": "", "name": self.key, "build": self.version, "environment": self.environment, # "description": "Released Cycle1", # "startDate": "17/Oct/13", # "endDate": "17/Jan/14", "projectId": self.projectId, "versionId": self.versionId, } response, data = self.connection.createTestCycle("", testCycle) cycleId = data["id"] if self.cycletype == "story": testcaseLinks = self.issue.getAllTestLinks() else: testcaseLinks = self.util.getAllIssueKeysFromSearch( ["project", "issuetype", "labels"], [self.projectKey, "Test", self.key] ) issuesForCycle = { "issues": testcaseLinks, "versionId": self.versionId, "cycleId": cycleId, "projectId": self.projectId, "method": "1", } response = self.connection.addTestsToTestCycle(issuesForCycle) sublime.message_dialog("Finish")
class CreateStoryIssuesCommand(sublime_plugin.TextCommand): def run(self, edit, testValues): print("Beginn creating Story Issues") self.window = self.view.window() self.connection = LimeConnection() self.offset = 0 self.parser = MyMarkdownParser() for test in testValues: newIssue = { 'fields' : { "project" : { 'key' : test['project'] }, "summary" : test['name'], "description" : self.parser.build_markdown(test['description']), "issuetype" : { "name" : test['type'] }, "priority" : { "id": "3" }, "customfield_11800" : test['short_description'], "components" : [], "versions" : [{"name":test['version']}], "assignee" : {'name' : test['assignee']} } } if test['type'] == 'Story': newIssue['customfield_15502'] = test['short_description'] newIssue['labels'] = test['labels'] if test['type'] == 'Subtask': if self.prevIssueKey != '': newIssue['fields']['parent'] = {"key": self.prevIssueKey } else: newIssue['fields']['parent'] = {"key": test['parent'] } for components in test['components']: if components != '': newIssue['fields']['components'].append({'name':components}) if(test['key'] == ''): self.createStory(test, newIssue, edit) else: self.updateStory(test, newIssue, edit) if test['type'] == 'Story': self.prevIssueKey = test['key'] if test['epic'] != ['']: self.createEpicLinks(test) sublime.message_dialog("Finish") def createStory(self, test, newIssue, edit): response, data = self.connection.createTestIssue(newIssue) if response.status_code != 200 and response.status_code != 201 and response.status_code != 204: sublime.error_message("Response: "+str(response.status_code)) raise Exception("Status was", response.status_code) test['issue_id'] = data['id'] test['key'] = data['key'] if test['keyLineNr'] > 0: pt = self.view.text_point(test['keyLineNr']-1+self.offset, 0) key_text = " "+test['key'] else: pt = self.view.text_point(test['testLineNr']-1+self.offset, 0) key_text = "\n@@ Key: "+test['key'] self.offset = self.offset + 1 line_region = self.view.line(pt) pt += line_region.b - line_region.a self.view.insert(edit, pt, key_text) def updateStory(self, test, newIssue, edit): response = self.connection.update(test['key'], newIssue) if response.status_code != 200 and response.status_code != 201 and response.status_code != 204: sublime.error_message("Response: "+str(response.status_code)) raise Exception("Status was", response.status_code) def createEpicLinks(self, test): print("Creating Epic Links", len(test['epic'])) self.epicMap, self.epicArray = Util.getEpicMap() for epic in test['epic']: for oEpic in self.epicMap: if oEpic['name'] == epic: epicKey = oEpic['key'] break link = { 'ignoreEpics':'true', 'issueKeys':[ test['key'] ] } self.connection.addToEpic(epicKey, link)
class createTestIssuesCommand(sublime_plugin.TextCommand): def run(self, edit, testValues): print("Beginn creating Test Issues") self.window = self.view.window() self.connection = LimeConnection() self.offset = 0 self.parser = MyMarkdownParser() for test in testValues: newIssue = { 'fields' : { "project" : { 'key' : test['project'] }, "summary" : test['name'], "description" : self.parser.build_markdown(test['description']), "issuetype" : { "name" : "Test" }, "priority" : { "id": "3" }, "customfield_15603" : [test['story']], #Story "components" : [], "versions" : [{"name":test['version']}], "labels" : test['labels'], "assignee" : {'name' : test['assignee']} } } if len(test['attributes']) > 0: newIssue['fields']['customfield_15604'] = [] if len(test['testgroups']) > 0: newIssue['fields']['customfield_15601'] = [] for attribut in test['attributes']: if attribut != '': newIssue['fields']['customfield_15604'].append({'value' : attribut}) for testgroup in test['testgroups']: if testgroup != '': newIssue['fields']['customfield_15601'].append(testgroup) for components in test['components']: if components != '': newIssue['fields']['components'].append({"name":components}) if(test['key'] == ''): self.createTest(test, newIssue, edit) else: self.updateTest(test, newIssue, edit) sublime.message_dialog("Finish") def createTest(self, test, newIssue, edit): response, data = self.connection.createTestIssue(newIssue) if response.status_code != 200 and response.status_code != 201 and response.status_code != 204: sublime.error_message("Response: "+str(response.status_code)) raise Exception("Status was", response.status_code) test['issue_id'] = data['id'] test['key'] = data['key'] ### if test['keyLineNr'] > 0: pt = self.view.text_point(test['keyLineNr']-1+self.offset, 0) key_text = " "+test['key'] else: pt = self.view.text_point(test['testLineNr']-1+self.offset, 0) key_text = "\n@@ Key: "+test['key'] self.offset = self.offset + 1 line_region = self.view.line(pt) pt += line_region.b - line_region.a self.view.insert(edit, pt, key_text) ### for i in range(len(test['steps'])): if test['steps'][i] != '' or test['data'][i] != '' or test['result'][i] != '': teststep = { "step": test['steps'][i], "data": test['data'][i], "result": test['result'][i] } self.connection.createTestStep(test['issue_id'], teststep) #ID! 230076 # Link Test # Auf die Blanke URL!! # inward key muss der Tests sein. link = { "type": { "name": "Tests" # Tests, cloned by etc }, "inwardIssue": { "key": test['key'] # Ausgehend }, "outwardIssue": { "key": test['story'] # Wird getestet } } self.connection.createLink("", link) def updateTest(self, test, newIssue, edit): response = self.connection.update(test['key'], newIssue) if response.status_code != 200 and response.status_code != 201 and response.status_code != 204: sublime.error_message("Response: "+str(response.status_code)) raise Exception("Status was", response.status_code) issue = self.connection.get(test['key']) r, data = self.connection.getTestStep(issue.id) for i in range(len(test['steps'])): if test['steps'][i] != '' or test['data'][i] != '' or test['result'][i] != '': teststep = { "step": test['steps'][i], "data": test['data'][i], "result": test['result'][i] } try: print("issue", issue) testStepId = data[i]['id'] self.connection.updateTestStep(str(issue.id)+"/"+str(testStepId), teststep) #ID! 230076 except IndexError: self.connection.createTestStep(issue.id, teststep) #ID! 230076 overSize = len(data) - (len(test['steps'])-1) if overSize > 0: for i in data[len(data)-overSize:]: print('i', i) testStepId = i['id'] self.connection.deleteTestStep(issue.id, testStepId)
class CreateBugIssuesCommand(sublime_plugin.TextCommand): def run(self, edit, testValues): print("Beginn creating Bug Issues") self.window = self.view.window() self.connection = LimeConnection() self.offset = 0 self.parser = MyMarkdownParser() for test in testValues: newIssue = { 'fields' : { "project" : { 'key' : test['project'] }, "summary" : test['name'], "description" : self.parser.build_markdown(test['description']), "issuetype" : { "name" : "Bug" }, "priority" : { "id": "3" }, "components" : [], "fixVersions" : [{"name":test['version']}], # "labels" : test['labels'], "assignee" : {'name' : test['assignee']}, # "customfield_11018" : {"value" : test['domain']}, "customfield_11013" : {"value": test['environment']}, "customfield_16038" : test['browser'], "customfield_16039" : test['device'], "customfield_16040" : test['operatingsystem'] } } for components in test['components']: if components != '': newIssue['fields']['components'].append({"name":components}) if(test['key'] == ''): self.createBug(test, newIssue, edit) else: self.updateBug(test, newIssue, edit) sublime.message_dialog("Finish") def createBug(self, test, newIssue, edit): response, data = self.connection.createTestIssue(newIssue) if response.status_code != 200 and response.status_code != 201 and response.status_code != 204: sublime.error_message("Response: "+str(response.status_code)) raise Exception("Status was", response.status_code) test['issue_id'] = data['id'] test['key'] = data['key'] ### if test['keyLineNr'] > 0: pt = self.view.text_point(test['keyLineNr']-1+self.offset, 0) key_text = " "+test['key'] else: pt = self.view.text_point(test['testLineNr']-1+self.offset, 0) key_text = "\n@@ Key: "+test['key'] self.offset = self.offset + 1 line_region = self.view.line(pt) pt += line_region.b - line_region.a self.view.insert(edit, pt, key_text) ### self.createLinks(test) def updateBug(self, test, newIssue, edit): response = self.connection.update(test['key'], newIssue) if response.status_code != 200 and response.status_code != 201 and response.status_code != 204: sublime.error_message("Response: "+str(response.status_code)) raise Exception("Status was", response.status_code) self.createLinks(test) def createLinks(self, test): print("Creating Links", len(test['links'])) for link in test['links']: # Link Test # Auf die Blanke URL!! # inward key muss der Tests sein. link = { "type": { "name": link[0] # Tests, cloned by etc Blocks, Relates }, "inwardIssue": { "key": test['key'] # Ausgehend }, "outwardIssue": { "key": link[1] # Wird getestet } } self.connection.createLink("", link)