'Load the info for a Frame from a frame xml file'

def _handle_frame_elt(self, elt, ignorekeys=[]):

    frinfo = self._load_xml_attributes(AttrDict(), elt)
    frinfo[u'_type'] = u'frame'
    frinfo[u'definition'] = u''
    frinfo[u'definitionMarkup'] = u''
    frinfo[u'FE'] = PrettyDict()
    frinfo[u'FEcoreSets'] = []
    frinfo[u'lexUnit'] = PrettyDict()
    frinfo[u'semTypes'] = []
    for k in ignorekeys:
        if (k in frinfo):
            del frinfo[k]
    for sub in elt:
        if (sub.tag.endswith(u'definition') and (u'definition' not in ignorekeys)):
            frinfo[u'definitionMarkup'] = sub.text
            frinfo[u'definition'] = self._strip_tags(sub.text)
        elif (sub.tag.endswith(u'FE') and (u'FE' not in ignorekeys)):
            feinfo = self._handle_fe_elt(sub)
            frinfo[u'FE'][feinfo.name] = feinfo
            feinfo[u'frame'] = frinfo
        elif (sub.tag.endswith(u'FEcoreSet') and (u'FEcoreSet' not in ignorekeys)):
            coreset = self._handle_fecoreset_elt(sub)
            frinfo[u'FEcoreSets'].append(PrettyList((frinfo[u'FE'][fe.name] for fe in coreset)))
        elif (sub.tag.endswith(u'lexUnit') and (u'lexUnit' not in ignorekeys)):
            luentry = self._handle_framelexunit_elt(sub)
            if (luentry[u'status'] in self._bad_statuses):
                continue
            luentry[u'frame'] = frinfo
            luentry[u'URL'] = ((((self._fnweb_url + u'/') + self._lu_dir) + u'/') + u'lu{0}.xml'.format(luentry[u'ID']))
            luentry[u'subCorpus'] = Future((lambda lu: (lambda : self._lu_file(lu).subCorpus))(luentry))
            luentry[u'exemplars'] = Future((lambda lu: (lambda : self._lu_file(lu).exemplars))(luentry))
            frinfo[u'lexUnit'][luentry.name] = luentry
            if (not self._lu_idx):
                self._buildluindex()
            self._lu_idx[luentry.ID] = luentry
        elif (sub.tag.endswith(u'semType') and (u'semTypes' not in ignorekeys)):
            semtypeinfo = self._load_xml_attributes(AttrDict(), sub)
            frinfo[u'semTypes'].append(self.semtype(semtypeinfo.ID))
    frinfo[u'frameRelations'] = self.frame_relations(frame=frinfo)
    for fe in frinfo.FE.values():
        if fe.requiresFE:
            (name, ID) = (fe.requiresFE.name, fe.requiresFE.ID)
            fe.requiresFE = frinfo.FE[name]
            assert (fe.requiresFE.ID == ID)
        if fe.excludesFE:
            (name, ID) = (fe.excludesFE.name, fe.excludesFE.ID)
            fe.excludesFE = frinfo.FE[name]
            assert (fe.excludesFE.ID == ID)
    return frinfo
