Script for updating test results

Change-Id: I986be872ca22444532e66075b100076d7ec5989d
Related-prod: PROD-32075
diff --git a/parcing_testrail_results/testrail.py b/parcing_testrail_results/testrail.py
new file mode 100644
index 0000000..7ed5900
--- /dev/null
+++ b/parcing_testrail_results/testrail.py
@@ -0,0 +1,97 @@
+#
+# TestRail API binding for Python 3.x (API v2, available since
+# TestRail 3.0)
+#
+# Learn more:
+#
+# http://docs.gurock.com/testrail-api2/start
+# http://docs.gurock.com/testrail-api2/accessing
+#
+# Copyright Gurock Software GmbH. See license.md for details.
+#
+
+import urllib.request, urllib.error
+import json, base64
+import time
+
+class APIClient:
+	def __init__(self, base_url):
+		self.user = ''
+		self.password = ''
+		if not base_url.endswith('/'):
+			base_url += '/'
+		self.__url = base_url + 'index.php?/api/v2/'
+
+	#
+	# Send Get
+	#
+	# Issues a GET request (read) against the API and returns the result
+	# (as Python dict).
+	#
+	# Arguments:
+	#
+	# uri                 The API method to call including parameters
+	#                     (e.g. get_case/1)
+	#
+	def send_get(self, uri):
+		try:
+			return self.__send_request('GET', uri, None)
+		except APIError:
+			print("Got an API Exception. Waiting  30 sec.")
+			time.sleep(30)
+			return self.__send_request('GET', uri, None)
+
+	#
+	# Send POST
+	#
+	# Issues a POST request (write) against the API and returns the result
+	# (as Python dict).
+	#
+	# Arguments:
+	#
+	# uri                 The API method to call including parameters
+	#                     (e.g. add_case/1)
+	# data                The data to submit as part of the request (as
+	#                     Python dict, strings must be UTF-8 encoded)
+	#
+	def send_post(self, uri, data):
+		return self.__send_request('POST', uri, data)
+
+	def __send_request(self, method, uri, data):
+		url = self.__url + uri
+		request = urllib.request.Request(url)
+		if (method == 'POST'):
+			request.data = bytes(json.dumps(data), 'utf-8')
+		auth = str(
+			base64.b64encode(
+				bytes('%s:%s' % (self.user, self.password), 'utf-8')
+			),
+			'ascii'
+		).strip()
+		request.add_header('Authorization', 'Basic %s' % auth)
+		request.add_header('Content-Type', 'application/json')
+
+		e = None
+		try:
+			response = urllib.request.urlopen(request).read()
+		except urllib.error.HTTPError as ex:
+			response = ex.read()
+			e = ex
+
+		if response:
+			result = json.loads(response.decode())
+		else:
+			result = {}
+
+		if e != None:
+			if result and 'error' in result:
+				error = '"' + result['error'] + '"'
+			else:
+				error = 'No additional error message received'
+			raise APIError('TestRail API returned HTTP %s (%s)' %
+				(e.code, error))
+
+		return result
+
+class APIError(Exception):
+	pass
\ No newline at end of file