epstein-files 1.2.5__py3-none-any.whl → 1.4.1__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.
- epstein_files/__init__.py +32 -13
- epstein_files/documents/document.py +8 -1
- epstein_files/documents/email.py +179 -97
- epstein_files/documents/emails/email_header.py +17 -8
- epstein_files/documents/other_file.py +8 -6
- epstein_files/epstein_files.py +16 -1
- epstein_files/person.py +40 -15
- epstein_files/util/constant/names.py +10 -6
- epstein_files/util/constant/strings.py +2 -1
- epstein_files/util/constants.py +463 -225
- epstein_files/util/doc_cfg.py +33 -27
- epstein_files/util/env.py +10 -3
- epstein_files/util/file_helper.py +2 -0
- epstein_files/util/highlighted_group.py +66 -23
- epstein_files/util/output.py +17 -31
- epstein_files/util/rich.py +2 -1
- epstein_files/util/word_count.py +1 -1
- {epstein_files-1.2.5.dist-info → epstein_files-1.4.1.dist-info}/METADATA +3 -3
- epstein_files-1.4.1.dist-info/RECORD +34 -0
- {epstein_files-1.2.5.dist-info → epstein_files-1.4.1.dist-info}/entry_points.txt +1 -1
- epstein_files-1.2.5.dist-info/RECORD +0 -34
- {epstein_files-1.2.5.dist-info → epstein_files-1.4.1.dist-info}/LICENSE +0 -0
- {epstein_files-1.2.5.dist-info → epstein_files-1.4.1.dist-info}/WHEEL +0 -0
epstein_files/util/output.py
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import json
|
|
2
2
|
from os import unlink
|
|
3
|
+
from subprocess import CalledProcessError, check_output
|
|
3
4
|
from typing import cast
|
|
4
5
|
|
|
5
6
|
from rich.padding import Padding
|
|
6
7
|
|
|
7
8
|
from epstein_files.documents.document import Document
|
|
8
|
-
from epstein_files.documents.email import
|
|
9
|
+
from epstein_files.documents.email import Email
|
|
9
10
|
from epstein_files.documents.messenger_log import MessengerLog
|
|
10
11
|
from epstein_files.documents.other_file import FIRST_FEW_LINES, OtherFile
|
|
11
12
|
from epstein_files.epstein_files import EpsteinFiles, count_by_month
|
|
@@ -42,7 +43,6 @@ DEFAULT_EMAILERS = [
|
|
|
42
43
|
EHUD_BARAK,
|
|
43
44
|
STEVE_BANNON,
|
|
44
45
|
TYLER_SHEARS,
|
|
45
|
-
JIDE_ZEITLIN,
|
|
46
46
|
CHRISTINA_GALBRAITH,
|
|
47
47
|
MOHAMED_WAHEED_HASSAN,
|
|
48
48
|
JENNIFER_JACQUET,
|
|
@@ -53,31 +53,6 @@ DEFAULT_EMAILERS = [
|
|
|
53
53
|
JEFFREY_EPSTEIN,
|
|
54
54
|
]
|
|
55
55
|
|
|
56
|
-
INTERESTING_EMAIL_IDS = [
|
|
57
|
-
'032229', # Michael Wolff on strategy
|
|
58
|
-
'028784', # seminars: Money / Power
|
|
59
|
-
'030630', # 'What happens with zubair's project?'
|
|
60
|
-
'033178', # 'How is it going with Zubair?'
|
|
61
|
-
'022396', # Ukraine friend
|
|
62
|
-
'026505', # I know how dirty trump is
|
|
63
|
-
'029679', # Trump's driver was the bag man
|
|
64
|
-
'026258', '026260', # Bannon cripto coin issues
|
|
65
|
-
'032359', # Jabor e-currency
|
|
66
|
-
'031451', '031596', # "would you like photso of donald and girls in bikinis in my kitchen."
|
|
67
|
-
'031601', # Old gf i gave to donald
|
|
68
|
-
'030727', # David Stern "Death of chinese shareholder quite an issue. What can we do with Qataris here?"
|
|
69
|
-
'030725', # David Stern in Moscow
|
|
70
|
-
'029098', # Nowak, "her Skype contact is in moscow."
|
|
71
|
-
'030714', # Bannon, Russian Dugan shout out
|
|
72
|
-
'031659', # "i have met some very bad people „ none as bad as trump"
|
|
73
|
-
]
|
|
74
|
-
|
|
75
|
-
for id in INTERESTING_TRUNCATION_LENGTHS:
|
|
76
|
-
if id not in INTERESTING_EMAIL_IDS:
|
|
77
|
-
logger.debug(f"Adding INTERESTING_TRUNCATION_LENGTHS ID {id} to INTERESTING_EMAIL_IDS")
|
|
78
|
-
INTERESTING_EMAIL_IDS.append(id)
|
|
79
|
-
|
|
80
|
-
|
|
81
56
|
INTERESTING_TEXT_IDS = [
|
|
82
57
|
'027275', # "Crypto- Kerry- Qatar -sessions"
|
|
83
58
|
'027165', # melaniee walker crypto health
|
|
@@ -111,8 +86,17 @@ def print_emailers_info(epstein_files: EpsteinFiles) -> None:
|
|
|
111
86
|
svg_path = f"{EMAILERS_TABLE_PNG_PATH}.svg"
|
|
112
87
|
console.save_svg(svg_path, theme=HTML_TERMINAL_THEME, title="Epstein Emailers")
|
|
113
88
|
log_file_write(svg_path)
|
|
114
|
-
|
|
115
|
-
|
|
89
|
+
|
|
90
|
+
try:
|
|
91
|
+
# Inkscape is better at converting svg to png
|
|
92
|
+
inkscape_cmd_args = ['inkscape', f'--export-filename={EMAILERS_TABLE_PNG_PATH}', svg_path]
|
|
93
|
+
logger.warning(f"Running inkscape cmd: {' '.join(inkscape_cmd_args)}")
|
|
94
|
+
check_output(inkscape_cmd_args)
|
|
95
|
+
except (CalledProcessError, FileNotFoundError) as e:
|
|
96
|
+
logger.error(f"Failed to convert svg to png with inkscape, falling back to cairosvg: {e}")
|
|
97
|
+
import cairosvg
|
|
98
|
+
cairosvg.svg2png(url=svg_path, write_to=str(EMAILERS_TABLE_PNG_PATH))
|
|
99
|
+
|
|
116
100
|
log_file_write(EMAILERS_TABLE_PNG_PATH)
|
|
117
101
|
unlink(svg_path)
|
|
118
102
|
|
|
@@ -121,6 +105,7 @@ def print_emails_section(epstein_files: EpsteinFiles) -> list[Email]:
|
|
|
121
105
|
"""Returns emails that were printed (may contain dupes if printed for both author and recipient)."""
|
|
122
106
|
print_section_header(('Selections from ' if not args.all_emails else '') + 'His Emails')
|
|
123
107
|
all_emailers = sorted(epstein_files.emailers(), key=lambda person: person.earliest_email_at())
|
|
108
|
+
all_emails = Person.emails_from_people(all_emailers)
|
|
124
109
|
num_emails_printed_since_last_color_key = 0
|
|
125
110
|
printed_emails: list[Email] = []
|
|
126
111
|
people_to_print: list[Person]
|
|
@@ -157,7 +142,8 @@ def print_emails_section(epstein_files: EpsteinFiles) -> list[Email]:
|
|
|
157
142
|
|
|
158
143
|
# Print other interesting emails
|
|
159
144
|
printed_email_ids = [email.file_id for email in printed_emails]
|
|
160
|
-
extra_emails = [e for e in
|
|
145
|
+
extra_emails = [e for e in all_emails if e.is_interesting() and e.file_id not in printed_email_ids]
|
|
146
|
+
logger.warning(f"Found {len(extra_emails)} extra_emails...")
|
|
161
147
|
|
|
162
148
|
if len(extra_emails) > 0:
|
|
163
149
|
print_subtitle_panel(OTHER_INTERESTING_EMAILS_SUBTITLE)
|
|
@@ -308,7 +294,7 @@ def _verify_all_emails_were_printed(epstein_files: EpsteinFiles, already_printed
|
|
|
308
294
|
|
|
309
295
|
for email in epstein_files.non_duplicate_emails():
|
|
310
296
|
if email.file_id not in email_ids_that_were_printed:
|
|
311
|
-
logger.
|
|
297
|
+
logger.error(f"Failed to print {email.summary()}")
|
|
312
298
|
missed_an_email = True
|
|
313
299
|
|
|
314
300
|
if not missed_an_email:
|
epstein_files/util/rich.py
CHANGED
|
@@ -26,7 +26,7 @@ from epstein_files.util.logging import logger
|
|
|
26
26
|
|
|
27
27
|
TITLE_WIDTH = 50
|
|
28
28
|
SUBTITLE_WIDTH = 110
|
|
29
|
-
NUM_COLOR_KEY_COLS =
|
|
29
|
+
NUM_COLOR_KEY_COLS = 6
|
|
30
30
|
NA_TXT = Text(NA, style='dim')
|
|
31
31
|
SUBTITLE_PADDING = (2, 0, 1, 0)
|
|
32
32
|
GREY_NUMBERS = [58, 39, 39, 35, 30, 27, 23, 23, 19, 19, 15, 15, 15]
|
|
@@ -179,6 +179,7 @@ def print_title_page_header() -> None:
|
|
|
179
179
|
site_type = EMAIL if (args.all_emails or args.email_timeline) else TEXT_MESSAGE
|
|
180
180
|
title = f"This is the " + ('chronological ' if args.email_timeline else '') + f"Epstein {site_type.title()}s Page"
|
|
181
181
|
print_starred_header(title, num_spaces=9 if args.all_emails else 6, num_stars=14)
|
|
182
|
+
#print_centered(f"This page contains all of the text messages and a curated selection of emails and other files.", style='gray74')
|
|
182
183
|
print_centered(f"These documents come from the Nov. 2025 House Oversight Committee release.\n", style='gray74')
|
|
183
184
|
other_site_msg = "another page with" + (' all of' if other_site_type() == EMAIL else '')
|
|
184
185
|
other_site_msg += f" Epstein's {other_site_type()}s also generated by this code"
|
epstein_files/util/word_count.py
CHANGED
|
@@ -197,7 +197,7 @@ def write_word_counts_html() -> None:
|
|
|
197
197
|
email_subjects: set[str] = set()
|
|
198
198
|
word_count = WordCount()
|
|
199
199
|
# Remove dupes, junk mail, and fwded articles from emails
|
|
200
|
-
emails = [e for e in epstein_files.non_duplicate_emails() if
|
|
200
|
+
emails = [e for e in epstein_files.non_duplicate_emails() if e.is_word_count_worthy()]
|
|
201
201
|
|
|
202
202
|
for email in emails:
|
|
203
203
|
if args.names and email.author not in args.names:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: epstein-files
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.1
|
|
4
4
|
Summary: Tools for working with the Jeffrey Epstein documents released in November 2025.
|
|
5
5
|
Home-page: https://michelcrypt4d4mus.github.io/epstein_text_messages/
|
|
6
6
|
License: GPL-3.0-or-later
|
|
@@ -63,9 +63,9 @@ All the tools that come with the package require `EPSTEIN_DOCS_DIR` to be set. T
|
|
|
63
63
|
epstein_generate
|
|
64
64
|
|
|
65
65
|
# Search for a string:
|
|
66
|
-
|
|
66
|
+
epstein_grep Bannon
|
|
67
67
|
# Or a regex:
|
|
68
|
-
|
|
68
|
+
epstein_grep '\bSteve\s*Bannon|Jeffrey\s*Epstein\b'
|
|
69
69
|
|
|
70
70
|
# Show a file with color highlighting of keywords:
|
|
71
71
|
epstein_show 030999
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
epstein_files/__init__.py,sha256=VQnLS19hL3v9MON6S_09pD2aGIygGDjjVntUUVqjaNU,6836
|
|
2
|
+
epstein_files/documents/communication.py,sha256=QiCZ35R2ttlqcdovm5LBdGqgoj4xCcpl9ANqwlA9XGU,1752
|
|
3
|
+
epstein_files/documents/document.py,sha256=HR9B5cVZgevnZwEwCcLsIqKPq0_A1LgtL_bELAeF5jU,19938
|
|
4
|
+
epstein_files/documents/email.py,sha256=oyialVOKemU5SDVdoW740pAaMHCAbgBmGI_fZKxL60U,48365
|
|
5
|
+
epstein_files/documents/emails/email_header.py,sha256=1msEma11rAmqCIoAZvSNstdRPvhT0c-I422x44gnGpg,8153
|
|
6
|
+
epstein_files/documents/imessage/text_message.py,sha256=IexwwVeF14FZqD7IuK47bIHYam07ZcD3rxheVNULNkc,3394
|
|
7
|
+
epstein_files/documents/json_file.py,sha256=WcZW5NNqA67rHTdopbOGtup00muNaLlvrNgKb-K4zO8,1504
|
|
8
|
+
epstein_files/documents/messenger_log.py,sha256=1bv62WoQMKR3gYDrK9W3Xm7cqLbKrkRBV7NTFL2cexE,7349
|
|
9
|
+
epstein_files/documents/other_file.py,sha256=0abFRkwT-gcL90n8yvFwcP6Bt8ZrvHkXXWx6L0q7soU,9586
|
|
10
|
+
epstein_files/epstein_files.py,sha256=YLz0hIlbuFZcB0rgAJ5dfR7cAESMcYKFfncGp7fuF6A,14699
|
|
11
|
+
epstein_files/person.py,sha256=ag6J52UJgKSsKLev2aV-0TF2MpRoE-NvOIrBHUGHHCE,15819
|
|
12
|
+
epstein_files/util/constant/common_words.py,sha256=C1JERPnOGHV2UMC71aEue1i9QTQog-RfT3IzdcYQOYQ,3702
|
|
13
|
+
epstein_files/util/constant/html.py,sha256=MFooFV8KfFBCm9hL1u6A3hi_u37i7lL6UKAYoKQj3PI,1505
|
|
14
|
+
epstein_files/util/constant/names.py,sha256=YCyPiBGnwp9q7VGJUBnceROwZ-OhHtIOvHZN3q3bKp0,11582
|
|
15
|
+
epstein_files/util/constant/output_files.py,sha256=vxof85L-1GqSwss8XvLS3HZGguyWSzJkoJm1PrYYJ7g,2123
|
|
16
|
+
epstein_files/util/constant/strings.py,sha256=mjRMvUcBt4rJ18kauJ3PAe7fTmqhnfIWlrtcgDVShYw,2069
|
|
17
|
+
epstein_files/util/constant/urls.py,sha256=rFVU7824M1gAsmWLnAr-BBVOstlVwIsgyOlUWd1cdDk,6181
|
|
18
|
+
epstein_files/util/constants.py,sha256=MAs4dx4q29AYR0EocnQ_mbFpwt6oAqLgKiSmqHagFDE,137197
|
|
19
|
+
epstein_files/util/data.py,sha256=oZSrjzQSnXHtOlqxisodpH65cTGe57TfA3sZyQQzT7Q,3051
|
|
20
|
+
epstein_files/util/doc_cfg.py,sha256=d1qA4KzirY4hm89B-nMnTyupoZM_cy6pZmqFyLEv_t8,9370
|
|
21
|
+
epstein_files/util/env.py,sha256=A6LkZoMN-ocA89fjr53jKW4vT3jPdh4xmRY6ARoFWSk,7448
|
|
22
|
+
epstein_files/util/file_helper.py,sha256=icU2i2j547p2a8bdv1VaECX6ie-xUjZpoT0LAXwmnJQ,3140
|
|
23
|
+
epstein_files/util/highlighted_group.py,sha256=g9tiKnB31lQSoTVomh1QpYO71SFRr3wxmBSLnzt7TNc,63994
|
|
24
|
+
epstein_files/util/logging.py,sha256=pSLHGrUnPQGFMGYNIOTbZbCyy5dDOCbNrbNz22wIcZI,2099
|
|
25
|
+
epstein_files/util/output.py,sha256=JMBi3MxiwmbW0qvEqA2OGt3jkw1-O3QTIiinHs3twls,12666
|
|
26
|
+
epstein_files/util/rich.py,sha256=-0TfLLboj_3EQx2UEsah8pjcA2c5KYHxteyzzRwW1Xc,13874
|
|
27
|
+
epstein_files/util/search_result.py,sha256=1fxe0KPBQXBk4dLfu6m0QXIzYfZCzvaSkWqvghJGzxY,567
|
|
28
|
+
epstein_files/util/timer.py,sha256=GZHefXiPA-prK-1szC1cebl44Y-i4Wd3K8zedFpcggg,1373
|
|
29
|
+
epstein_files/util/word_count.py,sha256=VNEVVAV1UYZTMPX55p5IaXICV6PWv7bll_Fn9SUU4is,9201
|
|
30
|
+
epstein_files-1.4.1.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
31
|
+
epstein_files-1.4.1.dist-info/METADATA,sha256=6r5ANKvheFwjyGLWYJ1HTe0RIZxJ6MDjkIO5gqmql80,6218
|
|
32
|
+
epstein_files-1.4.1.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
|
|
33
|
+
epstein_files-1.4.1.dist-info/entry_points.txt,sha256=hyNFwhAw8zyGlBOxFu9beFGqfK3l8hOJvCK1DjUw1rA,236
|
|
34
|
+
epstein_files-1.4.1.dist-info/RECORD,,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[console_scripts]
|
|
2
2
|
epstein_diff=epstein_files:epstein_diff
|
|
3
3
|
epstein_generate=epstein_files:generate_html
|
|
4
|
-
|
|
4
|
+
epstein_grep=epstein_files:epstein_grep
|
|
5
5
|
epstein_show=epstein_files:epstein_show
|
|
6
6
|
epstein_word_count=epstein_files:epstein_word_count
|
|
7
7
|
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
epstein_files/__init__.py,sha256=_7YTeRPEpqnY7XBBGvjLpk-G287D1NrYjldTinsKeoI,5899
|
|
2
|
-
epstein_files/documents/communication.py,sha256=QiCZ35R2ttlqcdovm5LBdGqgoj4xCcpl9ANqwlA9XGU,1752
|
|
3
|
-
epstein_files/documents/document.py,sha256=cJxL0UF8mtUvkUx1YGa62J24336DULVKLv1j6_d39Gg,19668
|
|
4
|
-
epstein_files/documents/email.py,sha256=ZylzikpeuiwhZsWVnfaYlO8llMjIfvAS2hQuuQELl6g,42343
|
|
5
|
-
epstein_files/documents/emails/email_header.py,sha256=3UD2pXMS9bRsFP4L5RSP2tSjI8OR6lq6gPKKao0DYLY,7739
|
|
6
|
-
epstein_files/documents/imessage/text_message.py,sha256=IexwwVeF14FZqD7IuK47bIHYam07ZcD3rxheVNULNkc,3394
|
|
7
|
-
epstein_files/documents/json_file.py,sha256=WcZW5NNqA67rHTdopbOGtup00muNaLlvrNgKb-K4zO8,1504
|
|
8
|
-
epstein_files/documents/messenger_log.py,sha256=1bv62WoQMKR3gYDrK9W3Xm7cqLbKrkRBV7NTFL2cexE,7349
|
|
9
|
-
epstein_files/documents/other_file.py,sha256=xZSILlnYlX2QIYCQCm6WNHvNqhF5do6AmxT7qxw-yog,9417
|
|
10
|
-
epstein_files/epstein_files.py,sha256=fHa50Xdxgc2Vw7YgcgS3vAjTqDp1L5yPWOWQ3sb4RlM,14021
|
|
11
|
-
epstein_files/person.py,sha256=lrBPCg1LFfd8koytEL0AOb8CcFKmJjLV9kAFqzGHHdU,14700
|
|
12
|
-
epstein_files/util/constant/common_words.py,sha256=C1JERPnOGHV2UMC71aEue1i9QTQog-RfT3IzdcYQOYQ,3702
|
|
13
|
-
epstein_files/util/constant/html.py,sha256=MFooFV8KfFBCm9hL1u6A3hi_u37i7lL6UKAYoKQj3PI,1505
|
|
14
|
-
epstein_files/util/constant/names.py,sha256=exsR_dtwVEANYFJSU1wk50hiqzAtfc8zQbaKKwgX42A,11408
|
|
15
|
-
epstein_files/util/constant/output_files.py,sha256=vxof85L-1GqSwss8XvLS3HZGguyWSzJkoJm1PrYYJ7g,2123
|
|
16
|
-
epstein_files/util/constant/strings.py,sha256=jh_ou1VoA-6T1ej9l7CFfETEOCuSCectqqK7ppBQz2I,2030
|
|
17
|
-
epstein_files/util/constant/urls.py,sha256=rFVU7824M1gAsmWLnAr-BBVOstlVwIsgyOlUWd1cdDk,6181
|
|
18
|
-
epstein_files/util/constants.py,sha256=ANm_qMYK-dpgg02W9i9PUYiOI2fqr_5aoa50AHOOKIo,123568
|
|
19
|
-
epstein_files/util/data.py,sha256=oZSrjzQSnXHtOlqxisodpH65cTGe57TfA3sZyQQzT7Q,3051
|
|
20
|
-
epstein_files/util/doc_cfg.py,sha256=gIBAoeheQYqqrCtVRU2ytYu799LyCiPxPyHDgWUad3c,9471
|
|
21
|
-
epstein_files/util/env.py,sha256=506dRXdetaKAHZ8vIacxA5x2Cv-IGBNYS8A0NQfMdUM,6961
|
|
22
|
-
epstein_files/util/file_helper.py,sha256=MpG1hI7DGs05fV9KSVb_ltc98DC8tv1E_TTo5X_E7Js,3010
|
|
23
|
-
epstein_files/util/highlighted_group.py,sha256=6EwCRVysWRzQOYu12ZKvVapKHTveSmnF-5bCZTsJtHk,62411
|
|
24
|
-
epstein_files/util/logging.py,sha256=pSLHGrUnPQGFMGYNIOTbZbCyy5dDOCbNrbNz22wIcZI,2099
|
|
25
|
-
epstein_files/util/output.py,sha256=ZNkx6iSJhaaeE3WkG3SDjgATL6pGkJpqzOCov7hZQW8,13221
|
|
26
|
-
epstein_files/util/rich.py,sha256=pp_rIfy8rrxDONvpcizQ6r-x3oeJXEqgCgaA3FNDIHI,13739
|
|
27
|
-
epstein_files/util/search_result.py,sha256=1fxe0KPBQXBk4dLfu6m0QXIzYfZCzvaSkWqvghJGzxY,567
|
|
28
|
-
epstein_files/util/timer.py,sha256=GZHefXiPA-prK-1szC1cebl44Y-i4Wd3K8zedFpcggg,1373
|
|
29
|
-
epstein_files/util/word_count.py,sha256=Ab0KSBv5oaee40h9MpGIlMNWRH4nAWDcMAq4A1TdpvA,9226
|
|
30
|
-
epstein_files-1.2.5.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
31
|
-
epstein_files-1.2.5.dist-info/METADATA,sha256=9cKpM9bg6-9MbKQ-EcX_S4oPBfS1a01FADl_2LbRvec,6222
|
|
32
|
-
epstein_files-1.2.5.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
|
|
33
|
-
epstein_files-1.2.5.dist-info/entry_points.txt,sha256=5qYgwAXpxegeAicD_rzda_trDRnUC51F5UVDpcZ7j6Q,240
|
|
34
|
-
epstein_files-1.2.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|