Ejemplo n.º 1
0
	def __init__(self, prj_name, jira, dirname):
		logger_parse.info(" Initializing Parse ")
		self.prj = prj_name
		self.jira = jira
		self.dir= dirname
		self.file = File()
		self.conn = ConnectionPoolManager()
Ejemplo n.º 2
0
class Parse(object):

	#Constructor to set initial values
	def __init__(self, prj_name, jira, dirname):
		logger_parse.info(" Initializing Parse ")
		self.prj = prj_name
		self.jira = jira
		self.dir= dirname
		self.file = File()
		self.conn = ConnectionPoolManager()

	#Method that starts the parsing
	@simple_decorator
	def parse(self):
		logger_parse.info("Parsing started....")
		self.file.create_dir_if_not_exist(self.dir)
		status_data = self.file.read_status_json_if_exists(self.dir)
		issues_parsed = 0
		if not status_data is None:
			issues_parsed = status_data['total_no_of_issues_parsed']
			logger_parse.info("Issues parsed so far are :- %s", issues_parsed)
		proj = self.jira.project(self.prj)
		issues_info = self.jira.search_issues(self.get_query_string(), maxResults=0, fields=['total'], json_result=True)
		logger_parse.info("Total no of issues are %s", str(issues_info['total']))
		total_no_of_issues = issues_info['total']
		self.retrieve(total_no_of_issues, issues_parsed)

	#Forms the query string for the parser.
	def get_query_string(self):
		query_string = 'project='+self.prj
		return query_string

	@simple_decorator
	def retrieve(self, total_no_of_issues, already_parsed):
		start = 0
		count = 0
		if already_parsed > 0:
			logger_parse.info("Retrieving issues starting from %s", already_parsed)
			logger_parse.info("Total no of issues to be parsed are %s", total_no_of_issues)
			start = int(already_parsed)
			count = int(already_parsed)

		try:
			while count < total_no_of_issues:
				issues = self.search(total_no_of_issues, start)
				logger_parse.info("Iterating over results now. Starting from %s", start)
				if issues is not None:
					for key in issues:
						json_data = self.get_issue_detail(key)
						self.file.write_data_file(json_data, key)
						count += 1
						start = count
					self.file.write_status_file(self.prj, count, total_no_of_issues, "")
				else:
					logger_parse.info("No more issues to be parsed")
		except SSLError as err:
			logger_parse.error("Encountered Exception while processing the issues. Writing error to the status file.")
			self.file.write_status_file(self.prj, count, total_no_of_issues, err)

		logger_parse.info("Parsing complete")

	def get_rest_api_url(self, key):
		if not Connect.url:
			raise ValueError(" URL value is required ")
		return Connect.url + "/rest/api/latest/issue/" + str(key)


	def search(self, subset, start):
		key_field = 'key'
		issues = self.jira.search_issues(self.get_query_string(), maxResults=subset, startAt=start, fields=key_field)
		return issues

	#Gets issue details from
	def get_issue_detail(self, key):
		data = self.conn.get_issue_detail(key)
		#request = self.conn.get_http_request()
		#request_data = request('GET', self.get_rest_api_url(key))
		json_data = json.loads(data)
		formatted_data =  json.dumps(json_data, indent=4, sort_keys=True)
		return formatted_data