datamule 2.3.6__tar.gz → 2.3.8__tar.gz
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.
Potentially problematic release.
This version of datamule might be problematic. Click here for more details.
- {datamule-2.3.6 → datamule-2.3.8}/PKG-INFO +1 -1
- {datamule-2.3.6 → datamule-2.3.8}/datamule/submission/submission.py +19 -6
- {datamule-2.3.6 → datamule-2.3.8}/datamule.egg-info/PKG-INFO +1 -1
- {datamule-2.3.6 → datamule-2.3.8}/setup.py +1 -1
- {datamule-2.3.6 → datamule-2.3.8}/datamule/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/book/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/book/book.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/book/s3transfer.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/cloud/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/config.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/data/listed_filer_metadata.csv +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/datamule/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/datamule/datamule_lookup.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/datamule/datamule_mysql_rds.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/datamule/downloader.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/datamule/sec_connector.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/datasets.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/document/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/document/document.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/helper.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/index.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/mapping_dicts/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/mapping_dicts/html_mapping_dicts.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/mapping_dicts/txt_mapping_dicts.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/mapping_dicts/xml_mapping_dicts.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/package_updater.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/portfolio/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/portfolio/portfolio.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/portfolio/portfolio_compression_utils_legacy.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/infrastructure/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/infrastructure/submissions_metadata.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/submissions/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/submissions/downloader.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/submissions/eftsquery.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/submissions/monitor.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/submissions/streamer.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/submissions/textsearch.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/utils.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/xbrl/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/xbrl/downloadcompanyfacts.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/xbrl/filter_xbrl.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/xbrl/streamcompanyfacts.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sec/xbrl/xbrlmonitor.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/seclibrary/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/seclibrary/bq.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sheet/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/sheet/sheet.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/submission/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/submission/tar_submission.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tables/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tables/tables.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tables/tables_13fhr.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tables/tables_25nse.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tables/tables_informationtable.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tables/tables_npx.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tables/tables_ownership.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tables/tables_proxyvotingrecord.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tables/tables_sbsef.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tables/tables_sdr.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tables/utils.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tags/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tags/config.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tags/dictionaries.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tags/regex.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/tags/utils.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/utils/__init__.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/utils/construct_submissions_data.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/utils/format_accession.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule/utils/pdf.py +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule.egg-info/SOURCES.txt +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule.egg-info/dependency_links.txt +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule.egg-info/requires.txt +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/datamule.egg-info/top_level.txt +0 -0
- {datamule-2.3.6 → datamule-2.3.8}/setup.cfg +0 -0
|
@@ -6,14 +6,13 @@ from secsgml.parse_sgml import transform_metadata_string
|
|
|
6
6
|
from secsgml.utils import bytes_to_str
|
|
7
7
|
from ..sec.utils import headers
|
|
8
8
|
import tarfile
|
|
9
|
-
import zstandard as zstd
|
|
10
|
-
import gzip
|
|
11
9
|
import urllib.request
|
|
12
10
|
from secxbrl import parse_inline_xbrl
|
|
13
11
|
from company_fundamentals import construct_fundamentals
|
|
14
12
|
from decimal import Decimal
|
|
15
13
|
from ..utils.format_accession import format_accession
|
|
16
14
|
from .tar_submission import tar_submission
|
|
15
|
+
import zstandard as zstd
|
|
17
16
|
|
|
18
17
|
# probably needs rework later
|
|
19
18
|
class FundamentalsAccessor:
|
|
@@ -22,10 +21,19 @@ class FundamentalsAccessor:
|
|
|
22
21
|
self._cache = {}
|
|
23
22
|
self._all_data = None
|
|
24
23
|
|
|
25
|
-
def __getattr__(self,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
def __getattr__(self, name):
|
|
25
|
+
# Try as category first
|
|
26
|
+
try:
|
|
27
|
+
if name not in self._cache:
|
|
28
|
+
result = self.submission.parse_fundamentals(categories=[name])
|
|
29
|
+
if result: # Only cache if we got actual data
|
|
30
|
+
self._cache[name] = result
|
|
31
|
+
return result
|
|
32
|
+
except:
|
|
33
|
+
pass
|
|
34
|
+
|
|
35
|
+
# Fall back to dict behavior
|
|
36
|
+
return getattr(self._get_all_data(), name)
|
|
29
37
|
|
|
30
38
|
def _get_all_data(self):
|
|
31
39
|
if self._all_data is None:
|
|
@@ -98,6 +106,10 @@ class Submission:
|
|
|
98
106
|
|
|
99
107
|
if response.getcode() == 200:
|
|
100
108
|
sgml_content=response.read()
|
|
109
|
+
content_type = response.headers.get('Content-Type', '')
|
|
110
|
+
if content_type == 'application/zstd':
|
|
111
|
+
dctx = zstd.ZstdDecompressor()
|
|
112
|
+
sgml_content = dctx.decompress(sgml_content)
|
|
101
113
|
else:
|
|
102
114
|
raise ValueError(f"URL: {url}, Error: {response.getcode()}")
|
|
103
115
|
|
|
@@ -109,6 +121,7 @@ class Submission:
|
|
|
109
121
|
metadata = transform_metadata_string(metadata)
|
|
110
122
|
|
|
111
123
|
self.metadata = Document(type='submission_metadata', content=metadata, extension='.json',filing_date=None,accession=None,path=None)
|
|
124
|
+
|
|
112
125
|
self.filing_date= f"{self.metadata.content['filing-date'][:4]}-{self.metadata.content['filing-date'][4:6]}-{self.metadata.content['filing-date'][6:8]}"
|
|
113
126
|
|
|
114
127
|
self.documents_obj_list = []
|
|
@@ -32,7 +32,7 @@ if not os.path.exists(file_path):
|
|
|
32
32
|
setup(
|
|
33
33
|
name="datamule",
|
|
34
34
|
author="John Friedman",
|
|
35
|
-
version="2.3.
|
|
35
|
+
version="2.3.8",
|
|
36
36
|
description="Work with SEC submissions at scale.",
|
|
37
37
|
packages=find_packages(include=['datamule', 'datamule.*']),
|
|
38
38
|
url="https://github.com/john-friedman/datamule-python",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|