def from_dict(self,<EOL>dingos_obj_dict,<EOL>config_hooks=None,<EOL>namespace_dict=None,<EOL>):
<EOL>if '<STR_LIT>' in dingos_obj_dict.keys():<EOL><INDENT>top_level_namespace = (namespace_dict.get(dingos_obj_dict.get('<STR_LIT>'),None),dingos_obj_dict.get('<STR_LIT>'))<EOL><DEDENT>else:<EOL><INDENT>top_level_namespace = (None,None)<EOL><DEDENT>if not config_hooks:<EOL><INDENT>config_hooks = {}<EOL><DEDENT>datatype_extractor = config_hooks.get('<STR_LIT>', (lambda io, f, i, n, d: False))<EOL>special_ft_handler = config_hooks.get('<STR_LIT>', None)<EOL>attr_ignore_predicate = config_hooks.get('<STR_LIT>', None)<EOL>force_nonleaf_fact_predicate = config_hooks.get('<STR_LIT>', None)<EOL>if not namespace_dict:<EOL><INDENT>namespace_dict = {}<EOL><DEDENT>namespace_uri_2_pk_mapping = dict(self._DCM['<STR_LIT>'].objects.values_list('<STR_LIT>','<STR_LIT:id>'))<EOL>if not self.is_empty():<EOL><INDENT>logger.debug("<STR_LIT>" % (self.identifier,<EOL>self.timestamp,<EOL>self.pk))<EOL>self.clear()<EOL><DEDENT>(flat_list, attrs) = dingos_obj_dict.flatten(attr_ignore_predicate=attr_ignore_predicate,<EOL>force_nonleaf_fact_predicate=force_nonleaf_fact_predicate,<EOL>namespace_dict=namespace_dict)<EOL>for fact in flat_list:<EOL><INDENT>attr_info = dict(attrs.get(fact['<STR_LIT>'],[]))<EOL>add_fact_kargs = {}<EOL>add_fact_kargs['<STR_LIT>'] = FactDataType.UNKNOWN_KIND<EOL>add_fact_kargs['<STR_LIT>'] = "<STR_LIT>" % (<EOL>self.iobject_family.name, self.iobject_family_revision.name)<EOL>datatype_found = datatype_extractor(self, fact, attr_info, namespace_dict, add_fact_kargs)<EOL>if not datatype_found:<EOL><INDENT>add_fact_kargs = {}<EOL>add_fact_kargs['<STR_LIT>'] = FactDataType.NO_VOCAB<EOL>add_fact_kargs['<STR_LIT>'] = DINGOS_NAMESPACE_SLUG<EOL>add_fact_kargs['<STR_LIT>'] = DINGOS_NAMESPACE_URI<EOL><DEDENT>else:<EOL><INDENT>if not '<STR_LIT>' in add_fact_kargs:<EOL><INDENT>add_fact_kargs['<STR_LIT>'] = namespace_dict.get(<EOL>add_fact_kargs['<STR_LIT>'], '<STR_LIT>' % (<EOL>DINGOS_NAMESPACE_URI, self.iobject_family))<EOL><DEDENT><DEDENT>add_fact_kargs['<STR_LIT>'] = fact['<STR_LIT>']<EOL>add_fact_kargs['<STR_LIT>'] = fact['<STR_LIT>']<EOL>add_fact_kargs['<STR_LIT>'] = [fact['<STR_LIT:value>']]<EOL>add_fact_kargs['<STR_LIT>'] = fact['<STR_LIT>']<EOL>add_fact_kargs['<STR_LIT>'] = fact['<STR_LIT>']<EOL>add_fact_kargs['<STR_LIT>'] = top_level_namespace<EOL>handler_return_value = True<EOL>logger.debug("<STR_LIT>" % (fact, attr_info, add_fact_kargs))<EOL>if special_ft_handler:<EOL><INDENT>for (predicate, handler) in special_ft_handler:<EOL><INDENT>if predicate(fact, attr_info):<EOL><INDENT>handler_return_value = handler(self, fact, attr_info, add_fact_kargs)<EOL>if not handler_return_value:<EOL><INDENT>break<EOL><DEDENT><DEDENT><DEDENT><DEDENT>logger.debug("<STR_LIT>" % (fact, attr_info, add_fact_kargs))<EOL>if (handler_return_value == True):<EOL><INDENT>add_fact_kargs['<STR_LIT>'] = namespace_uri_2_pk_mapping<EOL>e2f_obj = self.add_fact(**add_fact_kargs)<EOL><DEDENT>elif not handler_return_value:<EOL><INDENT>continue<EOL><DEDENT>else:<EOL><INDENT>e2f_obj = handler_return_value<EOL><DEDENT><DEDENT>self.set_name()<EOL>
Convert DingoObjDict to facts and associate resulting facts with this information object.