docs: def process_ems(self, doc: Document) -> List[Document]:
          """
          Factory method to wrap input JSON docs in an ETK Document object.
  
          Args:
              doc (Document): process on this document
  
          Returns: a Document object and a KnowledgeGraph object
  
          """
          new_docs = list()
  
          for a_em in self.em_lst:
              if a_em.document_selector(doc):
                  self.log(" processing with " + str(type(a_em)) + ". Process", "info", doc.doc_id, doc.url)
                  fresh_docs = a_em.process_document(doc)
                  # Allow ETKModules to return nothing in lieu of an empty list (people forget to return empty list)
                  if fresh_docs:
                      new_docs.extend(fresh_docs)
              # try:
              #     if a_em.document_selector(doc):
              #         self.log(" processing with " + str(type(a_em)) + ". Process", "info", doc.doc_id, doc.url)
              #         new_docs.extend(a_em.process_document(doc))
              # except Exception as e:
              #     if self.error_policy == ErrorPolicy.THROW_EXTRACTION:
              #         self.log(str(e) + " processing with " + str(type(a_em)) + ". Continue", "error", doc.doc_id,
              #                  doc.url)
              #         continue
              #     if self.error_policy == ErrorPolicy.THROW_DOCUMENT:
              #         self.log(str(e) + " processing with " + str(type(a_em)) + ". Throw doc", "error", doc.doc_id,
              #                  doc.url)
              #         return list()
              #     if self.error_policy == ErrorPolicy.RAISE:
              #         self.log(str(e) + " processing with " + str(type(a_em)), "error", doc.doc_id, doc.url)
              #         raise e
  
          # Do house cleaning.
          doc.insert_kg_into_cdr()
          if not self.generate_json_ld:
              if "knowledge_graph" in doc.cdr_document:
                  doc.cdr_document["knowledge_graph"].pop("@context", None)
          Utility.make_json_serializable(doc.cdr_document)
  
          if self.output_kg_only:
              doc = doc.kg.value
          elif not doc.doc_id:
              doc.doc_id = Utility.create_doc_id_from_json(doc.cdr_document)
  
          results = [doc]
          for new_doc in new_docs:
              results.extend(self.process_ems(new_doc))
  
          return results