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.
@@ -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, QUESTION_MARKS, TEXT_MESSAGE
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 FALLBACK_TIMESTAMP, HEADER_ABBREVIATIONS
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 (ALL_HIGHLIGHTS, HIGHLIGHTED_NAMES, EpsteinHighlighter,
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, justify=justify, **kwargs)
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, color: str | None, footer: str | None = None) -> None:
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
- color = 'white' if (not color or color == DEFAULT) else color
157
- width = max(MIN_AUTHOR_PANEL_WIDTH, len(msg) + 4)
158
- panel = Panel(Text(msg, justify='center'), width=width, style=f"black on {color} bold")
159
- console.print('\n', Align.center(panel))
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
- console.print(Align.center(f"({footer})"), highlight=False, style=f'{color} italic')
160
+ elements.append(Text(f"({footer})", justify='center', style=f"{style} italic"))
163
161
 
164
- console.line()
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(epstein_files: 'EpsteinFiles') -> None:
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 a table of all the emails in chronological order')
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', padding: tuple | None = None, centered: bool = False) -> None:
263
- _padding: list[int] = list(padding or [0, 0, 0, 0])
264
- _padding[2] += 1 # Bottom pad
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:
@@ -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
- console.line(2)
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
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,,