<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_client(name, description, base_url=None, middlewares=None, reset=False):
 """ Build a complete spore client and store it :param name: name of the client :param description: the REST API description as a file or URL :param base_url: the base URL of the REST API :param middlewares: middlewares to enable :type middlewares: ordered list of 2-elements tuples -> (middleware_class, { :param reset: regenerate or not the client Example : import britney_utils from britney.middleware.format import Json from britney.middleware.auth import Basic is_json = lambda environ: environ['spore.format'] == 'json' client = britney_utils.get_client('MyRestApi', 'http://my-rest-api.org/description.json', base_url='http://rest-api.org/v2/', middlewares=( (Json, {'predicate': is_json}), (Basic, {'username': 'toto', 'password': 'lala'}) )) """

    if name in __clients and not reset:
        return __clients[name]

    middlewares = middlewares if middlewares is not None else []

    try:
        client = britney.spyre(description, base_url=base_url)
    except (SporeClientBuildError, SporeMethodBuildError) as build_errors:
        logging.getLogger('britney').error(str(build_errors))
    else:
        for middleware in middlewares:
            kwargs = {}
            if len(middleware) == 2:
                kwargs = middleware[1]
            predicate = kwargs.pop('predicate', None)
            if predicate:
                client.enable_if(predicate, middleware[0], **kwargs)
            else:
                client.enable(middleware[0], **kwargs)
        __clients[name] = client
        return client