Beispiel #1
0
 def test_txt_urls_smoke(self, real_test_client):
     aapl = CompanyFilings(client=real_test_client,
                           cik_lookup="aapl",
                           filing_type=FilingType.FILING_10Q,
                           count=10)
     first_txt_url = aapl.get_urls()["aapl"][0]
     assert first_txt_url.split(".")[-1] == "txt"
Beispiel #2
0
def filing(ctx, lookups, ftype, start, end, count, directory):
    r"""Click command for downloading filings. Run ``secedgar filing --help`` for info.

    \f

    Args:
        ctx (click.core.Context): Click context.
        lookups (str): Companies and tickers to include in filing download.
        ftype (str): String of FilingType enum.
        start (str): Start date for filings in YYYYMMDD format.
            Will implicitly default to first available filing.
        end (str): End date for filings in YYYYMMDD format.
            Will implicitly default to today.
        count (int): Number of filings to save per ticker/company.
        directory (str): Directory where files should be saved.
            Defaults to current working directory.

    Returns:
        None
    """
    # If given filing type is not valid enum, raise FilingTypeError
    try:
        ftype = FilingType[ftype]
    except KeyError:
        raise FilingTypeError()

    f = CompanyFilings(cik_lookup=lookups,
                       filing_type=ftype,
                       start_date=date_cleanup(start),
                       end_date=date_cleanup(end),
                       count=count,
                       user_agent=ctx.obj['user_agent'])
    f.save(directory=directory)
Beispiel #3
0
 def test_end_date_setter(self, date, expected):
     f = CompanyFilings("aapl",
                        FilingType.FILING_10Q,
                        start_date=datetime.datetime(2010, 1, 1),
                        end_date=datetime.datetime(2015, 1, 1))
     f.end_date = date
     assert f.end_date == date and f.params.get("dateb") == expected
Beispiel #4
0
 def test_save_no_filings_raises_error(self, tmp_data_directory,
                                       monkeypatch, no_urls):
     monkeypatch.setattr(CompanyFilings, "get_urls", lambda x: no_urls)
     f = CompanyFilings(cik_lookup="aapl",
                        filing_type=FilingType.FILING_10K)
     with pytest.raises(NoFilingsError):
         f.save(tmp_data_directory)
Beispiel #5
0
 def test_txt_urls(self, mock_cik_validator_get_single_cik,
                   mock_single_cik_filing):
     aapl = CompanyFilings(cik_lookup="aapl",
                           filing_type=FilingType.FILING_10Q,
                           count=10)
     first_txt_url = aapl.get_urls()["aapl"][0]
     assert first_txt_url.split(".")[-1] == "txt"
Beispiel #6
0
 def test_filing_save_multiple_ciks_smoke(self, tmp_data_directory,
                                          real_test_client):
     f = CompanyFilings(["aapl", "amzn", "msft"],
                        FilingType.FILING_10Q,
                        client=real_test_client,
                        count=3)
     f.save(tmp_data_directory)
     assert len(os.listdir(tmp_data_directory)) > 0
Beispiel #7
0
 def test_filing_save_single_cik_smoke(self, tmp_data_directory,
                                       real_test_client):
     f = CompanyFilings("aapl",
                        FilingType.FILING_10Q,
                        client=real_test_client,
                        count=3)
     f.save(tmp_data_directory)
     assert len(os.listdir(tmp_data_directory)) > 0
Beispiel #8
0
 def test_filing_simple_example_smoke(self, tmp_data_directory,
                                      mock_user_agent):
     my_filings = CompanyFilings(cik_lookup="IBM",
                                 filing_type=FilingType.FILING_10Q,
                                 user_agent=mock_user_agent)
     my_filings.save(tmp_data_directory)
     assert len(os.listdir(tmp_data_directory)
                ) > 0, "No file or directory created after save."
Beispiel #9
0
 def test_filing_save_multiple_ciks(self, tmp_data_directory,
                                    mock_cik_validator_get_multiple_ciks,
                                    mock_single_cik_filing,
                                    mock_filing_response):
     f = CompanyFilings(["aapl", "amzn", "msft"],
                        FilingType.FILING_10Q,
                        count=3)
     f.save(tmp_data_directory)
Beispiel #10
0
 def test_end_date_setter(self, mock_user_agent, date, expected):
     f = CompanyFilings(cik_lookup="aapl",
                        user_agent=mock_user_agent,
                        filing_type=FilingType.FILING_10Q,
                        start_date=datetime.datetime(2010, 1, 1),
                        end_date=datetime.datetime(2015, 1, 1))
     f.end_date = date
     assert f.end_date == date and f.params.get("dateb") == expected
Beispiel #11
0
 def test_filing_get_urls_returns_single_list_of_urls(
         self, mock_cik_validator_get_multiple_ciks,
         mock_single_cik_filing):
     # Uses same response for filing links (will all be filings for aapl)
     f = CompanyFilings(cik_lookup=["aapl", "msft", "amzn"],
                        filing_type=FilingType.FILING_10Q,
                        count=5)
     assert all(
         len(f.get_urls().get(key)) == 5 for key in f.get_urls().keys())
Beispiel #12
0
 def test_filing_save_single_cik(self, tmp_data_directory, mock_user_agent,
                                 mock_cik_validator_get_single_cik,
                                 mock_single_cik_filing,
                                 mock_filing_response):
     f = CompanyFilings("aapl",
                        FilingType.FILING_10Q,
                        user_agent=mock_user_agent,
                        count=3)
     f.save(tmp_data_directory)
Beispiel #13
0
 def test_date_is_sanitized_when_changed(self):
     aapl = CompanyFilings(cik_lookup="aapl",
                           filing_type=FilingType.FILING_10Q,
                           count=10,
                           start_date="20150101")
     assert aapl.start_date == "20150101"
     aapl.start_date = datetime.datetime(2010, 1, 1)
     assert aapl.start_date == datetime.datetime(2010, 1, 1)
     assert aapl.params["datea"] == "20100101"
Beispiel #14
0
 def test_filing_returns_correct_number_of_urls(
         self, count, mock_cik_validator_get_multiple_ciks,
         mock_single_cik_filing):
     # Uses same response for filing links (will all be filings for aapl)
     f = CompanyFilings(cik_lookup=["aapl", "msft", "amzn"],
                        filing_type=FilingType.FILING_10Q,
                        count=count,
                        client=NetworkClient(batch_size=10))
     assert all(
         len(f.get_urls().get(key)) == count for key in f.get_urls().keys())
Beispiel #15
0
 def test__filter_filing_links(self, mock_user_agent,
                               mock_single_cik_filing):
     f = CompanyFilings(cik_lookup="aapl",
                        filing_type=FilingType.FILING_10Q,
                        user_agent=mock_user_agent)
     data = f.client.get_soup(
         "", {})  # Get mock data from mock_single_cik_filing
     links = f._filter_filing_links(data)
     assert len(links) == 10
     assert all(["BAD_LINK" not in link for link in links])
Beispiel #16
0
 def test_same_urls_fetched(self, mock_user_agent, mock_single_cik_filing):
     # mock_single_filing_cik has more than 10 URLs
     # using count = 5 should help test whether the same URLs
     # are fetched each time
     f = CompanyFilings(cik_lookup="aapl",
                        filing_type=FilingType.FILING_10Q,
                        user_agent=mock_user_agent,
                        count=5)
     first_urls = f.get_urls()
     second_urls = f.get_urls()
     assert all(f == s for f, s in zip(first_urls, second_urls))
Beispiel #17
0
 def test_end_date_change_to_none(self, mock_user_agent):
     end_date = datetime.date(2020, 1, 1)
     f = CompanyFilings(cik_lookup="aapl",
                        filing_type=FilingType.FILING_10Q,
                        user_agent=mock_user_agent,
                        end_date=end_date)
     assert f.end_date == end_date
     assert f.params["dateb"] == "20200101"
     f.end_date = None
     assert f.end_date is None
     assert "dateb" not in f.params
Beispiel #18
0
 def test_count_returns_exact(self, mock_cik_validator_get_single_cik,
                              mock_single_cik_filing):
     count = 10
     aapl = CompanyFilings(cik_lookup="aapl",
                           filing_type=FilingType.FILING_10Q,
                           count=count)
     urls = aapl.get_urls()["aapl"]
     if len(urls) != count:
         raise AssertionError(
             """Count should return exact number of filings.
                              Got {0}, but expected {1} URLs.""".format(
                 urls, count))
Beispiel #19
0
 def test_count_returns_exact(self, mock_user_agent,
                              mock_cik_validator_get_single_cik,
                              mock_single_cik_filing):
     count = 10
     aapl = CompanyFilings(user_agent=mock_user_agent,
                           cik_lookup="aapl",
                           filing_type=FilingType.FILING_10Q,
                           count=count)
     urls = aapl.get_urls()["aapl"]
     assert len(
         urls) == count, """Count should return exact number of filings.
                              Got {0}, but expected {1} URLs.""".format(
             urls, count)
Beispiel #20
0
    def test_good_ownership(self, mock_user_agent):
        shared_params = dict(
            cik_lookup="aapl",
            filing_type=FilingType.FILING_10Q,
            user_agent=mock_user_agent,
        )
        f_include = CompanyFilings(**shared_params, ownership="include")
        f_exclude = CompanyFilings(**shared_params, ownership="exclude")
        assert f_include.ownership == "include"
        assert f_exclude.ownership == "exclude"

        # Change ownership type
        f_include.ownership = "exclude"
        assert f_include.ownership == "exclude"
Beispiel #21
0
 def test_bad_start_date_setter_on_init(self, mock_user_agent,
                                        bad_start_date):
     with pytest.raises(TypeError):
         CompanyFilings(user_agent=mock_user_agent,
                        cik_lookup="aapl",
                        filing_type=FilingType.FILING_10Q,
                        start_date=bad_start_date)
Beispiel #22
0
 def test_count_setter_bad_values(self, mock_user_agent, count,
                                  expected_error):
     with pytest.raises(expected_error):
         CompanyFilings(user_agent=mock_user_agent,
                        cik_lookup="aapl",
                        filing_type=FilingType.FILING_10Q,
                        count=count)
Beispiel #23
0
 def test_filings_warning_lt_count(self, recwarn, count, raises_error,
                                   tmp_data_directory,
                                   mock_cik_validator_get_single_cik,
                                   mock_single_cik_filing_limited_responses,
                                   mock_filing_response):  # noqa:E501
     f = CompanyFilings(cik_lookup="aapl",
                        filing_type=FilingType.FILING_10Q,
                        count=count,
                        client=NetworkClient(batch_size=10))
     f.save(tmp_data_directory)
     if raises_error:
         w = recwarn.pop(UserWarning)
         assert issubclass(w.category, UserWarning)
     else:
         try:
             w = recwarn.pop(UserWarning)
             pytest.fail("Expected no UserWarning, but received one.")
         # Should raise assertion error since no UserWarning should be found
         except AssertionError:
             pass
Beispiel #24
0
 def test_date_is_sanitized(self):
     start_date = datetime.datetime(2012, 3, 1)
     end_date = datetime.datetime(2015, 1, 1)
     aapl = CompanyFilings(cik_lookup="aapl",
                           filing_type=FilingType.FILING_10Q,
                           count=10,
                           start_date=start_date,
                           end_date=end_date)
     assert aapl.params["dateb"] == "20150101"
     assert aapl.params["datea"] == "20120301"
     assert aapl.start_date == datetime.datetime(2012, 3, 1)
     assert aapl.end_date == datetime.datetime(2015, 1, 1)
Beispiel #25
0
 def test_invalid_filing_type_types(self, mock_user_agent, bad_filing_type):
     with pytest.raises(FilingTypeError):
         CompanyFilings(user_agent=mock_user_agent,
                        cik_lookup="0000320193",
                        filing_type=bad_filing_type)
Beispiel #26
0
 def test_client_property_set(self, mock_user_agent):
     aapl = CompanyFilings(
         cik_lookup="aapl",
         filing_type=FilingType.FILING_10Q,
         client=NetworkClient(user_agent=mock_user_agent))
     assert aapl.client.user_agent == mock_user_agent
Beispiel #27
0
 def test_user_agent_set_to_client(self, mock_user_agent):
     aapl = CompanyFilings(cik_lookup="aapl",
                           filing_type=FilingType.FILING_10Q,
                           user_agent=mock_user_agent)
     assert aapl.client.user_agent == mock_user_agent
Beispiel #28
0
 def test_user_agent_client_none(self):
     with pytest.raises(TypeError):
         _ = CompanyFilings(cik_lookup="aapl",
                            filing_type=FilingType.FILING_10Q,
                            user_agent=None,
                            client=None)
Beispiel #29
0
 def test_validate_cik_type_inside_filing(self, mock_user_agent,
                                          bad_cik_lookup):
     with pytest.raises(TypeError):
         CompanyFilings(user_agent=mock_user_agent,
                        cik_lookup=bad_cik_lookup,
                        filing_type=FilingType.FILING_10K)
Beispiel #30
0
 def test_ownership(self, bad_ownership, mock_user_agent):
     with pytest.raises(ValueError):
         CompanyFilings(cik_lookup="aapl",
                        filing_type=FilingType.FILING_10Q,
                        user_agent=mock_user_agent,
                        ownership=bad_ownership)