From 9d44a47a2fa3709d268c381fd131497c265aa6bf Mon Sep 17 00:00:00 2001 From: Robert Habermann <mail@rhab.de> Date: Sat, 4 Mar 2017 19:46:00 +0100 Subject: [PATCH] update FAQ implementation --- pyotrs/lib.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 7 deletions(-) diff --git a/pyotrs/lib.py b/pyotrs/lib.py index 7206c25..8094c0f 100644 --- a/pyotrs/lib.py +++ b/pyotrs/lib.py @@ -1424,7 +1424,7 @@ class Client(object): if not self.session_id_store.value: raise SessionNotCreated("Call session_create() or " "session_restore_or_set_up_new() first") - self.operation = "PublicCategoryList " + self.operation = "PublicCategoryList" payload = { "SessionID": self.session_id_store.value @@ -1435,7 +1435,14 @@ class Client(object): return self.result def faq_public_faq_get(self, item_ids=None, attachment_contents=True): - """faq_public_category_list""" + """faq_public_category_list + + Args: + item_ids (list): list of item IDs + attachment_contents (bool): whether to retrieve content of FAQ attachments + + """ + if not self.session_id_store.value: raise SessionNotCreated("Call session_create() or " "session_restore_or_set_up_new() first") @@ -1457,20 +1464,65 @@ class Client(object): if not attachment_contents: payload.update({"GetAttachmentContents": 0}) - return self._parse_and_validate_response(self._send_request(payload)) + if self._parse_and_validate_response(self._send_request(payload)): + return self.result + + def faq_public_faq_search(self, what=None, number=None, title=None, search_dict=None): + """faq_public_category_list + + Args: + what (str): + number (str): + title (str): + search_dict (dict): + + Returns: + **list**: of found FAQ item IDs + + # Original documentation: + # perform PublicFAQSearch Operation. This will return a list of public FAQ entries. + # Number = > '*134*', # (optional) + # Title = > '*some title*', # (optional) + # + # # is searching in Number, Title, Keyword and Field1-6 + # What = > '*some text*', # (optional) + # + # Keyword = > '*webserver*', # (optional) + # LanguageIDs = > [4, 5, 6], # (optional) + # CategoryIDs = > [7, 8, 9], # (optional) + + """ - def faq_public_faq_search(self): - """faq_public_category_list""" if not self.session_id_store.value: raise SessionNotCreated("Call session_create() or " "session_restore_or_set_up_new() first") self.operation = "PublicFAQSearch" payload = { - "SessionID": self.session_id_store.value + "SessionID": self.session_id_store.value, } - return self._parse_and_validate_response(self._send_request(payload)) + if what: + payload.update({"What": what}) + + if number: + payload.update({"Number": number}) + + if title: + payload.update({"Title": title}) + + if search_dict: + if not isinstance(search_dict, dict): + raise ArgumentInvalidError("Expecting dict for search_dict!") + payload.update(search_dict) + + if self._parse_and_validate_response(self._send_request(payload)): + if not self.result: + return [] + elif len(self.result) == 1: + return [self.result] + else: + return self.result """ GenericInterface::Operation::Link::LinkAdd @@ -1882,6 +1934,17 @@ class Client(object): self.result = _link_list return True + # PublicFAQSearch result can be empty + if self.operation in "PublicFAQSearch": + _public_faq_search_result_list = self.result_json.get(self._result_type, None) + if not _public_faq_search_result_list: + if self.result_json["Error"]["ErrorCode"] == "PublicFAQSearch.NotFAQData": + self.result = [] + return True + else: + self.result = _public_faq_search_result_list + return True + # now handle other operations if self.result_json.get(self._result_type, None): self._result_error = False -- GitLab