def __call__(self, id): """ Return an instance of Case with the given case ID. :param id: ID of a case to retrieve. """ response = self._thehive.get_case(id) # Check for failed authentication if response.status_code == requests.codes.unauthorized: raise TheHiveException("Authentication failed") if response.status_code == requests.codes.not_found: raise CaseException("Case {} not found".format(id)) if self.status_ok(response.status_code): data = response.json() case = Case(json=data) # Add attributes that are not added by the constructor case.id = data.get('id', None) case.owner = data.get('owner', None) case.caseId = data.get('caseId', None) case.status = data.get('status', None) case.createdAt = data.get('createdAt', None) case.createdBy = data.get('createdBy', None) case.updatedAt = data.get('updatedAt', None) case.updatedBy = data.get('updatedBy', None) return case
def update(self, case_id, **attributes): """ Update a case. :param case_id: The ID of the case to update :param attributes: key=value pairs of case attributes to update (field=new_value) :return: The created instance. """ response = self._thehive.do_patch("/api/case/{}".format(case_id), **attributes) if response.status_code == requests.codes.unauthorized: raise TheHiveException("Authentication failed") if self.status_ok(response.status_code): return self(response.json()['id']) else: raise CaseException("Server returned {}: {}".format(response.status_code, response.text))
def create(self, title, description, **kwargs): """ Create an instance of the Case class. :param title: Case title. :param description: Case description. :param kwargs: Additional arguments. :return: The created instance. """ case = Case(title=title, description=description, **kwargs) response = self._thehive.create_case(case) # Check for failed authentication if response.status_code == requests.codes.unauthorized: raise TheHiveException("Authentication failed") if self.status_ok(response.status_code): return self(response.json()['id']) else: raise CaseException("Server returned {}: {}".format(response.status_code, response.text))