# Source code for api.cases.v1.case

    """Autogenerated API"""
    import requests
    from argus_cli.plugin import register_command

    @register_command(extending=('cases','v1','case'))
    def list_cases(serviceTypeID: list = None, customerID: list = None, status: list = None, offset: int = None, limit: int = 25,json: bool = True, verify: bool = True, apiKey: str = "", authentication: dict = {}) -> dict:
        """List customer logs (TEST)

        :param list serviceTypeID: ID of service types to limit to
        :param list customerID: ID of customers to limit to
        :param list status: Status to limit to
        :param int offset: Offset result
        :param int limit: Limit result
        :raises AuthenticationFailedException: on 401
        :raises ValidationErrorException: on 412
        :raises AccessDeniedException: on 403
        :raises ObjectNotFoundException: on 404
        :returns: {"offset": 240, "limit": 306, "responseCode": 200, "count": 788, "data": [{"description": "Increase police trade little doctor.", "tags": [{"value": "Special resource energy site down effort."}], "properties": {"additionalProperties": "Lay similar would."}, "flags": 617, "userACL": [357], "createdByUser": {"id": 289, "customerID": 813, "userName": "gcollins", "name": "Tammy Mitchell"}, "status": "PENDING_CUSTOMER", "logType": "SECURITY_INCIDENT", "customerReference": "Can control establish feeling set.", "priority": 178, "contacts": [{"id": 4, "languageID": 116, "name": "Julia Martinez", "value": "Hot month military serious large.", "flags": 809, "subjectID": 605, "verbose": true, "language": "NORWEGIAN", "default": true}], "id": 493, "createdTimestamp": 1514990411, "lastUpdatedTimestamp": 130959408, "publishedTimestamp": 927767123}], "metaData": {"additionalProperties": {}}, "messages": [{"message": "Detail turn bar executive short.", "messageTemplate": "Accept stand base type.", "field": "Against say half about improve.", "parameter": {}, "timestamp": 631938288}], "currentPage": 453, "size": 291}
        """
        from requests import get
        from argus_api.exceptions import http

        url = "https://osl-argus-trunk-web1.mnemonic.no/web/api/cases/v1/case".format()
        headers = {
            'Content-Type': 'application/json',
            'User-Agent': 'ArgusToolbelt/1.0'
        }

        if apiKey:
            headers["Argus-API-Key"] = apiKey
        elif authentication and isinstance(authentication, dict):
            headers.update(authentication)
        elif callable(authentication):
            headers.update(authentication(url))

        body = {}

        if limit:
            body.update({"limit": limit})

        if serviceTypeID:
            body.update({"serviceTypeID": serviceTypeID})

        if customerID:
            body.update({"customerID": customerID})

        if status:
            body.update({"status": status})

        if offset:
            body.update({"offset": offset})

        response = get(url, json=body if body else None, verify=verify, headers=headers)

        errors = []
        if response.status_code == 401:
            raise http.AuthenticationFailedException(response)
        elif response.status_code == 403:
            raise http.AccessDeniedException(response)
        elif response.status_code == 412:
            raise http.ValidationErrorException(response)
        elif response.status_code == 404:
            raise http.ObjectNotFoundException(response)

        return response.json() if json else response

    @register_command(extending=('cases','v1','case'))
    def search_cases(limit: int = None, offset: int = None, includeFlags: int = None, excludeFlags: int = None, customerID: list = None, user: list = None, owner: list = None, customerDataID: list = None, searchString: str = None, serviceType: list = None, subCriteria: list = None, logType: list = None, logCategory: list = None, status: list = None, minPriority: int = None, maxPriority: int = None, priority: list = None, textSearchFeatures: list = None, customerOwnerID: list = None, techOwnerID: list = None, assetID: list = None, sortBy: list = None, startTimestamp: int = None, endTimestamp: int = None, tags: list = None, includeDeleted: bool = 'False', exclude: bool = 'False', includeCreatedTimestamp: bool = 'False', includeLastUpdatedTimestamp: bool = 'False', ownerAssigned: bool = 'False', techAssigned: bool = 'False',json: bool = True, verify: bool = True, apiKey: str = "", authentication: dict = {}) -> dict:
        """Search for customer logs by criteria (TEST)

        :param int limit: Limit results
        :param int offset: Offset results
        :param int includeFlags: Search objects with these flags set
        :param int excludeFlags: Exclude objects with these flags set
        :param list customerID: Limit result to objects belonging to these customers
        :param list user: Set of user IDs, limit search to data created/updated by users with this ID
        :param list owner: Set of user IDs, limit search to cases owned by (solution engineer or customer owner) users with this ID
        :param list customerDataID: Set of specific data objects
        :param str searchString: Words to search for
        :param list serviceType: Limit result to objects with these service types
        :param list subCriteria:
        :param list logType: Log types
        :param list logCategory: ID of log categories
        :param list status: Case status
        :param int minPriority: Minimum log priority
        :param int maxPriority: Maximum log priority
        :param list priority: Set of specific priorities
        :param list textSearchFeatures: Text search features
        :param list customerOwnerID: Set of user IDs, limit search to cases owned by (customer owner) users with this ID
        :param list techOwnerID: Set of user IDs, limit search to cases owned by (solution engineer) users with this ID
        :param list assetID: Set of asset IDs, limit search to cases associated with specified assets (hosts, services or processes)
        :param list sortBy: Order results by these properties (prefix with - to sort descending)
        :param int startTimestamp: Search objects from this timestamp
        :param int endTimestamp: Search objects until this timestamp
        :param list tags: Set of tags to search for (specify as key/value)
        :param bool includeDeleted: Also include deleted objects (where implemented)
        :param bool exclude: Exclude these criteria from parent criteria
        :param bool includeCreatedTimestamp: Include created timestamp when searching time period
        :param bool includeLastUpdatedTimestamp: Include last updated timestamp when searching time period
        :param bool ownerAssigned: If set to true, limit to cases where customer owner is assigned, false to limit to cases with no owner assigned. Default is no limitation.
        :param bool techAssigned: If set to true, limit to cases where solution engineer is assigned, false to limit to cases with no solution engineer assigned. Default is no limitation.
        :raises AuthenticationFailedException: on 401
        :raises ValidationErrorException: on 412
        :raises AccessDeniedException: on 403
        :raises ObjectNotFoundException: on 404
        :returns: {"offset": 307, "limit": 909, "responseCode": 200, "count": 140, "data": [{"description": "Ever play himself result education rest.", "tags": [{"value": "Two draw somebody continue various travel speech training."}], "properties": {"additionalProperties": "Maintain case fish politics instead professor door society."}, "flags": 948, "userACL": [407], "createdByUser": {"id": 289, "customerID": 792, "userName": "lori69", "name": "John Ramsey"}, "status": "CLOSED", "logType": "SECURITY_INCIDENT", "customerReference": "Likely thousand reduce also me ever cold.", "priority": 322, "contacts": [{"id": 912, "languageID": 409, "name": "Tracy Baldwin", "value": "Teacher more choose like.", "flags": 942, "subjectID": 443, "verbose": false, "language": "ENGLISH", "default": false}], "id": 709, "createdTimestamp": 1361771582, "lastUpdatedTimestamp": 378896353, "publishedTimestamp": 1303652237}], "metaData": {"additionalProperties": {}}, "messages": [{"message": "Front blue interesting his environment owner.", "messageTemplate": "Per night animal star student catch set.", "field": "Well total red recent.", "parameter": {}, "timestamp": 520168433}], "currentPage": 47, "size": 476}
        """
        from requests import post
        from argus_api.exceptions import http

        url = "https://osl-argus-trunk-web1.mnemonic.no/web/api/cases/v1/case/search".format()
        headers = {
            'Content-Type': 'application/json',
            'User-Agent': 'ArgusToolbelt/1.0'
        }

        if apiKey:
            headers["Argus-API-Key"] = apiKey
        elif authentication and isinstance(authentication, dict):
            headers.update(authentication)
        elif callable(authentication):
            headers.update(authentication(url))

        body = {}

        if limit:
            body.update({"limit": limit})

        if offset:
            body.update({"offset": offset})

        if includeDeleted:
            body.update({"includeDeleted": includeDeleted})

        if includeFlags:
            body.update({"includeFlags": includeFlags})

        if excludeFlags:
            body.update({"excludeFlags": excludeFlags})

        if customerID:
            body.update({"customerID": customerID})

        if exclude:
            body.update({"exclude": exclude})

        if user:
            body.update({"user": user})

        if owner:
            body.update({"owner": owner})

        if customerDataID:
            body.update({"customerDataID": customerDataID})

        if searchString:
            body.update({"searchString": searchString})

        if serviceType:
            body.update({"serviceType": serviceType})

        if subCriteria:
            body.update({"subCriteria": subCriteria})

        if logType:
            body.update({"logType": logType})

        if logCategory:
            body.update({"logCategory": logCategory})

        if status:
            body.update({"status": status})

        if minPriority:
            body.update({"minPriority": minPriority})

        if maxPriority:
            body.update({"maxPriority": maxPriority})

        if priority:
            body.update({"priority": priority})

        if includeCreatedTimestamp:
            body.update({"includeCreatedTimestamp": includeCreatedTimestamp})

        if includeLastUpdatedTimestamp:
            body.update({"includeLastUpdatedTimestamp": includeLastUpdatedTimestamp})

        if textSearchFeatures:
            body.update({"textSearchFeatures": textSearchFeatures})

        if ownerAssigned:
            body.update({"ownerAssigned": ownerAssigned})

        if techAssigned:
            body.update({"techAssigned": techAssigned})

        if customerOwnerID:
            body.update({"customerOwnerID": customerOwnerID})

        if techOwnerID:
            body.update({"techOwnerID": techOwnerID})

        if assetID:
            body.update({"assetID": assetID})

        if sortBy:
            body.update({"sortBy": sortBy})

        if startTimestamp:
            body.update({"startTimestamp": startTimestamp})

        if endTimestamp:
            body.update({"endTimestamp": endTimestamp})

        if tags:
            body.update({"tags": tags})

        response = post(url, json=body if body else None, verify=verify, headers=headers)

        errors = []
        if response.status_code == 401:
            raise http.AuthenticationFailedException(response)
        elif response.status_code == 403:
            raise http.AccessDeniedException(response)
        elif response.status_code == 412:
            raise http.ValidationErrorException(response)
        elif response.status_code == 404:
            raise http.ObjectNotFoundException(response)

        return response.json() if json else response

    @register_command(extending=('cases','v1','case'))
    def get_case_meta_data(caseId: int,json: bool = True, verify: bool = True, apiKey: str = "", authentication: dict = {}) -> dict:
        """Fetch metadata for a customer case (TEST)

        :param int caseId: Case ID
        :raises AuthenticationFailedException: on 401
        :raises AccessDeniedException: on 403
        :raises ObjectNotFoundException: on 404
        :returns: {"offset": 903, "limit": 599, "responseCode": 200, "count": 850, "metaData": {"additionalProperties": {}}, "messages": [{"message": "Civil water physical food I law letter.", "messageTemplate": "Prevent rock field TV language.", "field": "Business another high scientist generation.", "parameter": {}, "timestamp": 123646857}], "currentPage": 476, "size": 258}
        """
        from requests import get
        from argus_api.exceptions import http

        url = "https://osl-argus-trunk-web1.mnemonic.no/web/api/cases/v1/case/{caseId}".format(caseId=caseId)
        headers = {
            'Content-Type': 'application/json',
            'User-Agent': 'ArgusToolbelt/1.0'
        }

        if apiKey:
            headers["Argus-API-Key"] = apiKey
        elif authentication and isinstance(authentication, dict):
            headers.update(authentication)
        elif callable(authentication):
            headers.update(authentication(url))

        body = {}

        response = get(url, json=body if body else None, verify=verify, headers=headers)

        errors = []
        if response.status_code == 401:
            raise http.AuthenticationFailedException(response)
        elif response.status_code == 403:
            raise http.AccessDeniedException(response)
        elif response.status_code == 412:
            raise http.ValidationErrorException(response)
        elif response.status_code == 404:
            raise http.ObjectNotFoundException(response)

        return response.json() if json else response

    @register_command(extending=('cases','v1','case'))
    def get_case_entries(caseId: int,json: bool = True, verify: bool = True, apiKey: str = "", authentication: dict = {}) -> dict:
        """List case entries (TEST)

        :param int caseId: ID of case to list entries from
        :raises AuthenticationFailedException: on 401
        :raises ValidationFailedException: on 412
        :raises AccessDeniedException: on 403
        :raises ObjectNotFoundException: on 404
        :returns: {"offset": 211, "limit": 868, "responseCode": 200, "count": 359, "data": [{"description": "Go old education skin.", "tags": [{"value": "Such military of difference."}], "properties": {"additionalProperties": "More enough radio free so."}, "flags": 214, "userACL": [883], "createdByUser": {"id": 233, "customerID": 203, "userName": "nunezkaren", "name": "Karen Beltran"}, "customerReference": "Company song remember paper experience.", "status": "PENDING_SOC", "priority": 431, "text": "Call be benefit get and add major read.", "id": 732, "createdTimestamp": 183061393, "lastUpdatedTimestamp": 765192701, "publishedTimestamp": 589026921}], "metaData": {"additionalProperties": {}}, "messages": [{"message": "Foot me a tax use wind group some.", "messageTemplate": "Heart financial hour parent spring beyond parent student.", "field": "Offer inside oil fine hundred happen.", "parameter": {}, "timestamp": 642191824}], "currentPage": 274, "size": 4}
        """
        from requests import get
        from argus_api.exceptions import http

        url = "https://osl-argus-trunk-web1.mnemonic.no/web/api/cases/v1/case/{caseId}/entries".format(caseId=caseId)
        headers = {
            'Content-Type': 'application/json',
            'User-Agent': 'ArgusToolbelt/1.0'
        }

        if apiKey:
            headers["Argus-API-Key"] = apiKey
        elif authentication and isinstance(authentication, dict):
            headers.update(authentication)
        elif callable(authentication):
            headers.update(authentication(url))

        body = {}

        response = get(url, json=body if body else None, verify=verify, headers=headers)

        errors = []
        if response.status_code == 401:
            raise http.AuthenticationFailedException(response)
        elif response.status_code == 403:
            raise http.AccessDeniedException(response)
        elif response.status_code == 412:
            raise http.ValidationErrorException(response)
        elif response.status_code == 404:
            raise http.ObjectNotFoundException(response)

        return response.json() if json else response

    @register_command(extending=('cases','v1','case'))
    def merge_cases(mergeIntoID: int, mergeFromID: int, priority: int = None, status: str = None,json: bool = True, verify: bool = True, apiKey: str = "", authentication: dict = {}) -> dict:
        """Merge one case into another (TEST)

        :param int mergeIntoID: ID of case to put into
        :param int mergeFromID: ID of case to merge (will disappear)
        :param int priority: Priority to set for merged case
        :param str status: Status to set for merged case
        :raises AuthenticationFailedException: on 401
        :raises ValidationFailedException: on 412
        :raises AccessDeniedException: on 403
        :raises ObjectNotFoundException: on 404
        :returns: {"offset": 69, "limit": 303, "responseCode": 200, "count": 837, "metaData": {"additionalProperties": {}}, "messages": [{"message": "Project world another sometimes majority child.", "messageTemplate": "Model service well read Mr everything.", "field": "Fine probably but share many.", "parameter": {}, "timestamp": 1463254128}], "currentPage": 749, "size": 23}
        """
        from requests import put
        from argus_api.exceptions import http

        url = "https://osl-argus-trunk-web1.mnemonic.no/web/api/cases/v1/case/{mergeIntoID}/merge/{mergeFromID}".format(mergeIntoID=mergeIntoID, mergeFromID=mergeFromID)
        headers = {
            'Content-Type': 'application/json',
            'User-Agent': 'ArgusToolbelt/1.0'
        }

        if apiKey:
            headers["Argus-API-Key"] = apiKey
        elif authentication and isinstance(authentication, dict):
            headers.update(authentication)
        elif callable(authentication):
            headers.update(authentication(url))

        body = {}

        if priority:
            body.update({"priority": priority})

        if status:
            body.update({"status": status})

        response = put(url, json=body if body else None, verify=verify, headers=headers)

        errors = []
        if response.status_code == 401:
            raise http.AuthenticationFailedException(response)
        elif response.status_code == 403:
            raise http.AccessDeniedException(response)
        elif response.status_code == 412:
            raise http.ValidationErrorException(response)
        elif response.status_code == 404:
            raise http.ObjectNotFoundException(response)

        return response.json() if json else response