code: def get_epublication(self):
          
          if not self.is_valid():
              bad_fields = filter(lambda x: not x.is_valid(), self.fields)
              bad_fields = map(
                  lambda x: "Keyword '%s' (%s) not found." % (x.keyword, x.descr),
                  bad_fields
              )
  
              raise MetaParsingException(
                  "Missing field(s):\n\t" + "\n\t".join(bad_fields)
              )
  
          relevant_fields = self.fields
          relevant_fields += filter(lambda x: x.is_valid(), self.optional)
  
          epub_dict = dict(map(lambda x: (x.epub, x.value), relevant_fields))
  
          # make sure, that all fields present in EPublication has values also
          # in epub_dict
          for epublication_part in EPublication._fields:
              if epublication_part not in epub_dict:
                  epub_dict[epublication_part] = None
  
          if not is_valid_isbn(epub_dict["ISBN"]):
              raise MetaParsingException(
                  "ISBN '%s' is not valid!" % epub_dict["ISBN"]
              )
  
          return EPublication(**epub_dict)
docs: Returns:
              EPublication: Structure when the object :meth:`is_valid`.
  
          Raises:
              MetaParsingException: When the object is not valid.