earningscall 0.0.7__py3-none-any.whl → 0.0.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- earningscall/__init__.py +1 -1
- earningscall/api.py +15 -7
- earningscall/errors.py +0 -4
- earningscall/event.py +1 -1
- earningscall/exports.py +9 -5
- earningscall/symbols.py +2 -2
- earningscall/transcript.py +1 -0
- earningscall/utils.py +13 -0
- {earningscall-0.0.7.dist-info → earningscall-0.0.9.dist-info}/METADATA +11 -4
- earningscall-0.0.9.dist-info/RECORD +14 -0
- earningscall-0.0.7.dist-info/RECORD +0 -14
- {earningscall-0.0.7.dist-info → earningscall-0.0.9.dist-info}/WHEEL +0 -0
- {earningscall-0.0.7.dist-info → earningscall-0.0.9.dist-info}/licenses/LICENSE +0 -0
earningscall/__init__.py
CHANGED
earningscall/api.py
CHANGED
@@ -2,9 +2,9 @@ import logging
|
|
2
2
|
import os
|
3
3
|
from typing import Optional
|
4
4
|
|
5
|
-
import earningscall
|
6
5
|
import requests
|
7
6
|
|
7
|
+
import earningscall
|
8
8
|
|
9
9
|
log = logging.getLogger(__file__)
|
10
10
|
|
@@ -19,6 +19,10 @@ def get_api_key():
|
|
19
19
|
return api_key
|
20
20
|
|
21
21
|
|
22
|
+
def api_key_param():
|
23
|
+
return {"apikey": get_api_key()}
|
24
|
+
|
25
|
+
|
22
26
|
def is_demo_account():
|
23
27
|
return get_api_key() == "demo"
|
24
28
|
|
@@ -28,7 +32,7 @@ def get_events(exchange: str,
|
|
28
32
|
|
29
33
|
log.debug(f"get_events exchange: {exchange} symbol: {symbol}")
|
30
34
|
params = {
|
31
|
-
|
35
|
+
**api_key_param(),
|
32
36
|
"exchange": exchange,
|
33
37
|
"symbol": symbol,
|
34
38
|
}
|
@@ -45,7 +49,7 @@ def get_transcript(exchange: str,
|
|
45
49
|
|
46
50
|
log.debug(f"get_transcript year: {year} quarter: {quarter}")
|
47
51
|
params = {
|
48
|
-
|
52
|
+
**api_key_param(),
|
49
53
|
"exchange": exchange,
|
50
54
|
"symbol": symbol,
|
51
55
|
"year": str(year),
|
@@ -65,10 +69,14 @@ def get_symbols_v1():
|
|
65
69
|
|
66
70
|
|
67
71
|
def get_symbols_v2():
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
response
|
72
|
+
response = requests.get(f"{API_BASE}/symbols-v2.txt", params=api_key_param())
|
73
|
+
if response.status_code != 200:
|
74
|
+
return None
|
75
|
+
return response.text
|
76
|
+
|
77
|
+
|
78
|
+
def get_sp500_companies_txt_file():
|
79
|
+
response = requests.get(f"{API_BASE}/symbols/sp500.txt", params=api_key_param())
|
72
80
|
if response.status_code != 200:
|
73
81
|
return None
|
74
82
|
return response.text
|
earningscall/errors.py
CHANGED
earningscall/event.py
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
import logging
|
2
|
-
from dataclasses import dataclass, field
|
3
2
|
from datetime import datetime
|
4
3
|
from typing import Optional
|
5
4
|
|
5
|
+
from dataclasses import dataclass, field
|
6
6
|
from dataclasses_json import config
|
7
7
|
from dataclasses_json import dataclass_json
|
8
8
|
from marshmallow import fields
|
earningscall/exports.py
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
from typing import Optional
|
2
2
|
|
3
|
-
from earningscall.
|
4
|
-
|
3
|
+
from earningscall.api import get_sp500_companies_txt_file
|
5
4
|
from earningscall.company import Company
|
5
|
+
from earningscall.symbols import get_symbols
|
6
6
|
|
7
7
|
|
8
8
|
def get_company(symbol: str) -> Optional[Company]:
|
@@ -18,6 +18,10 @@ def get_all_companies() -> [Company]:
|
|
18
18
|
|
19
19
|
|
20
20
|
def get_sp500_companies() -> [Company]:
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
resp = get_sp500_companies_txt_file()
|
22
|
+
if not resp:
|
23
|
+
return []
|
24
|
+
for ticker_symbol in resp.split("\n"):
|
25
|
+
company_info = get_symbols().lookup_company(ticker_symbol)
|
26
|
+
if company_info:
|
27
|
+
yield Company(company_info=company_info)
|
earningscall/symbols.py
CHANGED
@@ -129,8 +129,8 @@ class Symbols:
|
|
129
129
|
except KeyError:
|
130
130
|
pass
|
131
131
|
if is_demo_account():
|
132
|
-
raise InsufficientApiAccessError(f"
|
133
|
-
f"https://earningscall.biz/api-pricing")
|
132
|
+
raise InsufficientApiAccessError(f"\"{symbol}\" requires an API Key for access. To get your API Key,"
|
133
|
+
f" see: https://earningscall.biz/api-pricing")
|
134
134
|
return None
|
135
135
|
|
136
136
|
def remove_exchange_symbol(self, exchange_symbol: str):
|
earningscall/transcript.py
CHANGED
earningscall/utils.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import logging
|
2
2
|
import os
|
3
3
|
import pathlib
|
4
|
+
import sys
|
4
5
|
|
5
6
|
import earningscall
|
6
7
|
|
@@ -18,3 +19,15 @@ def data_path(file_name=None):
|
|
18
19
|
|
19
20
|
def enable_debug_logs():
|
20
21
|
logging.basicConfig(level=logging.DEBUG)
|
22
|
+
|
23
|
+
|
24
|
+
LOG_FORMAT = "[%(asctime)s] [%(levelname)8s] --- %(message)s (%(filename)s:%(lineno)s)"
|
25
|
+
|
26
|
+
|
27
|
+
def configure_sane_logging(level=logging.DEBUG):
|
28
|
+
# Manually set the following loggers to "INFO", since they tend to be VERY noisy, and when we are
|
29
|
+
# debugging our own application, we only care about DEBUG logs from OUR application, not these libs.
|
30
|
+
for name in ['urllib3']:
|
31
|
+
logging.getLogger(name).setLevel(logging.INFO)
|
32
|
+
logging.getLogger("filelock").setLevel(logging.WARNING)
|
33
|
+
logging.basicConfig(level=level, stream=sys.stdout, format=LOG_FORMAT)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: earningscall
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.9
|
4
4
|
Summary: The EarningsCall Python library.
|
5
5
|
Project-URL: Homepage, https://earningscall.biz
|
6
6
|
Project-URL: Documentation, https://github.com/EarningsCall/earningscall-python
|
@@ -44,7 +44,6 @@ pip install --upgrade earningscall
|
|
44
44
|
```python
|
45
45
|
from earningscall import get_company
|
46
46
|
|
47
|
-
|
48
47
|
company = get_company("aapl") # Lookup Apple, Inc by its ticker symbol, "AAPL"
|
49
48
|
|
50
49
|
transcript = company.get_transcript(year=2021, quarter=3)
|
@@ -64,13 +63,12 @@ Apple Inc. Q3 2021 Transcript Text: "Good day, and welcome to the Apple Q3 FY 20
|
|
64
63
|
```python
|
65
64
|
from earningscall import get_company
|
66
65
|
|
67
|
-
|
68
66
|
company = get_company("aapl") # Lookup Apple, Inc by its ticker symbol, "AAPL"
|
69
67
|
|
70
68
|
print(f"Getting all transcripts for: {company}..")
|
71
69
|
# Retrieve all earnings conference call events for a company, and iterate through each one
|
72
70
|
for event in company.events():
|
73
|
-
transcript = company.get_transcript(event) # Fetch the earnings call transcript for this event
|
71
|
+
transcript = company.get_transcript(event=event) # Fetch the earnings call transcript for this event
|
74
72
|
print(f"* Q{event.quarter} {event.year}")
|
75
73
|
if transcript:
|
76
74
|
print(f" Transcript Text: \"{transcript.text[:100]}...\"")
|
@@ -105,6 +103,15 @@ for company in get_all_companies():
|
|
105
103
|
print(f"{company.company_info} -- {company.company_info.sector} -- {company.company_info.industry}")
|
106
104
|
```
|
107
105
|
|
106
|
+
## List S&P 500 Companies
|
107
|
+
|
108
|
+
```python
|
109
|
+
from earningscall import get_all_companies
|
110
|
+
|
111
|
+
for company in get_all_companies():
|
112
|
+
print(f"{company.company_info} -- {company.company_info.sector} -- {company.company_info.industry}")
|
113
|
+
```
|
114
|
+
|
108
115
|
By default, this library grants you access to only two companies, Apple Inc. and Microsoft, Inc.
|
109
116
|
|
110
117
|
To gain access to 5,000+ companies please [signup here](https://earningscall.biz/api-pricing) to get your API key.
|
@@ -0,0 +1,14 @@
|
|
1
|
+
earningscall/__init__.py,sha256=cIuYT8auBFMdNGCv6maIL8XCdv10LYEJfh590H4bk58,179
|
2
|
+
earningscall/api.py,sha256=-nqxFGrTinCFCj8_wA-fkyrqr-WfDS50sMAh2UGdBR0,1958
|
3
|
+
earningscall/company.py,sha256=VyiHOajDBAx-G6dgWrPBUwWKjDpBvb0moZIpULPmiKA,1765
|
4
|
+
earningscall/errors.py,sha256=_m8CvAcyWQprdyTNzYjdoCX5nUZpEP7rG4c5-eLmxno,441
|
5
|
+
earningscall/event.py,sha256=Gdda4829tWlrlFn38r8KOaI-IJzf-ambiNojKyr9XtY,689
|
6
|
+
earningscall/exports.py,sha256=wA6d4-AJyT-0Wz8g_j-3rFHHhnXHx5V1GCsaPJMatFc,814
|
7
|
+
earningscall/sectors.py,sha256=9aw14krRzdLJSTFC72Nwk3MQaXAIgkTBk5S-KTiki3U,5946
|
8
|
+
earningscall/symbols.py,sha256=StqRc_C2hFdlhCMEKpytfUmsruCSHY0WPQQIVIejF9k,7748
|
9
|
+
earningscall/transcript.py,sha256=rLH2bGrrgUmS8XZGAPUP7msiIcL7f4ABmbnVJWXI28c,329
|
10
|
+
earningscall/utils.py,sha256=Qx8KhlumUdzyBSZRKMS6vpWlb8MGZpLKA4OffJaMdCE,1032
|
11
|
+
earningscall-0.0.9.dist-info/METADATA,sha256=n5_NDlAdDDj76qwCTJbZcgPYvQ7qM-XOQ9bLVFZHe6A,4437
|
12
|
+
earningscall-0.0.9.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
|
13
|
+
earningscall-0.0.9.dist-info/licenses/LICENSE,sha256=ktEB_UcRMg2cQlX9wiDs544xWncWizwS9mEZuGsCLrM,1069
|
14
|
+
earningscall-0.0.9.dist-info/RECORD,,
|
@@ -1,14 +0,0 @@
|
|
1
|
-
earningscall/__init__.py,sha256=HTwEYkAem1VAYHaNtsqWMC5O_UGZPELVMqzk6txCo3Q,179
|
2
|
-
earningscall/api.py,sha256=5_cdygmB-iyZH5ACLDmk5ctYqljKNXSe22FJ7Ws9Lfs,1751
|
3
|
-
earningscall/company.py,sha256=VyiHOajDBAx-G6dgWrPBUwWKjDpBvb0moZIpULPmiKA,1765
|
4
|
-
earningscall/errors.py,sha256=YTLkbhzWT_AURRL1IMlkkAKUiIW1L4V9Qh99bZnOtd8,488
|
5
|
-
earningscall/event.py,sha256=a5mcyfuCqPCopcKQUZ1HJyqHfAf-RNKnux_o68DIUHM,689
|
6
|
-
earningscall/exports.py,sha256=5mLO17Sf0XL8VnglIMIQy19riT2AYkZsyiN6nZ3q0Gk,641
|
7
|
-
earningscall/sectors.py,sha256=9aw14krRzdLJSTFC72Nwk3MQaXAIgkTBk5S-KTiki3U,5946
|
8
|
-
earningscall/symbols.py,sha256=fvqjnCbSAwfZB1dUrBUZFmJQ8C8V9uDzR0_C9RXMfIs,7722
|
9
|
-
earningscall/transcript.py,sha256=yMu3Eib_9by0vHZobDGQFqS4OZ3_4NnYgAk0cGDbfQM,328
|
10
|
-
earningscall/utils.py,sha256=wfwlSgFPPxr3GsFAsTjDNg_mLLK9V6p_2CwfetN5RR0,454
|
11
|
-
earningscall-0.0.7.dist-info/METADATA,sha256=aG7ZjmCuwA2JMnsDfExatqT0jf05zlbYwIw_gEsIEvQ,4206
|
12
|
-
earningscall-0.0.7.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
|
13
|
-
earningscall-0.0.7.dist-info/licenses/LICENSE,sha256=ktEB_UcRMg2cQlX9wiDs544xWncWizwS9mEZuGsCLrM,1069
|
14
|
-
earningscall-0.0.7.dist-info/RECORD,,
|
File without changes
|
File without changes
|