<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_obj_frm_str(obj_str, **kwargs):
 """ Returns a python object from a python object string args: obj_str: python object path expamle "rdfframework.connections.ConnManager[{param1}]" kwargs: * kwargs used to format the 'obj_str' """

    obj_str = obj_str.format(**kwargs)
    args = []
    kwargs = {}
    params = []
    # parse the call portion of the string
    if "(" in obj_str:
        call_args = obj_str[obj_str.find("("):]
        obj_str = obj_str[:obj_str.find("(")]
        call_args = call_args[1:-1]
        if call_args:
            call_args = call_args.split(",")
        else:
            call_args = []
        call_args = [arg.strip() for arg in call_args]

        for arg in call_args:
            if "=" in arg:
                parts = arg.split("=")
                kwargs[parts[0]] = parts[1]
            else:
                args.append(arg)
    # parse a the __getitem__ portion of the string
    if "[" in obj_str:
        params = obj_str[obj_str.find("["):]
        obj_str = obj_str[:obj_str.find("[")]
        params = [part.replace("[", "").replace("]", "")
                  for part in params.split("][")]
    obj = pydoc.locate(obj_str)
    if params:
        for part in params:
            obj = get_attr(obj, part)
    if args or kwargs:
        if kwargs:
            obj = obj.__call__(*args, **kwargs)
        else:
            obj = obj.__call__(*args)
    return obj