epstein-files 1.1.3__py3-none-any.whl → 1.1.5__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 +10 -6
- epstein_files/documents/communication.py +3 -3
- epstein_files/documents/document.py +3 -0
- epstein_files/documents/email.py +77 -57
- epstein_files/documents/imessage/text_message.py +5 -9
- epstein_files/documents/messenger_log.py +2 -2
- epstein_files/epstein_files.py +15 -13
- epstein_files/util/constant/names.py +39 -47
- epstein_files/util/constant/strings.py +1 -0
- epstein_files/util/constants.py +64 -8
- epstein_files/util/data.py +9 -1
- epstein_files/util/doc_cfg.py +8 -2
- epstein_files/util/file_helper.py +4 -1
- epstein_files/util/highlighted_group.py +81 -46
- epstein_files/util/output.py +46 -35
- epstein_files/util/rich.py +26 -33
- epstein_files/util/word_count.py +1 -2
- {epstein_files-1.1.3.dist-info → epstein_files-1.1.5.dist-info}/METADATA +1 -1
- epstein_files-1.1.5.dist-info/RECORD +33 -0
- epstein_files-1.1.3.dist-info/RECORD +0 -33
- {epstein_files-1.1.3.dist-info → epstein_files-1.1.5.dist-info}/LICENSE +0 -0
- {epstein_files-1.1.3.dist-info → epstein_files-1.1.5.dist-info}/WHEEL +0 -0
- {epstein_files-1.1.3.dist-info → epstein_files-1.1.5.dist-info}/entry_points.txt +0 -0
epstein_files/util/rich.py
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# Rich reference: https://rich.readthedocs.io/en/latest/reference.html
|
|
2
2
|
import json
|
|
3
|
+
from copy import deepcopy
|
|
3
4
|
from os import devnull
|
|
4
5
|
from pathlib import Path
|
|
5
6
|
|
|
6
7
|
from rich.align import Align
|
|
7
|
-
from rich.console import Console, RenderableType
|
|
8
|
+
from rich.console import Console, Group, RenderableType
|
|
8
9
|
from rich.markup import escape
|
|
9
10
|
from rich.panel import Panel
|
|
10
11
|
from rich.padding import Padding
|
|
@@ -14,23 +15,23 @@ from rich.theme import Theme
|
|
|
14
15
|
|
|
15
16
|
from epstein_files.util.constant.html import CONSOLE_HTML_FORMAT, HTML_TERMINAL_THEME, PAGE_TITLE
|
|
16
17
|
from epstein_files.util.constant.names import UNKNOWN
|
|
17
|
-
from epstein_files.util.constant.strings import DEFAULT, EMAIL, NA,
|
|
18
|
+
from epstein_files.util.constant.strings import DEFAULT, EMAIL, NA, TEXT_MESSAGE
|
|
18
19
|
from epstein_files.util.constant.urls import *
|
|
19
|
-
from epstein_files.util.constants import
|
|
20
|
-
from epstein_files.util.data import json_safe
|
|
20
|
+
from epstein_files.util.constants import HEADER_ABBREVIATIONS
|
|
21
|
+
from epstein_files.util.data import json_safe, without_falsey
|
|
21
22
|
from epstein_files.util.env import args
|
|
22
23
|
from epstein_files.util.file_helper import log_file_write
|
|
23
|
-
from epstein_files.util.highlighted_group import
|
|
24
|
-
get_category_txt_for_name, get_info_for_name, get_style_for_name)
|
|
24
|
+
from epstein_files.util.highlighted_group import ALL_HIGHLIGHTS, HIGHLIGHTED_NAMES, EpsteinHighlighter
|
|
25
25
|
from epstein_files.util.logging import logger
|
|
26
26
|
|
|
27
27
|
TITLE_WIDTH = 50
|
|
28
|
+
SUBTITLE_WIDTH = 110
|
|
28
29
|
MIN_AUTHOR_PANEL_WIDTH = 80
|
|
29
30
|
NUM_COLOR_KEY_COLS = 4
|
|
30
31
|
NA_TXT = Text(NA, style='dim')
|
|
32
|
+
SUBTITLE_PADDING = (2, 0, 1, 0)
|
|
31
33
|
GREY_NUMBERS = [58, 39, 39, 35, 30, 27, 23, 23, 19, 19, 15, 15, 15]
|
|
32
34
|
|
|
33
|
-
DEFAULT_NAME_STYLE = 'gray46'
|
|
34
35
|
INFO_STYLE = 'white dim italic'
|
|
35
36
|
KEY_STYLE = 'honeydew2 bold'
|
|
36
37
|
LAST_TIMESTAMP_STYLE = 'wheat4'
|
|
@@ -89,17 +90,14 @@ def add_cols_to_table(table: Table, col_names: list[str | dict]) -> None:
|
|
|
89
90
|
|
|
90
91
|
if isinstance(col, dict):
|
|
91
92
|
col_name = col['name']
|
|
92
|
-
kwargs = col
|
|
93
|
+
kwargs = deepcopy(col)
|
|
94
|
+
kwargs['justify'] = kwargs.get('justify', justify)
|
|
93
95
|
del kwargs['name']
|
|
94
|
-
|
|
95
|
-
if 'justify' in col:
|
|
96
|
-
justify = col['justify']
|
|
97
|
-
del col['justify']
|
|
98
96
|
else:
|
|
99
97
|
col_name = col
|
|
100
|
-
kwargs = {}
|
|
98
|
+
kwargs = {'justify': justify}
|
|
101
99
|
|
|
102
|
-
table.add_column(col_name,
|
|
100
|
+
table.add_column(col_name, **kwargs)
|
|
103
101
|
|
|
104
102
|
|
|
105
103
|
def build_highlighter(pattern: str) -> EpsteinHighlighter:
|
|
@@ -151,17 +149,17 @@ def parenthesize(msg: str | Text, style: str = '') -> Text:
|
|
|
151
149
|
return Text('(', style=style).append(txt).append(')')
|
|
152
150
|
|
|
153
151
|
|
|
154
|
-
def print_author_panel(msg: str,
|
|
152
|
+
def print_author_panel(msg: str, footer: str | None, style: str | None) -> None:
|
|
155
153
|
"""Print a panel with the name of an emailer and a few tidbits of information about them."""
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
154
|
+
style = 'white' if (not style or style == DEFAULT) else style
|
|
155
|
+
panel_style = f"black on {style} bold"
|
|
156
|
+
width = max(MIN_AUTHOR_PANEL_WIDTH, len(msg) + 4, len(footer or '') + 8)
|
|
157
|
+
elements: list[RenderableType] = [Panel(Text(msg, justify='center'), width=width, style=panel_style)]
|
|
160
158
|
|
|
161
159
|
if footer:
|
|
162
|
-
|
|
160
|
+
elements.append(Text(f"({footer})", justify='center', style=f"{style} italic"))
|
|
163
161
|
|
|
164
|
-
|
|
162
|
+
print_centered(Padding(Group(*elements), (2, 0, 1, 0)))
|
|
165
163
|
|
|
166
164
|
|
|
167
165
|
def print_centered(obj: RenderableType, style: str = '') -> None:
|
|
@@ -188,7 +186,8 @@ def print_color_key() -> None:
|
|
|
188
186
|
print_centered(vertically_pad(color_table))
|
|
189
187
|
|
|
190
188
|
|
|
191
|
-
def print_title_page_header(
|
|
189
|
+
def print_title_page_header() -> None:
|
|
190
|
+
"""Top half of the title page."""
|
|
192
191
|
print_page_title(width=TITLE_WIDTH)
|
|
193
192
|
site_type = EMAIL if (args.all_emails or args.email_timeline) else TEXT_MESSAGE
|
|
194
193
|
title = f"This is the " + ('chronological ' if args.email_timeline else '') + f"Epstein {site_type.title()}s Page"
|
|
@@ -209,6 +208,7 @@ def print_title_page_header(epstein_files: 'EpsteinFiles') -> None:
|
|
|
209
208
|
|
|
210
209
|
|
|
211
210
|
def print_title_page_tables(epstein_files: 'EpsteinFiles') -> None:
|
|
211
|
+
"""Bottom half of the title page."""
|
|
212
212
|
_print_external_links()
|
|
213
213
|
console.line()
|
|
214
214
|
_print_abbreviations_table()
|
|
@@ -246,7 +246,7 @@ def print_other_page_link(epstein_files: 'EpsteinFiles') -> None:
|
|
|
246
246
|
print_centered(parenthesize(txt), style=OTHER_PAGE_MSG_STYLE)
|
|
247
247
|
chrono_emails_markup = link_text_obj(CHRONOLOGICAL_EMAILS_URL, 'a page', style='light_slate_grey bold')
|
|
248
248
|
chrono_emails_txt = Text(f"there's also ").append(chrono_emails_markup)
|
|
249
|
-
chrono_emails_txt.append(' with
|
|
249
|
+
chrono_emails_txt.append(' with all the emails in chronological order')
|
|
250
250
|
print_centered(parenthesize(chrono_emails_txt), style=OTHER_PAGE_MSG_STYLE)
|
|
251
251
|
|
|
252
252
|
|
|
@@ -259,16 +259,9 @@ def print_page_title(expand: bool = True, width: int | None = None) -> None:
|
|
|
259
259
|
console.line(2)
|
|
260
260
|
|
|
261
261
|
|
|
262
|
-
def print_subtitle_panel(msg: str, style: str = 'black on white'
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
actual_padding: tuple[int, int, int, int] = tuple(_padding)
|
|
266
|
-
panel = Panel(Text.from_markup(msg, justify='center'), width=70, style=style)
|
|
267
|
-
|
|
268
|
-
if centered:
|
|
269
|
-
console.print(Align.center(Padding(panel, actual_padding)))
|
|
270
|
-
else:
|
|
271
|
-
console.print(Padding(panel, actual_padding))
|
|
262
|
+
def print_subtitle_panel(msg: str, style: str = 'black on white') -> None:
|
|
263
|
+
panel = Panel(Text.from_markup(msg, justify='center'), width=SUBTITLE_WIDTH, style=style)
|
|
264
|
+
print_centered(Padding(panel, SUBTITLE_PADDING))
|
|
272
265
|
|
|
273
266
|
|
|
274
267
|
def print_section_header(msg: str, style: str = SECTION_HEADER_STYLE, is_centered: bool = False) -> None:
|
epstein_files/util/word_count.py
CHANGED
|
@@ -237,8 +237,7 @@ def write_word_counts_html() -> None:
|
|
|
237
237
|
print_color_key()
|
|
238
238
|
console.line()
|
|
239
239
|
console.print(word_count)
|
|
240
|
-
|
|
241
|
-
print_subtitle_panel(f"{len(COMMON_WORDS_LIST):,} Excluded Words", centered=True)
|
|
240
|
+
print_subtitle_panel(f"{len(COMMON_WORDS_LIST):,} Excluded Words")
|
|
242
241
|
console.print(', '.join(COMMON_WORDS_LIST), highlight=False)
|
|
243
242
|
write_html(WORD_COUNT_HTML_PATH)
|
|
244
243
|
timer.print_at_checkpoint(f"Finished counting words")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: epstein-files
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.5
|
|
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
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
epstein_files/__init__.py,sha256=mp1fugQzZ_5RwSbs8JSxx_17hC8W9YL0I9j5J9LS7Jw,5278
|
|
2
|
+
epstein_files/documents/communication.py,sha256=NzcZ3vQBjVAovasnxpUyII4weycMaJ2T3fc_8d4eg-U,1875
|
|
3
|
+
epstein_files/documents/document.py,sha256=z8l65DvgCMrUbVpnhfYUPYtLBqlDN8l-88zZQWWOxAE,17527
|
|
4
|
+
epstein_files/documents/email.py,sha256=pVoW-w9QfvJDI4DeGAxyywXYHf4VP6hKe5Ly16QtOLA,43928
|
|
5
|
+
epstein_files/documents/emails/email_header.py,sha256=wkPfSLbmzkAeQwvhf0bAeFDLPbQT-EeG0v8vNNLYktM,7502
|
|
6
|
+
epstein_files/documents/imessage/text_message.py,sha256=pflCbV4qamJa0ueJG60ifbk0xeUJrfFzf-NVIGJLcuU,3353
|
|
7
|
+
epstein_files/documents/json_file.py,sha256=WcZW5NNqA67rHTdopbOGtup00muNaLlvrNgKb-K4zO8,1504
|
|
8
|
+
epstein_files/documents/messenger_log.py,sha256=8EVNnyTKuUeeso9R5vXg_sJf2Ont33e66rMvbzX40Rc,7402
|
|
9
|
+
epstein_files/documents/other_file.py,sha256=TeEzsfGN_mTFZPhfyt9ihxK9oTCYwI8sRLplTsgpOMY,9893
|
|
10
|
+
epstein_files/epstein_files.py,sha256=LdaDMJzUPQuiLNTpsGB3PbojyjVTwMJehjypKyN8V2I,15331
|
|
11
|
+
epstein_files/util/constant/common_words.py,sha256=C1JERPnOGHV2UMC71aEue1i9QTQog-RfT3IzdcYQOYQ,3702
|
|
12
|
+
epstein_files/util/constant/html.py,sha256=MFooFV8KfFBCm9hL1u6A3hi_u37i7lL6UKAYoKQj3PI,1505
|
|
13
|
+
epstein_files/util/constant/names.py,sha256=7rnBq86jaqyDJtpa-nw6zQ029kfLeMhKto66kjkGeSg,10412
|
|
14
|
+
epstein_files/util/constant/output_files.py,sha256=et1y3AzkxKqK0k-wDhMEsQFMfoXrUpoJCn6nQONurkU,1911
|
|
15
|
+
epstein_files/util/constant/strings.py,sha256=05OFmCyxXuH9TwemT9TZNyHmvYkbi5iH9E5nqBC4C0c,1991
|
|
16
|
+
epstein_files/util/constant/urls.py,sha256=VqgqxC2IbX90yw9kfGTwAwc7VVo46TCgDVrkPy3adV4,5127
|
|
17
|
+
epstein_files/util/constants.py,sha256=cF0D3GnpNZUuJiNZjU2qxuNoIzyMq_tDYHcvgYvoTQk,118756
|
|
18
|
+
epstein_files/util/data.py,sha256=XVPXb3qjjv5CdpORvvJjecZqxI7DdhMCQesu-4lqN0Q,3413
|
|
19
|
+
epstein_files/util/doc_cfg.py,sha256=6ErYIgDazH0WbJ27VvMwNrkKytlYAbxHqq1n_surxus,9338
|
|
20
|
+
epstein_files/util/env.py,sha256=5ZIwBUlIg37HBq_Z_DtkhXNDxPtnxOtJ_HD7ek3IoQI,6555
|
|
21
|
+
epstein_files/util/file_helper.py,sha256=MpG1hI7DGs05fV9KSVb_ltc98DC8tv1E_TTo5X_E7Js,3010
|
|
22
|
+
epstein_files/util/highlighted_group.py,sha256=YryxT0uJyOlcrGjgERaCOvlZwPRXieaniv8h_yhCcoE,54339
|
|
23
|
+
epstein_files/util/logging.py,sha256=F45YqEKAiIb0rDZnOB7XuaY-dOkOKrsfSzO1VVqY508,2097
|
|
24
|
+
epstein_files/util/output.py,sha256=5hPiYVR27azXfKQoqEAmXy9CvinUklKvsP6m3DCnsCE,14800
|
|
25
|
+
epstein_files/util/rich.py,sha256=J7IaXXF2duuajzwvCPMIhDZZfL1y63c8rQ00lumYwAs,14347
|
|
26
|
+
epstein_files/util/search_result.py,sha256=1fxe0KPBQXBk4dLfu6m0QXIzYfZCzvaSkWqvghJGzxY,567
|
|
27
|
+
epstein_files/util/timer.py,sha256=QqqXAQofKPWkDngNwG0mOqRn7nHcAR-BGQjqAwZfXoE,840
|
|
28
|
+
epstein_files/util/word_count.py,sha256=rTAo-C_I8O_y2tfUfVCYAMqXgSe1oET0TxGKepYdtiE,9199
|
|
29
|
+
epstein_files-1.1.5.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
30
|
+
epstein_files-1.1.5.dist-info/METADATA,sha256=pLpbillvKcnF10ch839Eq0sxsi8u30T7_9k49WEHW18,5991
|
|
31
|
+
epstein_files-1.1.5.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
|
|
32
|
+
epstein_files-1.1.5.dist-info/entry_points.txt,sha256=5qYgwAXpxegeAicD_rzda_trDRnUC51F5UVDpcZ7j6Q,240
|
|
33
|
+
epstein_files-1.1.5.dist-info/RECORD,,
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
epstein_files/__init__.py,sha256=L2NKPyyC8RQ1xYYizheGL5Zbq9DlB6PeMDrYQyvQrEY,5194
|
|
2
|
-
epstein_files/documents/communication.py,sha256=4xcmCg4108D4Rln4tiXbm5pRBRfBGpMxcCORUCMnT6k,1908
|
|
3
|
-
epstein_files/documents/document.py,sha256=eQ0IgOUZiKz-KFgUwkWariQ5HqyM2VY3ZCJC4qRsnDg,17401
|
|
4
|
-
epstein_files/documents/email.py,sha256=VBD5wC2n5C8mKRq6Syu8MDAzoNJL5JO8PZgE1faOG-w,43166
|
|
5
|
-
epstein_files/documents/emails/email_header.py,sha256=wkPfSLbmzkAeQwvhf0bAeFDLPbQT-EeG0v8vNNLYktM,7502
|
|
6
|
-
epstein_files/documents/imessage/text_message.py,sha256=w_U2bNIKtH7rMSNP4Q0BoTDrQZ6HE2IUSFjy6rBxrgY,3348
|
|
7
|
-
epstein_files/documents/json_file.py,sha256=WcZW5NNqA67rHTdopbOGtup00muNaLlvrNgKb-K4zO8,1504
|
|
8
|
-
epstein_files/documents/messenger_log.py,sha256=pAHH8FntEyQCwoVFI3B5utSqS5LKhQrj5UD1hl3pnbg,7419
|
|
9
|
-
epstein_files/documents/other_file.py,sha256=TeEzsfGN_mTFZPhfyt9ihxK9oTCYwI8sRLplTsgpOMY,9893
|
|
10
|
-
epstein_files/epstein_files.py,sha256=oWfJxe_NJ6LgCfTgNnDsni5Y45bF0dVm5KBRqElIhBg,15198
|
|
11
|
-
epstein_files/util/constant/common_words.py,sha256=C1JERPnOGHV2UMC71aEue1i9QTQog-RfT3IzdcYQOYQ,3702
|
|
12
|
-
epstein_files/util/constant/html.py,sha256=MFooFV8KfFBCm9hL1u6A3hi_u37i7lL6UKAYoKQj3PI,1505
|
|
13
|
-
epstein_files/util/constant/names.py,sha256=Dkytzixp4a-msROnOH1KROEUM7--BO9-4PAmKBve5B8,10941
|
|
14
|
-
epstein_files/util/constant/output_files.py,sha256=et1y3AzkxKqK0k-wDhMEsQFMfoXrUpoJCn6nQONurkU,1911
|
|
15
|
-
epstein_files/util/constant/strings.py,sha256=2TLP_TWgErsXb9lF8k0lZVAAQ8QAc5ytKQi3PD9CAzY,1961
|
|
16
|
-
epstein_files/util/constant/urls.py,sha256=VqgqxC2IbX90yw9kfGTwAwc7VVo46TCgDVrkPy3adV4,5127
|
|
17
|
-
epstein_files/util/constants.py,sha256=enwg1muOKBaQQJeX7Js9P9E96u_EEyDutpemkzHaGAM,112746
|
|
18
|
-
epstein_files/util/data.py,sha256=JccGFZGiCGm7XtwpQTocIjGYOr6hTUpEPwHhjyW9Xnc,3164
|
|
19
|
-
epstein_files/util/doc_cfg.py,sha256=aBIm0hyxf-aeMsb8ZUNiQFVsPFimjVUIkrVdDrg1iQU,9105
|
|
20
|
-
epstein_files/util/env.py,sha256=5ZIwBUlIg37HBq_Z_DtkhXNDxPtnxOtJ_HD7ek3IoQI,6555
|
|
21
|
-
epstein_files/util/file_helper.py,sha256=PGPqXmt4Oz4bE45ybvaCZfI0w_PGKirTsrv7xw86gmY,2903
|
|
22
|
-
epstein_files/util/highlighted_group.py,sha256=-xeakZF1fkW3e8sXhG_6cd5l6sIxcIfovWVFGKIodjA,52935
|
|
23
|
-
epstein_files/util/logging.py,sha256=F45YqEKAiIb0rDZnOB7XuaY-dOkOKrsfSzO1VVqY508,2097
|
|
24
|
-
epstein_files/util/output.py,sha256=GYgeGidzzVzVGWgTMcH7yjm1SBWxD9KyxziskBG5lrI,14103
|
|
25
|
-
epstein_files/util/rich.py,sha256=jx6XIzGkHFXdCFFSGjtcnd8TsedzdR--nyFExKF3XuM,14611
|
|
26
|
-
epstein_files/util/search_result.py,sha256=1fxe0KPBQXBk4dLfu6m0QXIzYfZCzvaSkWqvghJGzxY,567
|
|
27
|
-
epstein_files/util/timer.py,sha256=QqqXAQofKPWkDngNwG0mOqRn7nHcAR-BGQjqAwZfXoE,840
|
|
28
|
-
epstein_files/util/word_count.py,sha256=J6aZkodXwowf09GykLgJuqwSRzrMjvefgKiM8S-T9LA,9234
|
|
29
|
-
epstein_files-1.1.3.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
30
|
-
epstein_files-1.1.3.dist-info/METADATA,sha256=8SEtIRmGd8-QztDalAuH58ARvgPsrPn8A0_5OqV6qXw,5991
|
|
31
|
-
epstein_files-1.1.3.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
|
|
32
|
-
epstein_files-1.1.3.dist-info/entry_points.txt,sha256=5qYgwAXpxegeAicD_rzda_trDRnUC51F5UVDpcZ7j6Q,240
|
|
33
|
-
epstein_files-1.1.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|