# -*- coding: utf-8 -*-
############################################################
#
# Autogenerated by the KBase type compiler -
# any changes made here will be overwritten
#
############################################################

from __future__ import print_function
# the following is a hack to get the baseclient to import whether we're in a
# package or not. This makes pep8 unhappy hence the annotations.
try:
    # baseclient and this client are in a package
    from .baseclient import BaseClient as _BaseClient  # @UnusedImport
except:
    # no they aren't
    from baseclient import BaseClient as _BaseClient  # @Reimport


class test(object):

    def __init__(
            self, url=None, timeout=30 * 60, user_id=None,
            password=<PASSWORD>, token=<PASSWORD>, ignore_authrc=False,
            trust_all_ssl_certificates=False,
            auth_svc='https://kbase.us/services/authorization/Sessions/Login'):
        if url is None:
            raise ValueError('A url is required')
        self._service_ver = None
        self._client = _BaseClient(
            url, timeout=timeout, user_id=user_id, password=password,
            token=token, ignore_authrc=ignore_authrc,
            trust_all_ssl_certificates=trust_all_ssl_certificates,
            auth_svc=auth_svc)

    def filter_contigs(self, params, context=None):
        """
        The actual function is declared using 'funcdef' to specify the name
        and input/return arguments to the function.  For all typical KBase
        Apps that run in the Narrative, your function should have the 
        'authentication required' modifier.
        :param params: instance of type "FilterContigsParams" (*  A 'typedef'
           can also be used to define compound or container *  objects, like
           lists, maps, and structures.  The standard KBase *  convention is
           to use structures, as shown here, to define the *  input and
           output of your function.  Here the input is a *  reference to the
           Assembly data object, a workspace to save *  output, and a length
           threshold for filtering. * *  To define lists and maps, use a
           syntax similar to C++ templates *  to indicate the type contained
           in the list or map.  For example: * *      list <string>
           list_of_strings; *      mapping <string, int> map_of_ints;) ->
           structure: parameter "assembly_input_ref" of type "assembly_ref"
           (*  A 'typedef' allows you to provide a more specific name for * 
           a type.  Built-in primitive types include 'string', 'int', * 
           'float'. * *  Here we define a type named assembly_ref to indicate
           *  a string that should be set to a KBase ID reference to an * 
           Assembly data object.), parameter "workspace_name" of String,
           parameter "min_length" of Long
        :returns: instance of type "FilterContigsResults" (*  Here is the
           definition of the output of the function.  The output *  can be
           used by other SDK modules which call your code, or the output * 
           visualizations in the Narrative.  'report_name' and 'report_ref'
           are *  special output fields- if defined, the Narrative can
           automatically *  render your Report.) -> structure: parameter
           "report_name" of String, parameter "report_ref" of String,
           parameter "assembly_output" of type "assembly_ref" (*  A 'typedef'
           allows you to provide a more specific name for *  a type. 
           Built-in primitive types include 'string', 'int', *  'float'. * * 
           Here we define a type named assembly_ref to indicate *  a string
           that should be set to a KBase ID reference to an *  Assembly data
           object.), parameter "n_initial_contigs" of Long, parameter
           "n_contigs_removed" of Long, parameter "n_contigs_remaining" of
           Long
        """
        return self._client.call_method(
            'test.filter_contigs',
            [params], self._service_ver, context)

    def status(self, context=None):
        return self._client.call_method('test.status',
                                        [], self._service_ver, context)
