def _add_project(self, project_configuration, skip_project_validation, perfrom_update_call): """Adds a project to Teamscale. The parameter `skip_project_validation` specifies, whether to skip the validation of the project. The parameter `perfrom_update_call` specifies, whether an update call should be made: - If `perfrom_update_call` is set to `True`, re-adding a project with an existing id will update the original project. - If `perfrom_update_call` is set to `False`, re-adding a project with an existing id will result in an error. - Further, if `perfrom_update_call` is set to `True`, but no project with the specified id exists, an error is thrown as well. Args: project_configuration (data.ProjectConfiguration): The project that is to be created (or updated). skip_project_validation (bool): Whether to skip validation of the project. perfrom_update_call (bool): Whether to perform an update call. Returns: requests.Response: object generated by the upload request. Raises: ServiceError: If anything goes wrong. """ service_url = self.get_global_service_url("create-project") parameters = { "skip-project-validation": skip_project_validation, "only-config-update": perfrom_update_call } response = self.put(service_url, parameters=parameters, data=to_json(project_configuration)) response_message = TeamscaleClient._get_response_message(response) if response_message != 'success': raise ServiceError( "ERROR: GET {url}: {status_code}:{message}".format(url=service_url, status_code=response.status_code, message=response_message)) return response
def _upload_external_data(self, service_name, json_data, timestamp, message, partition): """Uploads externals data in json format Args: service_name (str): The service name to which to upload the data json_data: data in json format timestamp (datetime.datetime): timestamp (unix format) for which to upload the data message (str): The message to use for the generated upload commit partition (str): The partition's id into which the data should be added (See also: :ref:`FAQ - Partitions<faq-partition>`). Returns: requests.Response: object generated by the request Raises: ServiceError: If anything goes wrong """ service_url = self.get_project_service_url(service_name) parameters = { "t": self._get_timestamp_ms(timestamp), "message": message, "partition": partition, "skip-session": "true", "adjusttimestamp": "true" } return self.put(service_url, parameters=parameters, data=to_json(json_data))
def upload_files_for_precommit_analysis(self, timestamp, precommit_data): """Uploads the provided files for precommit analysis. Args: timestamp (datetime.datetime): The timestamp of the parent commit. precommit_data (data.PreCommitUploadData): The precommit data to upload. """ service_url = self.get_project_service_url("pre-commit") + self._get_timestamp_parameter(timestamp) response = self.put(service_url, data=to_json(precommit_data)) if not response.ok: raise ServiceError("ERROR: GET {url}: {r.status_code}:{r.text}".format(url=service_url, r=response))
def add_metric_descriptions(self, metric_descriptions): """Uploads metric definitions to Teamscale. Args: metric_descriptions (list[:class:`MetricDescription`]): List of metric descriptions to add to Teamscale. Returns: requests.Response: object generated by the request Raises: ServiceError: If anything goes wrong """ service_url = self.get_global_service_url("add-external-metric-description") return self.put(service_url, data=to_json(metric_descriptions))
def add_baseline(self, baseline): """Adds a baseline to the currently active project. Re-adding an existing baseline will update the original baseline. Args: baseline (data.Baseline): The baseline that is to be added (or updated) Returns: requests.Response: object generated by the upload request Raises: ServiceError: If anything goes wrong """ service_url = self.get_project_service_url("baselines") service_url += baseline.name return self.put(service_url, parameters={}, data=to_json(baseline))
def add_task_comment(self, task_id, comment): """Adds a comment to a task. Args: task_id (number): the task id to which to add the comment comment (str): the comment to add Returns: requests.Response: object generated by the request Raises: ServiceError: If anything goes wrong """ service_url = self.get_project_service_url("comment-task") + str(task_id) response = self.put(service_url, data=to_json(comment)) if not response.ok: raise ServiceError("ERROR: PUT {url}: {r.status_code}:{r.text}".format(url=service_url, r=response)) return response
def test_upload_metric_description(): description = MetricDescription("metric_i,", "Metric Name", "Great Description", "awesome group") responses.add(responses.PUT, get_global_service_mock('add-external-metric-description'), body='success', status=200) resp = get_client().add_metric_descriptions([description]) assert '{"analysisGroup": "awesome group", "metricDefinition": {"aggregation": "SUM", "description": "Great Description", "name": "Metric Name", "properties": ["SIZE_METRIC"], "valueType": "NUMERIC"}, "metricId": "metric_i,"}' == to_json(description) assert resp.text == "success"
def test_finding_json_serialization(): findings = _get_test_findings() assert '[{"content": null, "findings": [{"assessment": "YELLOW", "endLine": null, "endOffset": null, "findingTypeId": "test-id", "identifier": null, "message": "message", "startLine": null, "startOffset": null}], "path": "path/to/file"}]' == to_json(findings)
def test_upload_metric_description(): description = MetricDescription("metric_i,", "Metric Name", "Great Description", "awesome group") responses.add(responses.PUT, get_global_service_mock('add-external-metric-description'), body='success', status=200) resp = get_client().add_metric_descriptions([description]) assert '{"analysisGroup": "awesome group", "metricDefinition": {"aggregation": "SUM", "description": "Great Description", "name": "Metric Name", "properties": ["SIZE_METRIC"], "valueType": "NUMERIC"}, "metricId": "metric_i,"}' == to_json( description) assert resp.text == "success"
def test_finding_json_serialization(): findings = _get_test_findings() assert '[{"content": null, "findings": [{"assessment": "YELLOW", "endLine": null, "endOffset": null, "findingTypeId": "test-id", "identifier": null, "message": "message", "startLine": null, "startOffset": null}], "path": "path/to/file"}]' == to_json( findings)
def test_finding_json_serialization(): """Tests that findings json is correctly serialized""" findings = _get_test_findings() assert '[{"content": null, "findings": [{"assessment": "YELLOW", "endLine": null, "endOffset": null, "findingProperties": null, "findingTypeId": "test-id", "finding_id": null, "identifier": null, "message": "message", "startLine": null, "startOffset": null, "uniformPath": null}], "path": "path/to/file"}]' == to_json( findings)