diff --git a/.gitignore b/.gitignore index 72364f9..a76c9cc 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,6 @@ dist/ downloads/ eggs/ .eggs/ -lib/ lib64/ parts/ sdist/ diff --git a/CHANGES.md b/CHANGES.md old mode 100644 new mode 100755 index 2344265..2adc337 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,10 @@ # Change Log +======= +## 1.5.0 +- Add support of PySNow Resource API via `use_new_service_now_api` flag. +- Add support for returning specific fields on "get". + ## 1.0.0 * Drop Python 2.7 support diff --git a/actions/delete.py b/actions/delete.py index f285df5..7bc796b 100644 --- a/actions/delete.py +++ b/actions/delete.py @@ -3,6 +3,13 @@ class DeleteAction(BaseAction): def run(self, table, sysid): + # If using new ServiceNew API... + if self.config['use_new_service_now_api']: + client = self.client + resource = client.resource(api_path="/table/{0}".format(table)) + response = resource.delete(query={"sys_id": sysid}) # pylint: disable=no-member + return response + s = self.client r = s.query(table=table, query={'sys_id': sysid}) # pylint: disable=no-member response = r.delete() # pylint: disable=no-member diff --git a/actions/get.py b/actions/get.py index 8dba052..b39b963 100644 --- a/actions/get.py +++ b/actions/get.py @@ -2,7 +2,20 @@ class GetAction(BaseAction): - def run(self, table, query): + def run(self, table, query, fields=[]): + # If using new ServiceNew API... + if self.config['use_new_service_now_api']: + client = self.client + resource = client.resource(api_path="/table/{0}".format(table)) + if not fields: + response = resource.get(query=query) + else: + response = resource.get(query=query, fields=fields) + output = [] + for each_item in response.all(): + output.append(each_item) + return output + s = self.client r = s.query(table=table, query=query) # pylint: disable=no-member response = r.get_all() # pylint: disable=no-member diff --git a/actions/get.yaml b/actions/get.yaml index 3877d9e..4b01f74 100644 --- a/actions/get.yaml +++ b/actions/get.yaml @@ -13,3 +13,7 @@ parameters: type: "object" description: "Structured query for SN data" required: true + fields: + type: "array" + description: "Comma-separated list of fields to return. ***Only supported when config parameter use_new_service_now_api is true***" + required: false \ No newline at end of file diff --git a/actions/insert.py b/actions/insert.py index 49b8fde..86331a8 100644 --- a/actions/insert.py +++ b/actions/insert.py @@ -3,6 +3,13 @@ class InsertAction(BaseAction): def run(self, table, payload): + # If using new ServiceNew API... + if self.config['use_new_service_now_api']: + client = self.client + resource = client.resource(api_path="/table/{0}".format(table)) + response = resource.create(payload=payload) # pylint: disable=no-member + return response + s = self.client response = s.insert(table=table, payload=payload) # pylint: disable=no-member return response diff --git a/actions/update.py b/actions/update.py index 8033dae..d6b0309 100644 --- a/actions/update.py +++ b/actions/update.py @@ -3,6 +3,13 @@ class UpdateAction(BaseAction): def run(self, table, payload, sysid): + # If using new ServiceNew API... + if self.config['use_new_service_now_api']: + client = self.client + resource = client.resource(api_path="/table/{0}".format(table)) + response = resource.update(query={"sys_id": sysid}, payload=payload) # pylint: disable=no-member + return response + s = self.client r = s.query(table=table, query={'sys_id': sysid}) # pylint: disable=no-member response = r.update(payload) # pylint: disable=no-member diff --git a/config.schema.yaml b/config.schema.yaml index 7feef28..177b3bc 100644 --- a/config.schema.yaml +++ b/config.schema.yaml @@ -17,3 +17,9 @@ description: "ServiceNow options that will be passed to all requests" type: object required: false + use_new_service_now_api: + description: "Use the new ServiceNow APIs to avoid deprecation warnings." + type: "boolean" + secret: false + required: false + default: true diff --git a/pack.yaml b/pack.yaml old mode 100644 new mode 100755 index 5beadab..696f9b8 --- a/pack.yaml +++ b/pack.yaml @@ -5,7 +5,7 @@ description: ServiceNow Integration Pack keywords: - servicenow - incident management -version: 1.0.0 +version: 1.5.0 python_versions: - "3" author: James Fryman