|
6 | 6 |
|
7 | 7 |
|
8 | 8 | class ReportPortalService(object):
|
| 9 | + """Service class with report portal event callbacks.""" |
| 10 | + |
9 | 11 | def __init__(self, endpoint, project, token, api_base=None):
|
| 12 | + """Init the service class. |
| 13 | +
|
| 14 | + Args: |
| 15 | + endpoint: endpoint of report portal service. |
| 16 | + project: project name to use for launch names. |
| 17 | + token: authorization token. |
| 18 | + api_base: defaults to api/v1, can be customized to use another version. |
| 19 | + """ |
10 | 20 | super(ReportPortalService, self).__init__()
|
11 | 21 | self.endpoint = endpoint
|
12 | 22 | if api_base is None:
|
13 | 23 | self.api_base = "api/v1"
|
14 | 24 | self.project = project
|
15 | 25 | self.token = token
|
16 |
| - self.base_url = os.path.join(self.endpoint, |
17 |
| - self.api_base, |
18 |
| - self.project) |
| 26 | + self.base_url = self.uri_join(self.endpoint, |
| 27 | + self.api_base, |
| 28 | + self.project) |
19 | 29 | self.headers = {"Content-Type": "application/json",
|
20 | 30 | "Authorization": "{0} {1}".format("bearer",
|
21 | 31 | self.token)}
|
22 | 32 | self.session = requests.Session()
|
23 | 33 |
|
| 34 | + @staticmethod |
| 35 | + def uri_join(*uri_parts): |
| 36 | + """Join uri parts. |
| 37 | +
|
| 38 | + Avoiding usage of urlparse.urljoin and os.path.join as it does not clearly join parts. |
| 39 | +
|
| 40 | + Args: |
| 41 | + *uri_parts: tuple of values for join, can contain back and forward slashes (will be stripped up). |
| 42 | +
|
| 43 | + Returns: |
| 44 | + An uri string. |
| 45 | + """ |
| 46 | + stripped = [str(i).strip('/').strip('\\') for i in uri_parts] |
| 47 | + return '/'.join(stripped) |
| 48 | + |
24 | 49 | def start_launch(self, start_launch_rq):
|
25 |
| - url = os.path.join(self.base_url, "launch") |
| 50 | + url = self.uri_join(self.base_url, "launch") |
26 | 51 | r = self.session.post(url=url, headers=self.headers,
|
27 |
| - data=start_launch_rq.data) |
| 52 | + data=start_launch_rq.data) |
28 | 53 | return EntryCreatedRS(raw=r.text)
|
29 | 54 |
|
30 | 55 | def finish_launch(self, launch_id, finish_execution_rq):
|
31 |
| - url = os.path.join(self.base_url, "launch", launch_id, "finish") |
| 56 | + url = self.uri_join(self.base_url, "launch", launch_id, "finish") |
32 | 57 | r = self.session.put(url=url, headers=self.headers,
|
33 |
| - data=finish_execution_rq.data) |
| 58 | + data=finish_execution_rq.data) |
34 | 59 | return OperationCompletionRS(raw=r.text)
|
35 | 60 |
|
36 | 61 | def start_test_item(self, parent_item_id, start_test_item_rq):
|
37 | 62 | if parent_item_id is not None:
|
38 |
| - url = os.path.join(self.base_url, "item", parent_item_id) |
| 63 | + url = self.uri_join(self.base_url, "item", parent_item_id) |
39 | 64 | else:
|
40 |
| - url = os.path.join(self.base_url, "item") |
| 65 | + url = self.uri_join(self.base_url, "item") |
41 | 66 | r = self.session.post(url=url, headers=self.headers,
|
42 |
| - data=start_test_item_rq.data) |
| 67 | + data=start_test_item_rq.data) |
43 | 68 | return EntryCreatedRS(raw=r.text)
|
44 | 69 |
|
45 | 70 | def finish_test_item(self, item_id, finish_test_item_rq):
|
46 |
| - url = os.path.join(self.base_url, "item", item_id) |
| 71 | + url = self.uri_join(self.base_url, "item", item_id) |
47 | 72 | r = self.session.put(url=url, headers=self.headers,
|
48 |
| - data=finish_test_item_rq.data) |
| 73 | + data=finish_test_item_rq.data) |
49 | 74 | return OperationCompletionRS(raw=r.text)
|
50 | 75 |
|
51 | 76 | def log(self, save_log_rq):
|
52 |
| - url = os.path.join(self.base_url, "log") |
| 77 | + url = self.uri_join(self.base_url, "log") |
53 | 78 | r = self.session.post(url=url, headers=self.headers,
|
54 |
| - data=save_log_rq.data) |
| 79 | + data=save_log_rq.data) |
55 | 80 | return EntryCreatedRS(raw=r.text)
|
0 commit comments