You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.0 KiB

# Copyright (C) 2005-2024 Splunk Inc. All Rights Reserved.
import json
from integrations.commons.rest import RestMethods
from integrations.commons.logutil import get_logger
logger = get_logger(name=__name__)
class Resource(object):
verify_ssl_cert = True
@classmethod
def create(cls, server, data):
raise NotImplementedError('Derived class did not implement `create`.')
@classmethod
def read(cls, server, data):
raise NotImplementedError('Derived class did not implement `read`.')
@classmethod
def update(cls, server, data):
raise NotImplementedError('Derived class did not implement `update`.')
@classmethod
def delete(cls, server, data):
raise NotImplementedError('Derived class did not implement `delete`.')
@classmethod
def get_url(cls, server, resource_name):
return server.get_rest_endpoint() + resource_name
class Result(object):
def __init__(self, item, errors):
self.item = item
self.errors = errors
# anything other than desired status code of say 200 or 201, can use this
class PhantomAPIError(Exception):
pass
class Container(Resource):
resource_name = 'container'
@classmethod
def create(cls, server, data):
data_json = json.dumps(data)
url = cls.get_url(server, cls.resource_name)
status_code, response = RestMethods.post(url, data_json=data_json, headers=server.get_rest_headers(), verify=cls.verify_ssl_cert)
if status_code == 200:
return Result(response, None)
else:
return Result(None, response)
class Artifact(Resource):
resource_name = 'artifact'
@classmethod
def create(cls, server, data):
data_json = json.dumps(data)
url = cls.get_url(server, cls.resource_name)
status_code, response = RestMethods.post(url + '', data_json=data_json, headers=server.get_rest_headers(), verify=cls.verify_ssl_cert)
if status_code == 200:
return Result(response, None)
else:
return Result(None, response)