[Enhancement] Add Start/End Date Filters To SecCompanyFilingsFetcher (#6757)

* add start-end date filters to SecCompanyFilingsFetcher

* multiple form_type allowed

* too-many-lines
This commit is contained in:
Danglewood
2024-10-11 14:05:43 -07:00
committed by GitHub
parent 3605af30f5
commit 737e5d4925
6 changed files with 1193 additions and 14 deletions

View File

@@ -913,6 +913,8 @@ def test_equity_fundamental_revenue_per_segment(params, headers):
"symbol": "AAPL",
"limit": 3,
"form_type": "8-K",
"start_date": None,
"end_date": None,
"cik": None,
"provider": "sec",
"use_cache": False,
@@ -924,6 +926,8 @@ def test_equity_fundamental_revenue_per_segment(params, headers):
"limit": 3,
"form_type": "10-Q",
"symbol": None,
"start_date": None,
"end_date": None,
"provider": "sec",
"use_cache": False,
}

View File

@@ -874,6 +874,8 @@ def test_equity_fundamental_revenue_per_segment(params, obb):
"limit": 3,
"form_type": "8-K",
"cik": None,
"start_date": None,
"end_date": None,
"provider": "sec",
"use_cache": False,
}
@@ -884,6 +886,8 @@ def test_equity_fundamental_revenue_per_segment(params, obb):
"limit": 3,
"form_type": "10-Q",
"symbol": None,
"start_date": None,
"end_date": None,
"provider": "sec",
"use_cache": False,
}

View File

@@ -23930,11 +23930,374 @@
},
{
"name": "form_type",
"type": "str",
"description": "Filter by form type. Check the data provider for available types.",
"type": "Union[str, List[str]]",
"description": "Filter by form type. Check the data provider for available types. Multiple items allowed for provider(s): sec.",
"default": null,
"optional": true,
"choices": null
"choices": [
"1",
"1-A",
"1-A_POS",
"1-A-W",
"1-E",
"1-E_AD",
"1-K",
"1-SA",
"1-U",
"1-Z",
"1-Z-W",
"10-12B",
"10-12G",
"10-D",
"10-K",
"10-KT",
"10-Q",
"10-QT",
"11-K",
"11-KT",
"13F-HR",
"13F-NT",
"13FCONP",
"144",
"15-12B",
"15-12G",
"15-15D",
"15F-12B",
"15F-12G",
"15F-15D",
"18-12B",
"18-K",
"19B-4E",
"2-A",
"2-AF",
"2-E",
"20-F",
"20FR12B",
"20FR12G",
"24F-2NT",
"25",
"25-NSE",
"253G1",
"253G2",
"253G3",
"253G4",
"3",
"305B2",
"34-12H",
"4",
"40-17F1",
"40-17F2",
"40-17G",
"40-17GCS",
"40-202A",
"40-203A",
"40-206A",
"40-24B2",
"40-33",
"40-6B",
"40-8B25",
"40-8F-2",
"40-APP",
"40-F",
"40-OIP",
"40FR12B",
"40FR12G",
"424A",
"424B1",
"424B2",
"424B3",
"424B4",
"424B5",
"424B7",
"424B8",
"424H",
"425",
"485APOS",
"485BPOS",
"485BXT",
"486APOS",
"486BPOS",
"486BXT",
"487",
"497",
"497AD",
"497H2",
"497J",
"497K",
"497VPI",
"497VPU",
"5",
"6-K",
"6B_NTC",
"6B_ORDR",
"8-A12B",
"8-A12G",
"8-K",
"8-K12B",
"8-K12G3",
"8-K15D5",
"8-M",
"8F-2_NTC",
"8F-2_ORDR",
"9-M",
"ABS-15G",
"ABS-EE",
"ADN-MTL",
"ADV-E",
"ADV-H-C",
"ADV-H-T",
"ADV-NR",
"ANNLRPT",
"APP_NTC",
"APP_ORDR",
"APP_WD",
"APP_WDG",
"ARS",
"ATS-N",
"ATS-N-C",
"ATS-N/UA",
"AW",
"AW_WD",
"C",
"C-AR",
"C-AR-W",
"C-TR",
"C-TR-W",
"C-U",
"C-U-W",
"C-W",
"CB",
"CERT",
"CERTARCA",
"CERTBATS",
"CERTCBO",
"CERTNAS",
"CERTNYS",
"CERTPAC",
"CFPORTAL",
"CFPORTAL-W",
"CORRESP",
"CT_ORDER",
"D",
"DEF_14A",
"DEF_14C",
"DEFA14A",
"DEFA14C",
"DEFC14A",
"DEFC14C",
"DEFM14A",
"DEFM14C",
"DEFN14A",
"DEFR14A",
"DEFR14C",
"DEL_AM",
"DFAN14A",
"DFRN14A",
"DOS",
"DOSLTR",
"DRS",
"DRSLTR",
"DSTRBRPT",
"EFFECT",
"F-1",
"F-10",
"F-10EF",
"F-10POS",
"F-1MEF",
"F-3",
"F-3ASR",
"F-3D",
"F-3DPOS",
"F-3MEF",
"F-4",
"F-4_POS",
"F-4MEF",
"F-6",
"F-6_POS",
"F-6EF",
"F-7",
"F-7_POS",
"F-8",
"F-8_POS",
"F-80",
"F-80POS",
"F-9",
"F-9_POS",
"F-N",
"F-X",
"FOCUSN",
"FWP",
"G-405",
"G-405N",
"G-FIN",
"G-FINW",
"IRANNOTICE",
"MA",
"MA-A",
"MA-I",
"MA-W",
"MSD",
"MSDCO",
"MSDW",
"N-1",
"N-14",
"N-14_8C",
"N-14MEF",
"N-18F1",
"N-1A",
"N-2",
"N-2_POSASR",
"N-23C-2",
"N-23C3A",
"N-23C3B",
"N-23C3C",
"N-2ASR",
"N-2MEF",
"N-30B-2",
"N-30D",
"N-4",
"N-5",
"N-54A",
"N-54C",
"N-6",
"N-6F",
"N-8A",
"N-8B-2",
"N-8F",
"N-8F_NTC",
"N-8F_ORDR",
"N-CEN",
"N-CR",
"N-CSR",
"N-CSRS",
"N-MFP",
"N-MFP1",
"N-MFP2",
"N-PX",
"N-Q",
"N-VP",
"N-VPFS",
"NO_ACT",
"NPORT-EX",
"NPORT-NP",
"NPORT-P",
"NRSRO-CE",
"NRSRO-UPD",
"NSAR-A",
"NSAR-AT",
"NSAR-B",
"NSAR-BT",
"NSAR-U",
"NT_10-D",
"NT_10-K",
"NT_10-Q",
"NT_11-K",
"NT_20-F",
"NT_N-CEN",
"NT_N-MFP",
"NT_N-MFP1",
"NT_N-MFP2",
"NT_NPORT-EX",
"NT_NPORT-P",
"NT-NCEN",
"NT-NCSR",
"NT-NSAR",
"NTFNCEN",
"NTFNCSR",
"NTFNSAR",
"NTN_10D",
"NTN_10K",
"NTN_10Q",
"NTN_20F",
"OIP_NTC",
"OIP_ORDR",
"POS_8C",
"POS_AM",
"POS_AMI",
"POS_EX",
"POS462B",
"POS462C",
"POSASR",
"PRE_14A",
"PRE_14C",
"PREC14A",
"PREC14C",
"PREM14A",
"PREM14C",
"PREN14A",
"PRER14A",
"PRER14C",
"PRRN14A",
"PX14A6G",
"PX14A6N",
"QRTLYRPT",
"QUALIF",
"REG-NR",
"REVOKED",
"RW",
"RW_WD",
"S-1",
"S-11",
"S-11MEF",
"S-1MEF",
"S-20",
"S-3",
"S-3ASR",
"S-3D",
"S-3DPOS",
"S-3MEF",
"S-4",
"S-4_POS",
"S-4EF",
"S-4MEF",
"S-6",
"S-8",
"S-8_POS",
"S-B",
"S-BMEF",
"SBSE",
"SBSE-A",
"SBSE-BD",
"SBSE-C",
"SBSE-W",
"SC_13D",
"SC_13E1",
"SC_13E3",
"SC_13G",
"SC_14D9",
"SC_14F1",
"SC_14N",
"SC_TO-C",
"SC_TO-I",
"SC_TO-T",
"SC13E4F",
"SC14D1F",
"SC14D9C",
"SC14D9F",
"SD",
"SDR",
"SE",
"SEC_ACTION",
"SEC_STAFF_ACTION",
"SEC_STAFF_LETTER",
"SF-1",
"SF-3",
"SL",
"SP_15D2",
"STOP_ORDER",
"SUPPL",
"T-3",
"TA-1",
"TA-2",
"TA-W",
"TACO",
"TH",
"TTW",
"UNDER",
"UPLOAD",
"WDL-REQ",
"X-17A-5"
]
},
{
"name": "limit",
@@ -23983,7 +24346,7 @@
},
{
"name": "form_type",
"type": "Literal['1', '1-A', '1-A_POS', '1-A-W', '1-E', '1-E_AD', '1-K', '1-SA', '1-U', '1-Z', '1-Z-W', '10-12B', '10-12G', '10-D', '10-K', '10-KT', '10-Q', '10-QT', '11-K', '11-KT', '13F-HR', '13F-NT', '13FCONP', '144', '15-12B', '15-12G', '15-15D', '15F-12B', '15F-12G', '15F-15D', '18-12B', '18-K', '19B-4E', '2-A', '2-AF', '2-E', '20-F', '20FR12B', '20FR12G', '24F-2NT', '25', '25-NSE', '253G1', '253G2', '253G3', '253G4', '3', '305B2', '34-12H', '4', '40-17F1', '40-17F2', '40-17G', '40-17GCS', '40-202A', '40-203A', '40-206A', '40-24B2', '40-33', '40-6B', '40-8B25', '40-8F-2', '40-APP', '40-F', '40-OIP', '40FR12B', '40FR12G', '424A', '424B1', '424B2', '424B3', '424B4', '424B5', '424B7', '424B8', '424H', '425', '485APOS', '485BPOS', '485BXT', '486APOS', '486BPOS', '486BXT', '487', '497', '497AD', '497H2', '497J', '497K', '497VPI', '497VPU', '5', '6-K', '6B_NTC', '6B_ORDR', '8-A12B', '8-A12G', '8-K', '8-K12B', '8-K12G3', '8-K15D5', '8-M', '8F-2_NTC', '8F-2_ORDR', '9-M', 'ABS-15G', 'ABS-EE', 'ADN-MTL', 'ADV-E', 'ADV-H-C', 'ADV-H-T', 'ADV-NR', 'ANNLRPT', 'APP_NTC', 'APP_ORDR', 'APP_WD', 'APP_WDG', 'ARS', 'ATS-N', 'ATS-N-C', 'ATS-N/UA', 'AW', 'AW_WD', 'C', 'C-AR', 'C-AR-W', 'C-TR', 'C-TR-W', 'C-U', 'C-U-W', 'C-W', 'CB', 'CERT', 'CERTARCA', 'CERTBATS', 'CERTCBO', 'CERTNAS', 'CERTNYS', 'CERTPAC', 'CFPORTAL', 'CFPORTAL-W', 'CORRESP', 'CT_ORDER', 'D', 'DEF_14A', 'DEF_14C', 'DEFA14A', 'DEFA14C', 'DEFC14A', 'DEFC14C', 'DEFM14A', 'DEFM14C', 'DEFN14A', 'DEFR14A', 'DEFR14C', 'DEL_AM', 'DFAN14A', 'DFRN14A', 'DOS', 'DOSLTR', 'DRS', 'DRSLTR', 'DSTRBRPT', 'EFFECT', 'F-1', 'F-10', 'F-10EF', 'F-10POS', 'F-1MEF', 'F-3', 'F-3ASR', 'F-3D', 'F-3DPOS', 'F-3MEF', 'F-4', 'F-4_POS', 'F-4MEF', 'F-6', 'F-6_POS', 'F-6EF', 'F-7', 'F-7_POS', 'F-8', 'F-8_POS', 'F-80', 'F-80POS', 'F-9', 'F-9_POS', 'F-N', 'F-X', 'FOCUSN', 'FWP', 'G-405', 'G-405N', 'G-FIN', 'G-FINW', 'IRANNOTICE', 'MA', 'MA-A', 'MA-I', 'MA-W', 'MSD', 'MSDCO', 'MSDW', 'N-1', 'N-14', 'N-14_8C', 'N-14MEF', 'N-18F1', 'N-1A', 'N-2', 'N-2_POSASR', 'N-23C-2', 'N-23C3A', 'N-23C3B', 'N-23C3C', 'N-2ASR', 'N-2MEF', 'N-30B-2', 'N-30D', 'N-4', 'N-5', 'N-54A', 'N-54C', 'N-6', 'N-6F', 'N-8A', 'N-8B-2', 'N-8F', 'N-8F_NTC', 'N-8F_ORDR', 'N-CEN', 'N-CR', 'N-CSR', 'N-CSRS', 'N-MFP', 'N-MFP1', 'N-MFP2', 'N-PX', 'N-Q', 'N-VP', 'N-VPFS', 'NO_ACT', 'NPORT-EX', 'NPORT-NP', 'NPORT-P', 'NRSRO-CE', 'NRSRO-UPD', 'NSAR-A', 'NSAR-AT', 'NSAR-B', 'NSAR-BT', 'NSAR-U', 'NT_10-D', 'NT_10-K', 'NT_10-Q', 'NT_11-K', 'NT_20-F', 'NT_N-CEN', 'NT_N-MFP', 'NT_N-MFP1', 'NT_N-MFP2', 'NT_NPORT-EX', 'NT_NPORT-P', 'NT-NCEN', 'NT-NCSR', 'NT-NSAR', 'NTFNCEN', 'NTFNCSR', 'NTFNSAR', 'NTN_10D', 'NTN_10K', 'NTN_10Q', 'NTN_20F', 'OIP_NTC', 'OIP_ORDR', 'POS_8C', 'POS_AM', 'POS_AMI', 'POS_EX', 'POS462B', 'POS462C', 'POSASR', 'PRE_14A', 'PRE_14C', 'PREC14A', 'PREC14C', 'PREM14A', 'PREM14C', 'PREN14A', 'PRER14A', 'PRER14C', 'PRRN14A', 'PX14A6G', 'PX14A6N', 'QRTLYRPT', 'QUALIF', 'REG-NR', 'REVOKED', 'RW', 'RW_WD', 'S-1', 'S-11', 'S-11MEF', 'S-1MEF', 'S-20', 'S-3', 'S-3ASR', 'S-3D', 'S-3DPOS', 'S-3MEF', 'S-4', 'S-4_POS', 'S-4EF', 'S-4MEF', 'S-6', 'S-8', 'S-8_POS', 'S-B', 'S-BMEF', 'SBSE', 'SBSE-A', 'SBSE-BD', 'SBSE-C', 'SBSE-W', 'SC_13D', 'SC_13E1', 'SC_13E3', 'SC_13G', 'SC_14D9', 'SC_14F1', 'SC_14N', 'SC_TO-C', 'SC_TO-I', 'SC_TO-T', 'SC13E4F', 'SC14D1F', 'SC14D9C', 'SC14D9F', 'SD', 'SDR', 'SE', 'SEC_ACTION', 'SEC_STAFF_ACTION', 'SEC_STAFF_LETTER', 'SF-1', 'SF-3', 'SL', 'SP_15D2', 'STOP_ORDER', 'SUPPL', 'T-3', 'TA-1', 'TA-2', 'TA-W', 'TACO', 'TH', 'TTW', 'UNDER', 'UPLOAD', 'WDL-REQ', 'X-17A-5']",
"type": "Union[Literal['1', '1-A', '1-A_POS', '1-A-W', '1-E', '1-E_AD', '1-K', '1-SA', '1-U', '1-Z', '1-Z-W', '10-12B', '10-12G', '10-D', '10-K', '10-KT', '10-Q', '10-QT', '11-K', '11-KT', '13F-HR', '13F-NT', '13FCONP', '144', '15-12B', '15-12G', '15-15D', '15F-12B', '15F-12G', '15F-15D', '18-12B', '18-K', '19B-4E', '2-A', '2-AF', '2-E', '20-F', '20FR12B', '20FR12G', '24F-2NT', '25', '25-NSE', '253G1', '253G2', '253G3', '253G4', '3', '305B2', '34-12H', '4', '40-17F1', '40-17F2', '40-17G', '40-17GCS', '40-202A', '40-203A', '40-206A', '40-24B2', '40-33', '40-6B', '40-8B25', '40-8F-2', '40-APP', '40-F', '40-OIP', '40FR12B', '40FR12G', '424A', '424B1', '424B2', '424B3', '424B4', '424B5', '424B7', '424B8', '424H', '425', '485APOS', '485BPOS', '485BXT', '486APOS', '486BPOS', '486BXT', '487', '497', '497AD', '497H2', '497J', '497K', '497VPI', '497VPU', '5', '6-K', '6B_NTC', '6B_ORDR', '8-A12B', '8-A12G', '8-K', '8-K12B', '8-K12G3', '8-K15D5', '8-M', '8F-2_NTC', '8F-2_ORDR', '9-M', 'ABS-15G', 'ABS-EE', 'ADN-MTL', 'ADV-E', 'ADV-H-C', 'ADV-H-T', 'ADV-NR', 'ANNLRPT', 'APP_NTC', 'APP_ORDR', 'APP_WD', 'APP_WDG', 'ARS', 'ATS-N', 'ATS-N-C', 'ATS-N/UA', 'AW', 'AW_WD', 'C', 'C-AR', 'C-AR-W', 'C-TR', 'C-TR-W', 'C-U', 'C-U-W', 'C-W', 'CB', 'CERT', 'CERTARCA', 'CERTBATS', 'CERTCBO', 'CERTNAS', 'CERTNYS', 'CERTPAC', 'CFPORTAL', 'CFPORTAL-W', 'CORRESP', 'CT_ORDER', 'D', 'DEF_14A', 'DEF_14C', 'DEFA14A', 'DEFA14C', 'DEFC14A', 'DEFC14C', 'DEFM14A', 'DEFM14C', 'DEFN14A', 'DEFR14A', 'DEFR14C', 'DEL_AM', 'DFAN14A', 'DFRN14A', 'DOS', 'DOSLTR', 'DRS', 'DRSLTR', 'DSTRBRPT', 'EFFECT', 'F-1', 'F-10', 'F-10EF', 'F-10POS', 'F-1MEF', 'F-3', 'F-3ASR', 'F-3D', 'F-3DPOS', 'F-3MEF', 'F-4', 'F-4_POS', 'F-4MEF', 'F-6', 'F-6_POS', 'F-6EF', 'F-7', 'F-7_POS', 'F-8', 'F-8_POS', 'F-80', 'F-80POS', 'F-9', 'F-9_POS', 'F-N', 'F-X', 'FOCUSN', 'FWP', 'G-405', 'G-405N', 'G-FIN', 'G-FINW', 'IRANNOTICE', 'MA', 'MA-A', 'MA-I', 'MA-W', 'MSD', 'MSDCO', 'MSDW', 'N-1', 'N-14', 'N-14_8C', 'N-14MEF', 'N-18F1', 'N-1A', 'N-2', 'N-2_POSASR', 'N-23C-2', 'N-23C3A', 'N-23C3B', 'N-23C3C', 'N-2ASR', 'N-2MEF', 'N-30B-2', 'N-30D', 'N-4', 'N-5', 'N-54A', 'N-54C', 'N-6', 'N-6F', 'N-8A', 'N-8B-2', 'N-8F', 'N-8F_NTC', 'N-8F_ORDR', 'N-CEN', 'N-CR', 'N-CSR', 'N-CSRS', 'N-MFP', 'N-MFP1', 'N-MFP2', 'N-PX', 'N-Q', 'N-VP', 'N-VPFS', 'NO_ACT', 'NPORT-EX', 'NPORT-NP', 'NPORT-P', 'NRSRO-CE', 'NRSRO-UPD', 'NSAR-A', 'NSAR-AT', 'NSAR-B', 'NSAR-BT', 'NSAR-U', 'NT_10-D', 'NT_10-K', 'NT_10-Q', 'NT_11-K', 'NT_20-F', 'NT_N-CEN', 'NT_N-MFP', 'NT_N-MFP1', 'NT_N-MFP2', 'NT_NPORT-EX', 'NT_NPORT-P', 'NT-NCEN', 'NT-NCSR', 'NT-NSAR', 'NTFNCEN', 'NTFNCSR', 'NTFNSAR', 'NTN_10D', 'NTN_10K', 'NTN_10Q', 'NTN_20F', 'OIP_NTC', 'OIP_ORDR', 'POS_8C', 'POS_AM', 'POS_AMI', 'POS_EX', 'POS462B', 'POS462C', 'POSASR', 'PRE_14A', 'PRE_14C', 'PREC14A', 'PREC14C', 'PREM14A', 'PREM14C', 'PREN14A', 'PRER14A', 'PRER14C', 'PRRN14A', 'PX14A6G', 'PX14A6N', 'QRTLYRPT', 'QUALIF', 'REG-NR', 'REVOKED', 'RW', 'RW_WD', 'S-1', 'S-11', 'S-11MEF', 'S-1MEF', 'S-20', 'S-3', 'S-3ASR', 'S-3D', 'S-3DPOS', 'S-3MEF', 'S-4', 'S-4_POS', 'S-4EF', 'S-4MEF', 'S-6', 'S-8', 'S-8_POS', 'S-B', 'S-BMEF', 'SBSE', 'SBSE-A', 'SBSE-BD', 'SBSE-C', 'SBSE-W', 'SC_13D', 'SC_13E1', 'SC_13E3', 'SC_13G', 'SC_14D9', 'SC_14F1', 'SC_14N', 'SC_TO-C', 'SC_TO-I', 'SC_TO-T', 'SC13E4F', 'SC14D1F', 'SC14D9C', 'SC14D9F', 'SD', 'SDR', 'SE', 'SEC_ACTION', 'SEC_STAFF_ACTION', 'SEC_STAFF_LETTER', 'SF-1', 'SF-3', 'SL', 'SP_15D2', 'STOP_ORDER', 'SUPPL', 'T-3', 'TA-1', 'TA-2', 'TA-W', 'TACO', 'TH', 'TTW', 'UNDER', 'UPLOAD', 'WDL-REQ', 'X-17A-5'], str]",
"description": "Type of the SEC filing form.",
"default": null,
"optional": true,
@@ -23997,6 +24360,22 @@
"optional": true,
"choices": null
},
{
"name": "start_date",
"type": "Union[date, str]",
"description": "Start date of the data, in YYYY-MM-DD format.",
"default": null,
"optional": true,
"choices": null
},
{
"name": "end_date",
"type": "Union[date, str]",
"description": "End date of the data, in YYYY-MM-DD format.",
"default": null,
"optional": true,
"choices": null
},
{
"name": "use_cache",
"type": "bool",

View File

@@ -1197,9 +1197,9 @@ class ROUTER_equity_fundamental(Container):
Optional[str], OpenBBField(description="Symbol to get data for.")
] = None,
form_type: Annotated[
Optional[str],
Union[str, None, List[Optional[str]]],
OpenBBField(
description="Filter by form type. Check the data provider for available types."
description="Filter by form type. Check the data provider for available types. Multiple comma separated items allowed for provider(s): sec."
),
] = None,
limit: Annotated[
@@ -1225,16 +1225,16 @@ class ROUTER_equity_fundamental(Container):
----------
symbol : Optional[str]
Symbol to get data for.
form_type : Optional[str]
Filter by form type. Check the data provider for available types.
form_type : Union[str, None, List[Optional[str]]]
Filter by form type. Check the data provider for available types. Multiple comma separated items allowed for provider(s): sec.
limit : int
The number of data entries to return.
provider : Optional[Literal['fmp', 'intrinio', 'sec']]
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: fmp, intrinio, sec.
start_date : Optional[datetime.date]
Start date of the data, in YYYY-MM-DD format. (provider: intrinio)
Start date of the data, in YYYY-MM-DD format. (provider: intrinio, sec)
end_date : Optional[datetime.date]
End date of the data, in YYYY-MM-DD format. (provider: intrinio)
End date of the data, in YYYY-MM-DD format. (provider: intrinio, sec)
thea_enabled : Optional[bool]
Return filings that have been read by Intrinio's Thea NLP. (provider: intrinio)
cik : Optional[Union[int, str]]
@@ -1334,6 +1334,377 @@ class ROUTER_equity_fundamental(Container):
"limit": limit,
},
extra_params=kwargs,
info={
"form_type": {
"sec": {
"multiple_items_allowed": True,
"choices": [
"1",
"1-A",
"1-A_POS",
"1-A-W",
"1-E",
"1-E_AD",
"1-K",
"1-SA",
"1-U",
"1-Z",
"1-Z-W",
"10-12B",
"10-12G",
"10-D",
"10-K",
"10-KT",
"10-Q",
"10-QT",
"11-K",
"11-KT",
"13F-HR",
"13F-NT",
"13FCONP",
"144",
"15-12B",
"15-12G",
"15-15D",
"15F-12B",
"15F-12G",
"15F-15D",
"18-12B",
"18-K",
"19B-4E",
"2-A",
"2-AF",
"2-E",
"20-F",
"20FR12B",
"20FR12G",
"24F-2NT",
"25",
"25-NSE",
"253G1",
"253G2",
"253G3",
"253G4",
"3",
"305B2",
"34-12H",
"4",
"40-17F1",
"40-17F2",
"40-17G",
"40-17GCS",
"40-202A",
"40-203A",
"40-206A",
"40-24B2",
"40-33",
"40-6B",
"40-8B25",
"40-8F-2",
"40-APP",
"40-F",
"40-OIP",
"40FR12B",
"40FR12G",
"424A",
"424B1",
"424B2",
"424B3",
"424B4",
"424B5",
"424B7",
"424B8",
"424H",
"425",
"485APOS",
"485BPOS",
"485BXT",
"486APOS",
"486BPOS",
"486BXT",
"487",
"497",
"497AD",
"497H2",
"497J",
"497K",
"497VPI",
"497VPU",
"5",
"6-K",
"6B_NTC",
"6B_ORDR",
"8-A12B",
"8-A12G",
"8-K",
"8-K12B",
"8-K12G3",
"8-K15D5",
"8-M",
"8F-2_NTC",
"8F-2_ORDR",
"9-M",
"ABS-15G",
"ABS-EE",
"ADN-MTL",
"ADV-E",
"ADV-H-C",
"ADV-H-T",
"ADV-NR",
"ANNLRPT",
"APP_NTC",
"APP_ORDR",
"APP_WD",
"APP_WDG",
"ARS",
"ATS-N",
"ATS-N-C",
"ATS-N/UA",
"AW",
"AW_WD",
"C",
"C-AR",
"C-AR-W",
"C-TR",
"C-TR-W",
"C-U",
"C-U-W",
"C-W",
"CB",
"CERT",
"CERTARCA",
"CERTBATS",
"CERTCBO",
"CERTNAS",
"CERTNYS",
"CERTPAC",
"CFPORTAL",
"CFPORTAL-W",
"CORRESP",
"CT_ORDER",
"D",
"DEF_14A",
"DEF_14C",
"DEFA14A",
"DEFA14C",
"DEFC14A",
"DEFC14C",
"DEFM14A",
"DEFM14C",
"DEFN14A",
"DEFR14A",
"DEFR14C",
"DEL_AM",
"DFAN14A",
"DFRN14A",
"DOS",
"DOSLTR",
"DRS",
"DRSLTR",
"DSTRBRPT",
"EFFECT",
"F-1",
"F-10",
"F-10EF",
"F-10POS",
"F-1MEF",
"F-3",
"F-3ASR",
"F-3D",
"F-3DPOS",
"F-3MEF",
"F-4",
"F-4_POS",
"F-4MEF",
"F-6",
"F-6_POS",
"F-6EF",
"F-7",
"F-7_POS",
"F-8",
"F-8_POS",
"F-80",
"F-80POS",
"F-9",
"F-9_POS",
"F-N",
"F-X",
"FOCUSN",
"FWP",
"G-405",
"G-405N",
"G-FIN",
"G-FINW",
"IRANNOTICE",
"MA",
"MA-A",
"MA-I",
"MA-W",
"MSD",
"MSDCO",
"MSDW",
"N-1",
"N-14",
"N-14_8C",
"N-14MEF",
"N-18F1",
"N-1A",
"N-2",
"N-2_POSASR",
"N-23C-2",
"N-23C3A",
"N-23C3B",
"N-23C3C",
"N-2ASR",
"N-2MEF",
"N-30B-2",
"N-30D",
"N-4",
"N-5",
"N-54A",
"N-54C",
"N-6",
"N-6F",
"N-8A",
"N-8B-2",
"N-8F",
"N-8F_NTC",
"N-8F_ORDR",
"N-CEN",
"N-CR",
"N-CSR",
"N-CSRS",
"N-MFP",
"N-MFP1",
"N-MFP2",
"N-PX",
"N-Q",
"N-VP",
"N-VPFS",
"NO_ACT",
"NPORT-EX",
"NPORT-NP",
"NPORT-P",
"NRSRO-CE",
"NRSRO-UPD",
"NSAR-A",
"NSAR-AT",
"NSAR-B",
"NSAR-BT",
"NSAR-U",
"NT_10-D",
"NT_10-K",
"NT_10-Q",
"NT_11-K",
"NT_20-F",
"NT_N-CEN",
"NT_N-MFP",
"NT_N-MFP1",
"NT_N-MFP2",
"NT_NPORT-EX",
"NT_NPORT-P",
"NT-NCEN",
"NT-NCSR",
"NT-NSAR",
"NTFNCEN",
"NTFNCSR",
"NTFNSAR",
"NTN_10D",
"NTN_10K",
"NTN_10Q",
"NTN_20F",
"OIP_NTC",
"OIP_ORDR",
"POS_8C",
"POS_AM",
"POS_AMI",
"POS_EX",
"POS462B",
"POS462C",
"POSASR",
"PRE_14A",
"PRE_14C",
"PREC14A",
"PREC14C",
"PREM14A",
"PREM14C",
"PREN14A",
"PRER14A",
"PRER14C",
"PRRN14A",
"PX14A6G",
"PX14A6N",
"QRTLYRPT",
"QUALIF",
"REG-NR",
"REVOKED",
"RW",
"RW_WD",
"S-1",
"S-11",
"S-11MEF",
"S-1MEF",
"S-20",
"S-3",
"S-3ASR",
"S-3D",
"S-3DPOS",
"S-3MEF",
"S-4",
"S-4_POS",
"S-4EF",
"S-4MEF",
"S-6",
"S-8",
"S-8_POS",
"S-B",
"S-BMEF",
"SBSE",
"SBSE-A",
"SBSE-BD",
"SBSE-C",
"SBSE-W",
"SC_13D",
"SC_13E1",
"SC_13E3",
"SC_13G",
"SC_14D9",
"SC_14F1",
"SC_14N",
"SC_TO-C",
"SC_TO-I",
"SC_TO-T",
"SC13E4F",
"SC14D1F",
"SC14D9C",
"SC14D9F",
"SD",
"SDR",
"SE",
"SEC_ACTION",
"SEC_STAFF_ACTION",
"SEC_STAFF_LETTER",
"SF-1",
"SF-3",
"SL",
"SP_15D2",
"STOP_ORDER",
"SUPPL",
"T-3",
"TA-1",
"TA-2",
"TA-W",
"TACO",
"TH",
"TTW",
"UNDER",
"UPLOAD",
"WDL-REQ",
"X-17A-5",
],
}
}
},
)
)

View File

@@ -7,6 +7,7 @@ from datetime import (
datetime,
)
from typing import Any, Dict, List, Optional, Union
from warnings import warn
from openbb_core.app.model.abstract.error import OpenBBError
from openbb_core.provider.abstract.fetcher import Fetcher
@@ -16,7 +17,7 @@ from openbb_core.provider.standard_models.company_filings import (
)
from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS
from openbb_core.provider.utils.errors import EmptyDataError
from openbb_sec.utils.definitions import FORM_TYPES, HEADERS
from openbb_sec.utils.definitions import FORM_LIST, FORM_TYPES, HEADERS
from pydantic import Field, field_validator
@@ -26,6 +27,13 @@ class SecCompanyFilingsQueryParams(CompanyFilingsQueryParams):
Source: https://sec.gov/
"""
__json_schema_extra__ = {
"form_type": {
"multiple_items_allowed": True,
"choices": FORM_LIST,
}
}
symbol: Optional[str] = Field(
description=QUERY_DESCRIPTIONS.get("symbol", ""),
default=None,
@@ -34,7 +42,15 @@ class SecCompanyFilingsQueryParams(CompanyFilingsQueryParams):
description="Lookup filings by Central Index Key (CIK) instead of by symbol.",
default=None,
)
form_type: Optional[FORM_TYPES] = Field(
start_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("start_date", ""),
)
end_date: Optional[dateType] = Field(
default=None,
description=QUERY_DESCRIPTIONS.get("end_date", ""),
)
form_type: Optional[Union[FORM_TYPES, str]] = Field(
description="Type of the SEC filing form.",
default=None,
)
@@ -43,6 +59,34 @@ class SecCompanyFilingsQueryParams(CompanyFilingsQueryParams):
default=True,
)
@field_validator("form_type", mode="before", check_fields=False)
@classmethod
def validate_form_type(cls, v):
"""Validate form_type."""
if not v:
return None
if isinstance(v, str):
forms = v.split(",")
elif isinstance(v, list):
forms = v
else:
raise OpenBBError("Unexpected form_type value.")
new_forms: list = []
messages: list = []
for form in forms:
if form.upper().replace("_", " ") in FORM_LIST:
new_forms.append(form.upper().replace("_", " "))
else:
messages.append(f"Invalid form type: {form}")
if not new_forms:
raise OpenBBError(f"No valid forms provided -> {', '.join(messages)}")
if new_forms and messages:
warn("\n ".join(messages))
return ",".join(new_forms) if len(new_forms) > 1 else new_forms[0]
class SecCompanyFilingsData(CompanyFilingsData):
"""SEC Company Filings Data."""
@@ -239,7 +283,7 @@ class SecCompanyFilingsFetcher(
) -> List[SecCompanyFilingsData]:
"""Transform the data."""
# pylint: disable=import-outside-toplevel
from pandas import DataFrame
from pandas import DataFrame, to_datetime
if not data:
raise EmptyDataError(
@@ -267,7 +311,13 @@ class SecCompanyFilingsFetcher(
.replace("N/A", None)
.astype(str)
)
filings["reportDate"] = to_datetime(filings["reportDate"]).dt.date
filings["filingDate"] = to_datetime(filings["filingDate"]).dt.date
filings = filings.sort_values(by=["reportDate", "filingDate"], ascending=False)
if query.start_date:
filings = filings[filings["reportDate"] >= query.start_date]
if query.end_date:
filings = filings[filings["reportDate"] <= query.end_date]
base_url = f"https://www.sec.gov/Archives/edgar/data/{query.cik}/"
filings["primaryDocumentUrl"] = (
base_url
@@ -282,7 +332,11 @@ class SecCompanyFilingsFetcher(
base_url + filings["accessionNumber"] + "-index.htm"
)
if query.form_type:
filings = filings[filings["form"] == query.form_type.replace("_", " ")]
form_types = query.form_type.replace("_", " ").replace(",", "|")
filings = filings[
filings.form.str.contains(form_types, case=False, regex=True, na=False)
]
if query.limit:
filings = filings.head(query.limit) if query.limit != 0 else filings

View File

@@ -1,5 +1,7 @@
"""SEC Definitions and Models."""
# pylint: disable=too-many-lines
from typing import Dict, Literal
QUARTERS = Literal[1, 2, 3, 4]
@@ -383,6 +385,371 @@ FORM_TYPES = Literal[
"X-17A-5",
]
FORM_LIST = [
"1",
"1-A",
"1-A_POS",
"1-A-W",
"1-E",
"1-E_AD",
"1-K",
"1-SA",
"1-U",
"1-Z",
"1-Z-W",
"10-12B",
"10-12G",
"10-D",
"10-K",
"10-KT",
"10-Q",
"10-QT",
"11-K",
"11-KT",
"13F-HR",
"13F-NT",
"13FCONP",
"144",
"15-12B",
"15-12G",
"15-15D",
"15F-12B",
"15F-12G",
"15F-15D",
"18-12B",
"18-K",
"19B-4E",
"2-A",
"2-AF",
"2-E",
"20-F",
"20FR12B",
"20FR12G",
"24F-2NT",
"25",
"25-NSE",
"253G1",
"253G2",
"253G3",
"253G4",
"3",
"305B2",
"34-12H",
"4",
"40-17F1",
"40-17F2",
"40-17G",
"40-17GCS",
"40-202A",
"40-203A",
"40-206A",
"40-24B2",
"40-33",
"40-6B",
"40-8B25",
"40-8F-2",
"40-APP",
"40-F",
"40-OIP",
"40FR12B",
"40FR12G",
"424A",
"424B1",
"424B2",
"424B3",
"424B4",
"424B5",
"424B7",
"424B8",
"424H",
"425",
"485APOS",
"485BPOS",
"485BXT",
"486APOS",
"486BPOS",
"486BXT",
"487",
"497",
"497AD",
"497H2",
"497J",
"497K",
"497VPI",
"497VPU",
"5",
"6-K",
"6B_NTC",
"6B_ORDR",
"8-A12B",
"8-A12G",
"8-K",
"8-K12B",
"8-K12G3",
"8-K15D5",
"8-M",
"8F-2_NTC",
"8F-2_ORDR",
"9-M",
"ABS-15G",
"ABS-EE",
"ADN-MTL",
"ADV-E",
"ADV-H-C",
"ADV-H-T",
"ADV-NR",
"ANNLRPT",
"APP_NTC",
"APP_ORDR",
"APP_WD",
"APP_WDG",
"ARS",
"ATS-N",
"ATS-N-C",
"ATS-N/UA",
"AW",
"AW_WD",
"C",
"C-AR",
"C-AR-W",
"C-TR",
"C-TR-W",
"C-U",
"C-U-W",
"C-W",
"CB",
"CERT",
"CERTARCA",
"CERTBATS",
"CERTCBO",
"CERTNAS",
"CERTNYS",
"CERTPAC",
"CFPORTAL",
"CFPORTAL-W",
"CORRESP",
"CT_ORDER",
"D",
"DEF_14A",
"DEF_14C",
"DEFA14A",
"DEFA14C",
"DEFC14A",
"DEFC14C",
"DEFM14A",
"DEFM14C",
"DEFN14A",
"DEFR14A",
"DEFR14C",
"DEL_AM",
"DFAN14A",
"DFRN14A",
"DOS",
"DOSLTR",
"DRS",
"DRSLTR",
"DSTRBRPT",
"EFFECT",
"F-1",
"F-10",
"F-10EF",
"F-10POS",
"F-1MEF",
"F-3",
"F-3ASR",
"F-3D",
"F-3DPOS",
"F-3MEF",
"F-4",
"F-4_POS",
"F-4MEF",
"F-6",
"F-6_POS",
"F-6EF",
"F-7",
"F-7_POS",
"F-8",
"F-8_POS",
"F-80",
"F-80POS",
"F-9",
"F-9_POS",
"F-N",
"F-X",
"FOCUSN",
"FWP",
"G-405",
"G-405N",
"G-FIN",
"G-FINW",
"IRANNOTICE",
"MA",
"MA-A",
"MA-I",
"MA-W",
"MSD",
"MSDCO",
"MSDW",
"N-1",
"N-14",
"N-14_8C",
"N-14MEF",
"N-18F1",
"N-1A",
"N-2",
"N-2_POSASR",
"N-23C-2",
"N-23C3A",
"N-23C3B",
"N-23C3C",
"N-2ASR",
"N-2MEF",
"N-30B-2",
"N-30D",
"N-4",
"N-5",
"N-54A",
"N-54C",
"N-6",
"N-6F",
"N-8A",
"N-8B-2",
"N-8F",
"N-8F_NTC",
"N-8F_ORDR",
"N-CEN",
"N-CR",
"N-CSR",
"N-CSRS",
"N-MFP",
"N-MFP1",
"N-MFP2",
"N-PX",
"N-Q",
"N-VP",
"N-VPFS",
"NO_ACT",
"NPORT-EX",
"NPORT-NP",
"NPORT-P",
"NRSRO-CE",
"NRSRO-UPD",
"NSAR-A",
"NSAR-AT",
"NSAR-B",
"NSAR-BT",
"NSAR-U",
"NT_10-D",
"NT_10-K",
"NT_10-Q",
"NT_11-K",
"NT_20-F",
"NT_N-CEN",
"NT_N-MFP",
"NT_N-MFP1",
"NT_N-MFP2",
"NT_NPORT-EX",
"NT_NPORT-P",
"NT-NCEN",
"NT-NCSR",
"NT-NSAR",
"NTFNCEN",
"NTFNCSR",
"NTFNSAR",
"NTN_10D",
"NTN_10K",
"NTN_10Q",
"NTN_20F",
"OIP_NTC",
"OIP_ORDR",
"POS_8C",
"POS_AM",
"POS_AMI",
"POS_EX",
"POS462B",
"POS462C",
"POSASR",
"PRE_14A",
"PRE_14C",
"PREC14A",
"PREC14C",
"PREM14A",
"PREM14C",
"PREN14A",
"PRER14A",
"PRER14C",
"PRRN14A",
"PX14A6G",
"PX14A6N",
"QRTLYRPT",
"QUALIF",
"REG-NR",
"REVOKED",
"RW",
"RW_WD",
"S-1",
"S-11",
"S-11MEF",
"S-1MEF",
"S-20",
"S-3",
"S-3ASR",
"S-3D",
"S-3DPOS",
"S-3MEF",
"S-4",
"S-4_POS",
"S-4EF",
"S-4MEF",
"S-6",
"S-8",
"S-8_POS",
"S-B",
"S-BMEF",
"SBSE",
"SBSE-A",
"SBSE-BD",
"SBSE-C",
"SBSE-W",
"SC_13D",
"SC_13E1",
"SC_13E3",
"SC_13G",
"SC_14D9",
"SC_14F1",
"SC_14N",
"SC_TO-C",
"SC_TO-I",
"SC_TO-T",
"SC13E4F",
"SC14D1F",
"SC14D9C",
"SC14D9F",
"SD",
"SDR",
"SE",
"SEC_ACTION",
"SEC_STAFF_ACTION",
"SEC_STAFF_LETTER",
"SF-1",
"SF-3",
"SL",
"SP_15D2",
"STOP_ORDER",
"SUPPL",
"T-3",
"TA-1",
"TA-2",
"TA-W",
"TACO",
"TH",
"TTW",
"UNDER",
"UPLOAD",
"WDL-REQ",
"X-17A-5",
]
TAXONOMIES = Literal["us-gaap", "dei", "ifrs-full", "srt"]
FACTS = [