<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def full(self, filetype, **kwargs):
 """Return the full name of a given type of file. Parameters filetype : str File type parameter. Returns ------- full : str The full path to the file. """


        # check if full already in kwargs
        if 'full' in kwargs:
            return kwargs.get('full')

        # check for filetype in template
        assert filetype in self.templates, ('No entry {0} found. Filetype must '
                                            'be one of the designated templates '
                                            'in the currently loaded tree'.format(filetype))
        template = self.templates[filetype]

        # Now replace {} items
        if template:
            # check for missing keyword arguments
            keys = self.lookup_keys(filetype)
            # split keys to remove :format from any "key:format"
            keys = [k.split(':')[0] for k in keys]
            missing_keys = set(keys) - set(kwargs.keys())
            if missing_keys:
                raise KeyError('Missing required keyword arguments: {0}'.format(list(missing_keys)))
            else:
                template = template.format(**kwargs)

        if template:
            # Now replace environmental variables
            template = os.path.expandvars(template)

            # Now call special functions as appropriate
            template = self._call_special_functions(filetype, template, **kwargs)

        return template