Esempio n. 1
0
def test_extract_derivative_trans_form3_collection(test_form3_collection, doc_num: int):
    """
    Validate Form3 extraction code against a random sample of documents
    :param test_form3_collection:
    :return:
    """

    file = list(test_form3_collection.glob("*.txt"))[doc_num]
    doc = Form3(file)
    assert doc.filename == file.name
    fields_list = doc.derivatives
    assert len(fields_list) >= 0
    for idx, fields in enumerate(fields_list):
        assert (len(fields)) == 12
        assert fields["filename"] == file.name
        assert fields["accession_num"] == doc.accession_num
        assert fields["order"] == f"{idx+1}"
        assert fields["type"] == "derivHolding"
        assert fields["index"] == f"derivHolding{idx+1}"

        assert validate(file, fields["accession_num"], r"[\d-]+")
        assert validate(file, fields["security_title"], r".+")
        assert validate(file, fields["conversion_or_exercise_price"], r"[\d+\.]*")
        assert validate(file, fields["exercise_date"], r"(\d\d\d\d-\d\d-\d\d)?")
        assert validate(file, fields["expiration_date"], r"(\d\d\d\d-\d\d-\d\d)?")
        assert validate(file, fields["underlying_security_title"], r".+")
        assert validate(file, fields["underlying_security_shares"], r"[\d+\.]+")
        assert validate(file, fields["direct_or_indirect_ownership"], r"[DI]")
Esempio n. 2
0
def test_extract_report_owner_form4_collection(test_form4_collection,
                                               doc_num: int):
    """
    Validate Form4 extraction code against a random sample of documents
    :param test_form4_collection:
    :return:
    """
    file = list(test_form4_collection.glob("*.txt"))[doc_num]
    doc = Form4(file)
    assert doc.filename == file.name
    fields_list = doc.report_owners
    assert len(fields_list) > 0
    for idx, fields in enumerate(fields_list):
        assert (len(fields)) == 19
        assert fields["filename"] == file.name
        assert fields["order"] == f"{idx+1}"
        assert fields["type"] == "reportingOwner"
        assert fields["index"] == f"reportingOwner{idx+1}"

        assert validate(file, fields["rpt_owner_cik"], r"\d{10}")
        assert validate(file, fields["rpt_owner_name"], r".+")
        assert validate(file, fields["rpt_owner_city"], r".+")
        assert validate(file,
                        fields["is_director"],
                        r"[10]",
                        none_allowed=True)
        assert validate(file, fields["is_officer"], r"[10]", none_allowed=True)
        assert validate(file,
                        fields["is_ten_percent_owner"],
                        r"[10]",
                        none_allowed=True)
        assert validate(file, fields["is_other"], r"[10]", none_allowed=True)
def test_extract_signature_form4_collection(test_form4_collection,
                                            doc_num: int):
    """
    Validate Form4 extraction code against a random sample of documents
    :param test_form4_collection:
    :return:
    """
    file = list(test_form4_collection.glob("*.txt"))[doc_num]
    doc = Form4(file)
    assert doc.filename == file.name
    fields_list = doc.signatures
    assert len(fields_list) > 0
    for idx, fields in enumerate(fields_list):
        assert (len(fields)) == 7
        assert fields["filename"] == file.name
        assert fields["accession_num"] == doc.accession_num
        assert fields["order"] == f"{idx+1}"
        assert fields["type"] == "signature"
        assert fields["index"] == f"signature{idx+1}"

        assert validate(file, fields["signature_name"], r".+")
        assert validate(file, fields["signature_date"], r"\d\d\d\d-\d\d-\d\d")
def test_extract_footnotes_form4_collection(test_form4_collection,
                                            doc_num: int):
    """
    Validate Form4 extraction code against a random sample of documents
    :param test_form4_collection:
    :return:
    """
    file = list(test_form4_collection.glob("*.txt"))[doc_num]
    doc = Form3(file)
    assert doc.filename == file.name
    fields_list = doc.footnotes
    assert len(fields_list) >= 0
    for idx, fields in enumerate(fields_list):
        assert (len(fields)) == 6
        assert fields["filename"] == file.name
        assert fields["accession_num"] == doc.accession_num

        assert validate(file, fields["accession_num"], r"[\d-]+")
        assert validate(file, fields["footnote"], r".+")
        assert validate(file, fields["index"], r"\w+\d+")
        assert validate(file, fields["field"], r"\w+")
        assert validate(file, fields["field"], r".+")
def test_extract_nonderivatives_form3_collection(test_form3_collection,
                                                 doc_num: int):
    """
    Validate Form3 extraction code against a random sample of documents
    :param test_form3_collection:
    :return:
    """
    file = list(test_form3_collection.glob("*.txt"))[doc_num]
    doc = Form3(file)
    assert doc.filename == file.name
    fields_list = doc.nonderivatives
    assert len(fields_list) >= 0
    for idx, fields in enumerate(fields_list):
        assert (len(fields)) == 8
        assert fields["filename"] == file.name
        assert fields["accession_num"] == doc.accession_num
        assert fields["order"] == f"{idx+1}"
        assert fields["type"] == "nonDerivHolding"
        assert fields["index"] == f"nonDerivHolding{idx+1}"

        assert validate(file, fields["security_title"], r".+")
        assert validate(file, fields["shares_owned_following_transaction"],
                        r"[\d\.]+")
        assert validate(file, fields["direct_or_indirect_ownership"], r"[DI]")
Esempio n. 6
0
def test_extract_derivative_trans_form4_collection(test_form4_collection, doc_num: int):
    """
    Validate Form4 extraction code against a random sample of documents
    :param test_form4_collection:
    :return:
    """
    file = list(test_form4_collection.glob("*.txt"))[doc_num]
    doc = Form4(file)
    assert doc.filename == file.name
    fields_list = doc.derivatives

    trans_fields_list = [f for f in fields_list if f["type"] == "derivTrans"]
    for idx, fields in enumerate(trans_fields_list):
        assert (len(fields)) == 26
        assert fields["filename"] == file.name
        assert fields["accession_num"] == doc.accession_num
        assert fields["order"] == f"{idx+1}"
        assert fields["type"] == "derivTrans"
        assert fields["index"] == f"derivTrans{idx+1}"

        assert validate(file, fields["accession_num"], r"[\d-]+")
        assert validate(file, fields["security_title"], r".+")
        assert validate(file, fields["direct_or_indirect_ownership"], r"[DI]")
        assert validate(file, fields["transaction_date"], r"(\d\d\d\d-\d\d-\d\d)?")
        assert validate(file, fields["transaction_acquired_disposed_code"], r"[AD]")
        assert validate(file, fields["transaction_price_per_share"], r"[\d+\.]*")
        assert validate(file, fields["transaction_shares"], r"[\d+\.]+")
        assert validate(file, fields["equity_swap_involved"], r"[10]")
        assert validate(file, fields["transaction_form_type"], r"4")
        assert validate(file, fields["shares_owned_following_transaction"], r"[\d\.]+")
        assert validate(file, fields["transaction_code"], r"[ACMPS]")

    holdings_fields_list = [f for f in fields_list if f["type"] == "derivHolding"]
    for idx, fields in enumerate(holdings_fields_list):
        assert (len(fields)) == 26
        assert fields["filename"] == file.name
        assert fields["accession_num"] == doc.accession_num
        assert fields["order"] == f"{idx+1}"
        assert fields["type"] == "derivHolding"
        assert fields["index"] == f"derivHolding{idx+1}"

        assert validate(file, fields["accession_num"], r"[\d-]+")
        assert validate(file, fields["security_title"], r".+")
        assert validate(file, fields["direct_or_indirect_ownership"], r"[DI]")
Esempio n. 7
0
def test_extract_doclevel_form4_collection(test_form4_collection):
    """
    Validate Form4 extraction code against a random sample of documents
    :param test_form4_collection:
    :return:
    """
    for file in test_form4_collection.glob("*.txt"):
        doc = Form4(file)
        assert doc.filename == file.name
        fields = doc.doc_info
        assert len(fields) == 18
        assert fields["filename"] == file.name
        assert fields["accession_num"] is not None
        assert fields["schema_version"] == "X0306"
        assert fields["document_type"] == "4"

        assert validate(file, fields["accession_num"], r"[\d-]+")
        assert validate(file, fields["sec_accept_datetime"], r"\d{14,14}")
        assert validate(file, fields["sec_file_num"], r"[\d-]+")
        assert validate(file, fields["doc_count"], r"\d+")
        assert validate(file, fields["filed_date"], r"\d{8,8}")
        assert validate(file, fields["conformed_period_of_report"], r"\d{8,8}")
        assert validate(file, fields["change_date"], r"\d{8,8}")
        assert validate(file, fields["period_of_report"], r"\d\d\d\d-\d\d-\d\d")
        assert validate(
            file, fields["not_subject_to_section_16"], r"[10]", none_allowed=True
        )
        assert validate(file, fields["issuer_cik"], r"\d+")
        assert validate(file, fields["issuer_name"], r".+")
        assert validate(file, fields["issuer_trading_symbol"], r"[A-Z\.]+")
        assert validate(file, fields["regcik"], r"\d+")
        assert validate(file, fields["regsic"], r"\d\d\d\d", none_allowed=True)