epstein-files 1.0.13__py3-none-any.whl → 1.0.14__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.
@@ -45,9 +45,9 @@ HEADER_ABBREVIATIONS = {
45
45
  }
46
46
 
47
47
 
48
- #######################
49
- # Emails Config Stuff #
50
- #######################
48
+ #########################
49
+ # Emailers Config Stuff #
50
+ #########################
51
51
 
52
52
  # Emailers
53
53
  EMAILER_ID_REGEXES: dict[str, re.Pattern] = {
@@ -85,7 +85,7 @@ EMAILER_ID_REGEXES: dict[str, re.Pattern] = {
85
85
  JAMES_HILL: re.compile(r"hill, james e.|james.e.hill@abc.com", re.IGNORECASE),
86
86
  JEAN_LUC_BRUNEL: re.compile(r'Jean[- ]Luc Brunel?', re.IGNORECASE),
87
87
  JEFF_FULLER: re.compile(r"jeff@mc2mm.com|Jeff Fuller", re.IGNORECASE),
88
- JEFFREY_EPSTEIN: re.compile(r'[djl]\s?ee[vy]acation[©@]?g?(mail.com)?|Epstine|\bJEE?\b|Jeffrey E((sp|ps)tein?)?|jeeproject@yahoo.com|J Jep|Jeffery Edwards|(?<!(Mark L.|ard Jay) )Epstein', re.IGNORECASE),
88
+ JEFFREY_EPSTEIN: re.compile(r'[djl]\s?ee[vy]acation[©@]?g?(mail.com)?|Epstine|\bJEE?\b|Jeffrey E((sp|ps)tein?)?( VI Foundation)?|jeeproject@yahoo.com|J Jep|Jeffery Edwards|(?<!(Mark L.|ard Jay) )Epstein', re.IGNORECASE),
89
89
  JESSICA_CADWELL: re.compile(r'Jessica Cadwell?', re.IGNORECASE),
90
90
  JOHNNY_EL_HACHEM: re.compile(r'el hachem johnny|johnny el hachem', re.IGNORECASE),
91
91
  JOI_ITO: re.compile(r'ji@media.mit.?edu|(joichi|joi)( Ito)?', re.IGNORECASE),
@@ -220,7 +220,6 @@ RESUME_OF = 'professional resumé'
220
220
  SCREENSHOT = 'screenshot of'
221
221
  TRANSLATION = 'translation of'
222
222
  TWEET = 'tweet'
223
- TEXT_OF_US_LAW = 'text of U.S. law:'
224
223
 
225
224
  # Legal cases
226
225
  BRUNEL_V_EPSTEIN = f"{JEAN_LUC_BRUNEL} v. {JEFFREY_EPSTEIN} and Tyler McDonald d/b/a YI.org"
@@ -239,7 +238,6 @@ BOFA_MERRILL = f'{BOFA} / Merrill Lynch Report'
239
238
  BOFA_WEALTH_MGMT = f'{BOFA} Wealth Management'
240
239
  BROCKMAN_INC = 'Brockman, Inc.'
241
240
  CVRA = "Crime Victims' Rights Act [CVRA]"
242
- CVRA_LEXIS_SEARCH = f"Lexis Nexis search for case law around the {CVRA}"
243
241
  DAVID_BLAINE_VISA_LETTER = f"letter of recommendation for visa for a model"
244
242
  DERSH_GIUFFRE_TWEET = f"{TWEET} about {VIRGINIA_GIUFFRE}"
245
243
  DEUTSCHE_BANK_TAX_TOPICS = f'{DEUTSCHE_BANK} Wealth Management Tax Topics'
@@ -253,15 +251,16 @@ HARVARD_POETRY = f'{HARVARD} poetry stuff from {LISA_NEW}'
253
251
  HBS_APPLICATION = f"{HARVARD} Business School application letter"
254
252
  JASTA = 'JASTA'
255
253
  JASTA_SAUDI_LAWSUIT = f"{JASTA} lawsuit against Saudi Arabia by 9/11 victims"
256
- JOHN_BOLTON_PRESS_CLIPPING = 'John Bolton press clipping'
257
254
  JP_MORGAN_EYE_ON_THE_MARKET = f"Eye On The Market"
258
255
  LAWRENCE_KRAUSS_ASU_ORIGINS = f"{LAWRENCE_KRAUSS}'s ASU Origins Project"
256
+ LEXIS_NEXIS_CVRA_SEARCH = f"{LEXIS_NEXIS} search for case law around the {CVRA}"
259
257
  KEN_STARR_LETTER = f"letter to judge overseeing Epstein's criminal prosecution, mentions Alex Acosta"
260
258
  MICHAEL_WOLFF_EPSTEIN_ARTICLE_DRAFT = f"draft of an unpublished article about Epstein by {MICHAEL_WOLFF} written ca. 2014/2015"
261
259
  NIGHT_FLIGHT_BOOK = f'"Night Flight" (draft)'
262
260
  NOBEL_CHARITABLE_TRUST = 'Nobel Charitable Trust'
263
261
  OBAMA_JOKE = 'joke about Obama'
264
262
  PALM_BEACH_CODE_ENFORCEMENT = f'{PALM_BEACH} Code Enforcement'
263
+ PALM_BEACH_PROPERTY_INFO = f"{PALM_BEACH} property info"
265
264
  PALM_BEACH_TSV = f"TSV of {PALM_BEACH} property"
266
265
  PALM_BEACH_WATER_COMMITTEE = f'{PALM_BEACH} Water Committee'
267
266
  PATTERSON_BOOK_SCANS = f'pages of "Filthy Rich: The Shocking True Story of {JEFFREY_EPSTEIN}"'
@@ -649,9 +648,9 @@ EMAILS_CONFIG = [
649
648
  EmailCfg(id='032358', actual_text=REDACTED), # Completely redacted
650
649
  EmailCfg(id='033050', actual_text='schwartman'),
651
650
  EmailCfg(id='022219', description="discussion of attempts to clean up Epstein's Google search results"),
652
- EmailCfg(id='023627', is_fwded_article=True, description=MICHAEL_WOLFF_EPSTEIN_ARTICLE_DRAFT),
653
651
  EmailCfg(id='031333', is_fwded_article=True, description='looks like a Russian disinfo article'), # Russia Says IMF Chief Jailed For Discovering All US Gold is Gone
654
652
  EmailCfg(id='031335', is_fwded_article=True, description='looks like a Russian disinfo article'), # DOMINQUE STRAUSS-KAHN ARRESTED, NOT BECAUSE HE RAPED A MAID, BUT BECAUSE HE HAD EVIDENCE US HAS NO GOLD IN FORT KNOX.
653
+ EmailCfg(id='023627', is_fwded_article=True, description=MICHAEL_WOLFF_EPSTEIN_ARTICLE_DRAFT),
655
654
  EmailCfg(id='026298', is_fwded_article=True, duplicate_ids=['026499']), # Written by someone else?
656
655
  EmailCfg(id='029692', is_fwded_article=True, duplicate_ids=['029779']), # WaPo article
657
656
  EmailCfg(id='022344', is_fwded_article=True, duplicate_ids=['028529']), # Bill Gates is most admired from Nikolic
@@ -664,6 +663,7 @@ EMAILS_CONFIG = [
664
663
  EmailCfg(id='029849', is_fwded_article=True, duplicate_ids=['033482']), # Fareed Zakaria: Trump sells America short),
665
664
  EmailCfg(id='032023', is_fwded_article=True, duplicate_ids=['032012']), # American-Israeli Cooperative Enterprise Newsletter
666
665
  EmailCfg(id='021758', is_fwded_article=True, duplicate_ids=['030616']), # Radar Online article about Epstein's early prison release
666
+ EmailCfg(id='033297', is_fwded_article=True, duplicate_ids=['033586']), # Sultan Sulayem fwding article about Trump and Russia
667
667
  EmailCfg(id='031774', is_fwded_article=True), # Krassner fwd of Palmer Report article
668
668
  EmailCfg(id='033345', is_fwded_article=True), # Krassner fwd of Palmer Report article
669
669
  EmailCfg(id='029903', is_fwded_article=True), # Krassner fwd of Ann Coulter article about Epstein
@@ -715,7 +715,6 @@ EMAILS_CONFIG = [
715
715
  EmailCfg(id='031340', is_fwded_article=True), # Article about Alex Jones threatening Robert Mueller
716
716
  EmailCfg(id='030209', is_fwded_article=True), # Atlantic Council Syria: Blackberry Diplomacy
717
717
  EmailCfg(id='026605', is_fwded_article=True), # Article about Ruemmler turning down attorney general job by NEDRA PICKLER
718
- EmailCfg(id='033297', is_fwded_article=True, duplicate_ids=['033586']), # Sultan Sulayem fwding article about Trump and Russia
719
718
  EmailCfg(id='032475', timestamp=parse('2017-02-15 13:31:25')),
720
719
  EmailCfg(id='030373', timestamp=parse('2018-10-03 01:49:27')),
721
720
 
@@ -868,14 +867,13 @@ EMAILS_CONFIG = [
868
867
  ################################################################################################
869
868
 
870
869
  OTHER_FILES_BOOKS = [
871
- DocCfg(id='017088', author=ALAN_DERSHOWITZ, description=f'"Taking the Stand: My Life in the Law" (draft)'),
870
+ DocCfg(id='017088', author=ALAN_DERSHOWITZ, description=f'"Taking the Stand: My Life in the Law" (draft)'),
872
871
  DocCfg(id='013501', author='Arnold J. Mandell', description=f'The Nearness Of Grace: A Personal Science Of Spiritual Transformation', date='2005-01-01'),
873
872
  DocCfg(id='012899', author='Ben Goertzel', description=f'Engineering General Intelligence: A Path to Advanced AGI Via Embodied Learning and Cognitive Synergy'),
874
873
  DocCfg(id='018438', author='Clarisse Thorn', description=f'The S&M Feminist'),
875
874
  DocCfg(id='019477', author=EDWARD_JAY_EPSTEIN, description=f'How America Lost Its Secrets: Edward Snowden, the Man, and the Theft'),
876
875
  DocCfg(id='020153', author=EDWARD_JAY_EPSTEIN, description=f'The Snowden Affair: A Spy Story In Six Parts'),
877
- DocCfg(id='011472', author=EHUD_BARAK, description=NIGHT_FLIGHT_BOOK),
878
- DocCfg(id='027849', author=EHUD_BARAK, description=NIGHT_FLIGHT_BOOK),
876
+ DocCfg(id='011472', author=EHUD_BARAK, description=NIGHT_FLIGHT_BOOK, date='2006-07-12', duplicate_ids=['027849']), # date from _extract_timestamp()
879
877
  DocCfg(id='010912', author=GORDON_GETTY, description=f'"Free Growth and Other Surprises" (draft)', date='2018-10-18'),
880
878
  DocCfg(id='010477', author=JAMES_PATTERSON, description=PATTERSON_BOOK_SCANS, date='2016-10-10'),
881
879
  DocCfg(id='010486', author=JAMES_PATTERSON, description=PATTERSON_BOOK_SCANS, date='2016-10-10'),
@@ -899,9 +897,6 @@ OTHER_FILES_BOOKS = [
899
897
  ]
900
898
 
901
899
  OTHER_FILES_ARTICLES = [
902
- DocCfg(id='030258', author=ALAN_DERSHOWITZ, description=f'{ARTICLE_DRAFT} Mueller probe, almost same as 030248'),
903
- DocCfg(id='030248', author=ALAN_DERSHOWITZ, description=f'{ARTICLE_DRAFT} Mueller probe, almost same as 030258'),
904
- DocCfg(id='029165', author=ALAN_DERSHOWITZ, description=f'{ARTICLE_DRAFT} Mueller probe, almost same as 030258'),
905
900
  DocCfg(id='030013', author=f'Aviation International News', description=f'article', date='2012-07-01'),
906
901
  DocCfg(id='013275', author=BLOOMBERG, description=f"article on notable 2013 obituaries", date='2013-12-26'),
907
902
  DocCfg(id='026543', author=BLOOMBERG, description=f"BNA article about taxes"),
@@ -943,6 +938,7 @@ OTHER_FILES_ARTICLES = [
943
938
  DocCfg(id='022952', author=MICHAEL_WOLFF, description=MICHAEL_WOLFF_EPSTEIN_ARTICLE_DRAFT),
944
939
  DocCfg(id='024229', author=MICHAEL_WOLFF, description=MICHAEL_WOLFF_EPSTEIN_ARTICLE_DRAFT),
945
940
  DocCfg(id='031198', author='Morning News USA', description=f"article about identify of Jane Doe in {JANE_DOE_V_EPSTEIN_TRUMP}"),
941
+ DocCfg(id='015462', author='Nautilus Education', description=f'magazine (?) issue'),
946
942
  DocCfg(id='031972', author=NYT, description=f"article about #MeToo allegations against {LAWRENCE_KRAUSS}", date='2018-03-07'),
947
943
  DocCfg(id='032435', author=NYT, description=f'article about Chinese butlers'),
948
944
  DocCfg(id='029452', author=NYT, description=f"article about {PETER_THIEL}"),
@@ -1029,12 +1025,10 @@ OTHER_FILES_ARTICLES = [
1029
1025
  DocCfg(id='031725', description=f"article about Gloria Allred and Trump allegations", date='2016-10-10'),
1030
1026
  DocCfg(id='026648', description=f'article about {JASTA} lawsuit against Saudi Arabia by 9/11 victims (Russian propaganda?)', date='2017-05-13'),
1031
1027
  DocCfg(id='032159', description=f"article about microfinance and cell phones in Zimbabwe, Strive Masiyiwa (Econet Wireless)"),
1032
- DocCfg(id='033468', description=f'{ARTICLE_DRAFT} Rod Rosenstein', date='2018-09-24'),
1033
1028
  DocCfg(id='030825', description=f'{ARTICLE_DRAFT} Syria'),
1034
1029
  DocCfg(id='027051', description=f"German language article about the 2013 Lifeball / AIDS Gala", date='2013-01-01'),
1035
- DocCfg(id='033480', description=f"{JOHN_BOLTON_PRESS_CLIPPING}", date='2018-04-06', duplicate_ids=['033481']),
1036
- DocCfg(id='013403', description=f"Lexis Nexis result from The Evening Standard about Bernie Madoff", date='2009-12-24'),
1037
- DocCfg(id='015462', description=f'Nautilus Education magazine (?) issue'),
1030
+ DocCfg(id='033480', description=f"John Bolton press clipping", date='2018-04-06', duplicate_ids=['033481']),
1031
+ DocCfg(id='013403', description=f"{LEXIS_NEXIS} result from The Evening Standard about Bernie Madoff", date='2009-12-24'),
1038
1032
  DocCfg(id='021093', description=f"page of unknown article about Epstein and Maxwell"),
1039
1033
  DocCfg(id='031191', description=f"{SINGLE_PAGE} unknown article about Epstein and Trump's relationship in 1997"),
1040
1034
  DocCfg(id='026520', description=f'Spanish language article about {SULTAN_BIN_SULAYEM}', date='2013-09-27'),
@@ -1044,16 +1038,16 @@ OTHER_FILES_ARTICLES = [
1044
1038
  date='2017-05-13',
1045
1039
  ),
1046
1040
  DocCfg(id='025094', description=f'{TRANSLATION} Spanish article about Cuba', date='2015-11-08'),
1047
- DocCfg(id='031794', description=f"very short French magazine clipping", is_interesting=False),
1041
+ DocCfg(id='031794', description=f"very short French magazine clipping"),
1048
1042
  ]
1049
1043
 
1050
1044
  OTHER_FILES_LEGAL = [
1051
1045
  DocCfg(id='017789', author=ALAN_DERSHOWITZ, description=f'letter to {HARVARD} Crimson complaining he was defamed'),
1052
1046
  DocCfg(id='011908', author=BRUNEL_V_EPSTEIN, description=f"court filing"),
1053
- DocCfg(id='017603', author=DAVID_SCHOEN, description=CVRA_LEXIS_SEARCH, date='2019-02-28'),
1054
- DocCfg(id='017635', author=DAVID_SCHOEN, description=CVRA_LEXIS_SEARCH, date='2019-02-28'),
1055
- DocCfg(id='016509', author=DAVID_SCHOEN, description=CVRA_LEXIS_SEARCH, date='2019-02-28'),
1056
- DocCfg(id='017714', author=DAVID_SCHOEN, description=CVRA_LEXIS_SEARCH, date='2019-02-28'),
1047
+ DocCfg(id='017603', author=DAVID_SCHOEN, description=LEXIS_NEXIS_CVRA_SEARCH, date='2019-02-28'),
1048
+ DocCfg(id='017635', author=DAVID_SCHOEN, description=LEXIS_NEXIS_CVRA_SEARCH, date='2019-02-28'),
1049
+ DocCfg(id='016509', author=DAVID_SCHOEN, description=LEXIS_NEXIS_CVRA_SEARCH, date='2019-02-28'),
1050
+ DocCfg(id='017714', author=DAVID_SCHOEN, description=LEXIS_NEXIS_CVRA_SEARCH, date='2019-02-28'),
1057
1051
  DocCfg(id='021824', author=EDWARDS_V_DERSHOWITZ, description=f"deposition of {PAUL_G_CASSELL}"),
1058
1052
  DocCfg(
1059
1053
  id='010757',
@@ -1187,8 +1181,8 @@ OTHER_FILES_LEGAL = [
1187
1181
  date='2019-01-11',
1188
1182
  ),
1189
1183
  DocCfg(id='028540', author='SCOTUS', description=f"decision in Budha Ismail Jam et al. v. INTERNATIONAL FINANCE CORP"),
1190
- DocCfg(id='012197', author='SDFL', description=f"Response to {JAY_LEFKOWITZ} on Epstein Plea Agreement Compliance"),
1191
- DocCfg(id='022277', description=f"{TEXT_OF_US_LAW} National Labour Relations Board (NLRB)"),
1184
+ DocCfg(id='012197', author='SDFL', description=f"response to {JAY_LEFKOWITZ} on Epstein Plea Agreement Compliance"),
1185
+ DocCfg(id='022277', description=f"text of National Labour Relations Board (NLRB) law", is_interesting=False),
1192
1186
  ]
1193
1187
 
1194
1188
  OTHER_FILES_CONFERENCES = [
@@ -1210,10 +1204,20 @@ OTHER_FILES_CONFERENCES = [
1210
1204
  author=UN_GENERAL_ASSEMBLY,
1211
1205
  description=f'schedule including "Presidents Private Dinner - Jeffrey Epstine (sic)"',
1212
1206
  date='2012-09-21',
1207
+ is_interesting=True,
1213
1208
  ),
1214
1209
  DocCfg(id='017526', description=f'Intellectual Jazz conference brochure f. {DAVID_BLAINE}'),
1215
- DocCfg(id='029427', description=f"seems related to an IRL meeting about concerns China will attempt to absorb Mongolia"),
1216
- DocCfg(id='025797', description=f'someone\'s notes from Aspen Strategy Group', date='2013-05-29'),
1210
+ DocCfg(
1211
+ id='029427',
1212
+ description=f"seems related to an IRL meeting about concerns China will attempt to absorb Mongolia",
1213
+ is_interesting=True,
1214
+ ),
1215
+ DocCfg(
1216
+ id='025797',
1217
+ date='2013-05-29',
1218
+ description=f"someone's notes from Aspen Strategy Group",
1219
+ is_interesting=True,
1220
+ ),
1217
1221
  DocCfg(
1218
1222
  id='017060',
1219
1223
  description=f'World Economic Forum (WEF) Annual Meeting 2011 List of Participants',
@@ -1264,7 +1268,12 @@ OTHER_FILES_FINANCE = [
1264
1268
  DocCfg(id='026944', author=GOLDMAN_INVESTMENT_MGMT, description=f"Risk of a US-Iran Military Conflict", date='2019-05-23'),
1265
1269
  DocCfg(id='018804', author='Integra Realty Resources', description=f"appraisal of going concern for IGY American Yacht Harbor Marina in {VIRGIN_ISLANDS}"),
1266
1270
  DocCfg(id='026679', author='Invesco', description=f"Global Sovereign Asset Management Study 2017"),
1267
- DocCfg(id='033220', author='Joseph G. Carson', description=f"short economic report on defense spending under Trump"),
1271
+ DocCfg(
1272
+ id='033220',
1273
+ author='Joseph G. Carson',
1274
+ description=f"short economic report on defense spending under Trump",
1275
+ is_interesting=True,
1276
+ ),
1268
1277
  DocCfg(id='026572', author=JP_MORGAN, description=f"Global Asset Allocation report", date='2012-11-09'),
1269
1278
  DocCfg(id='030848', author=JP_MORGAN, description=f"Global Asset Allocation report", date='2013-03-28'),
1270
1279
  DocCfg(id='030840', author=JP_MORGAN, description=f"Market Thoughts"),
@@ -1284,7 +1293,7 @@ OTHER_FILES_FINANCE = [
1284
1293
  DocCfg(id='025763', author='S&P', description=f"Economic Research: How Increasing Income Inequality Is Dampening U.S. Growth", date='2014-08-05'),
1285
1294
  DocCfg(id='024135', author=UBS, description=UBS_CIO_REPORT, date='2012-06-29'),
1286
1295
  DocCfg(id='025247', author=UBS, description=UBS_CIO_REPORT, date='2012-10-25'),
1287
- DocCfg(id='026584', description=f"article about tax implications of disregarded entities", date='2009-07-01'),
1296
+ DocCfg(id='026584', description=f"article about tax implications of disregarded entities", date='2009-07-01', is_interesting=True),
1288
1297
  DocCfg(
1289
1298
  id='024271',
1290
1299
  description=f"Blockchain Capital and Brock Pierce pitch deck",
@@ -1345,8 +1354,8 @@ OTHER_FILES_PROPERTY = [
1345
1354
  DocCfg(id='029520', author=THE_REAL_DEAL, description=f"{REAL_DEAL_ARTICLE} 'Lost Paradise at the Palm House'", date='2019-06-17'),
1346
1355
  DocCfg(id='016597', author='Trump Properties LLC', description=f'appeal of some decision about Mar-a-Lago by {PALM_BEACH} authorities'),
1347
1356
  DocCfg(id='018743', description=f"Las Vegas property listing"),
1348
- DocCfg(id='016695', description=f"{PALM_BEACH} property info (?)"),
1349
- DocCfg(id='016697', description=f"{PALM_BEACH} property tax info (?) that mentions Trump"),
1357
+ DocCfg(id='016695', description=f"{PALM_BEACH_PROPERTY_INFO} (?)"),
1358
+ DocCfg(id='016697', description=f"{PALM_BEACH_PROPERTY_INFO} (?) that mentions Trump"),
1350
1359
  DocCfg(id='016599', description=f"{PALM_BEACH_TSV} consumption (water?)"),
1351
1360
  DocCfg(id='016600', description=f"{PALM_BEACH_TSV} consumption (water?)"),
1352
1361
  DocCfg(id='016601', description=f"{PALM_BEACH_TSV} consumption (water?)"),
@@ -1389,15 +1398,20 @@ OTHER_FILES_SOCIAL = [
1389
1398
  ]
1390
1399
 
1391
1400
  OTHER_FILES_POLITICS = [
1401
+ DocCfg(id='030258', author=ALAN_DERSHOWITZ, description=f'{ARTICLE_DRAFT} Mueller probe, almost same as 030248'),
1402
+ DocCfg(id='030248', author=ALAN_DERSHOWITZ, description=f'{ARTICLE_DRAFT} Mueller probe, almost same as 030258'),
1403
+ DocCfg(id='029165', author=ALAN_DERSHOWITZ, description=f'{ARTICLE_DRAFT} Mueller probe, almost same as 030258'),
1392
1404
  DocCfg(id='029918', author=DIANA_DEGETTE_CAMPAIGN, description=f"bio", date='2012-09-27'),
1393
1405
  DocCfg(id='031184', author=DIANA_DEGETTE_CAMPAIGN, description=f"invitation to fundraiser hosted by {BARBRO_C_EHNBOM}", date='2012-09-27'),
1394
1406
  DocCfg(id='026248', author='Don McGahn', description=f'letter from Trump lawyer to Devin Nunes (R-CA) about FISA courts and Trump'),
1407
+ DocCfg(id='027009', author=EHUD_BARAK, description=f"speech to AIPAC", date='2013-03-03'),
1395
1408
  DocCfg(
1396
1409
  id='019233',
1397
1410
  author='Freedom House',
1398
1411
  description=f"'Breaking Down Democracy: Goals, Strategies, and Methods of Modern Authoritarians'",
1399
1412
  date='2017-06-02',
1400
1413
  ),
1414
+ DocCfg(id='026856', author='Kevin Rudd', description=f"speech 'Xi Jinping, China And The Global Order'", date='2018-06-26'),
1401
1415
  DocCfg(id='026827', author='Scowcroft Group', description=f'report on ISIS', date='2015-11-14'),
1402
1416
  DocCfg(id='024294', author=STACEY_PLASKETT, description=f"campaign flier", date='2016-10-01'),
1403
1417
  DocCfg(
@@ -1406,6 +1420,7 @@ OTHER_FILES_POLITICS = [
1406
1420
  description=f'The Search for Peace in the Arab-Israeli Conflict',
1407
1421
  date='2019-12-09',
1408
1422
  ),
1423
+ DocCfg(id='033468', description=f'{ARTICLE_DRAFT} Rod Rosenstein', date='2018-09-24'),
1409
1424
  DocCfg(
1410
1425
  id='025849',
1411
1426
  author='US Office of Government Information Services',
@@ -1418,8 +1433,8 @@ OTHER_FILES_POLITICS = [
1418
1433
  date='2015-01-15', # TODO: this is just a guess
1419
1434
  duplicate_ids=['028887'],
1420
1435
  ),
1421
- DocCfg(id='010617', description=TRUMP_DISCLOSURES, date='2017-01-20'),
1422
- DocCfg(id='016699', description=TRUMP_DISCLOSURES, date='2017-01-20'),
1436
+ DocCfg(id='010617', description=TRUMP_DISCLOSURES, date='2017-01-20', is_interesting=True),
1437
+ DocCfg(id='016699', description=TRUMP_DISCLOSURES, date='2017-01-20', is_interesting=True),
1423
1438
  ]
1424
1439
 
1425
1440
  OTHER_FILES_ACADEMIA = [
@@ -1431,6 +1446,7 @@ OTHER_FILES_ACADEMIA = [
1431
1446
  description=f'report: "Challenges of AI: Envisioning and Addressing Adverse Outcomes"',
1432
1447
  duplicate_ids=['011284']
1433
1448
  ),
1449
+ DocCfg(id='026731', author='Lord Martin Rees', description=f"speech at first inaugural Cornell Carl Sagan Lecture"),
1434
1450
  DocCfg(id='015501', author=f"{MOSHE_HOFFMAN}, Erez Yoeli, and Carlos David Navarrete", description=f"Game Theory and Morality"),
1435
1451
  DocCfg(
1436
1452
  id='026521',
@@ -1458,13 +1474,13 @@ OTHER_FILES_ACADEMIA = [
1458
1474
  DocCfg(id='029592', description=HARVARD_POETRY),
1459
1475
  DocCfg(id='019396', description=f'{HARVARD} Economics 1545 Professor Kenneth Rogoff syllabus'),
1460
1476
  DocCfg(id='022445', description=f"Inference: International Review of Science Feedback & Comments", date='2018-11-01'),
1461
- DocCfg(id='029355', description=f'{SCREENSHOT} quote in book about {LARRY_SUMMERS}', duplicate_ids=['029356'], dupe_type='quoted'), # 029356 is zoomed in corner
1462
- ]
1463
-
1464
- OTHER_FILES_SPEECH = [
1465
- DocCfg(id='027009', author=EHUD_BARAK, description=f"speech to AIPAC", date='2013-03-03'),
1466
- DocCfg(id='026856', author='Kevin Rudd', description=f"speech 'Xi Jinping, China And The Global Order'", date='2018-06-26'),
1467
- DocCfg(id='026731', author='Lord Martin Rees', description=f"speech at first inaugural Cornell Carl Sagan Lecture"),
1477
+ DocCfg(
1478
+ id='029355',
1479
+ description=f'{SCREENSHOT} quote in book about {LARRY_SUMMERS}',
1480
+ duplicate_ids=['029356'], # 029356 is zoomed in corner
1481
+ dupe_type='quoted',
1482
+ is_interesting=False,
1483
+ ),
1468
1484
  ]
1469
1485
 
1470
1486
  # resumes and application letters
@@ -1525,7 +1541,7 @@ OTHER_FILES_MISC = [
1525
1541
  DocCfg(id='032735', author=GORDON_GETTY, description=f"on Trump", date='2018-03-20'), # Dated based on concurrent emails from Getty
1526
1542
  DocCfg(id='025540', author=JEFFREY_EPSTEIN, description=f"rough draft of Epstein's side of the story?"),
1527
1543
  DocCfg(id='026634', author='Michael Carrier', description=f"comments about an Apollo linked hedge fund 'DE Fund VIII'"),
1528
- DocCfg(id='031425', author=SCOTT_J_LINK, description=f'completely redacted email from'),
1544
+ DocCfg(id='031425', author=SCOTT_J_LINK, description=f'completely redacted email from', is_interesting=False),
1529
1545
  DocCfg(id='020447', author='Working Group on Chinese Influence Activities in the U.S.', description=f'Promoting Constructive Vigilance'),
1530
1546
  DocCfg(id='031743', description=f'a few pages describing the internet as a "New Nation State" (Network State?)'),
1531
1547
  DocCfg(id='012718', description=f"{CVRA} congressional record", date='2011-06-17'),
@@ -1542,7 +1558,7 @@ OTHER_FILES_MISC = [
1542
1558
  date='2000-06-07',
1543
1559
  description=f"{PRESS_RELEASE} announcing Donald Trump & {NICHOLAS_RIBIS} ended their working relationship at Trump's casino",
1544
1560
  ),
1545
- DocCfg(id='029328', description=f"Rafanelli Events promotional deck"),
1561
+ DocCfg(id='029328', description=f"Rafanelli Events promotional deck", is_interesting=False),
1546
1562
  DocCfg(id='033434', description=f"{SCREENSHOT} iPhone chat labeled 'Edwards' at the top"),
1547
1563
  DocCfg(id='029475', description=f'{VIRGIN_ISLANDS} Twin City Mobile Integrated Health Services (TCMIH) proposal/request for donation'),
1548
1564
  DocCfg(id='029448', description=f"weird short essay titled 'President Obama and Self-Deception'"),
@@ -1577,7 +1593,6 @@ OTHER_FILES_CATEGORIES = [
1577
1593
  REPUTATION,
1578
1594
  'RESUMES',
1579
1595
  SOCIAL,
1580
- SPEECH,
1581
1596
  ]
1582
1597
 
1583
1598
  OTHER_FILES_CONFIG = []
@@ -1602,6 +1617,9 @@ for cfg in ALL_CONFIGS:
1602
1617
 
1603
1618
  # Add extra config objects for duplicate files that match the config of file they are duplicating
1604
1619
  for dupe_cfg in cfg.duplicate_cfgs():
1620
+ if not isinstance(dupe_cfg, EmailCfg):
1621
+ logger.debug(f"Generated synthetic config for dupe: {dupe_cfg}")
1622
+
1605
1623
  ALL_FILE_CONFIGS[dupe_cfg.id] = dupe_cfg
1606
1624
 
1607
1625
 
@@ -26,6 +26,8 @@ date_str = lambda dt: dt.isoformat()[0:10] if dt else None
26
26
  escape_double_quotes = lambda text: text.replace('"', r'\"')
27
27
  escape_single_quotes = lambda text: text.replace("'", r"\'")
28
28
  iso_timestamp = lambda dt: dt.isoformat().replace('T', ' ')
29
+ days_between = lambda dt1, dt2: (dt2 - dt1).days + 1
30
+ days_between_str = lambda dt1, dt2: f"{days_between(dt1, dt2)} day" + ('s' if days_between(dt1, dt2) > 1 else '')
29
31
  remove_zero_time_from_timestamp_str = lambda dt: dt.isoformat().removesuffix('T00:00:00')
30
32
  uniquify = lambda _list: list(set(_list))
31
33
  without_falsey = lambda _list: [e for e in _list if e]
@@ -65,10 +65,10 @@ class DocCfg:
65
65
  author (str | None): Author of the document (if any)
66
66
  category (str | None): Type of file
67
67
  date (str | None): If passed will be immediated parsed into the 'timestamp' field
68
- dupe_of_id (str | None): If this is a dupe the ID of the duplicated file. This file will be suppressed
69
68
  dupe_type (DuplicateType | None): The type of duplicate this file is or its 'duplicate_ids' are
70
69
  duplicate_ids (list[str]): IDs of *other* documents that are dupes of this document
71
- is_interesting (bool): Override other considerations and always consider this file interesting
70
+ duplicate_of_id (str | None): If this is a dupe the ID of the duplicated file. This file will be suppressed
71
+ is_interesting (bool | None): Override other considerations and always consider this file interesting (or not)
72
72
  timestamp (datetime | None): Time this email was sent, file was created, article published, etc.
73
73
  is_synthetic (bool): True if this config was generated by the duplicate_cfgs() method
74
74
  """
@@ -77,10 +77,10 @@ class DocCfg:
77
77
  category: str | None = None
78
78
  date: str | None = None
79
79
  description: str | None = None
80
- dupe_of_id: str | None = None
81
80
  dupe_type: DuplicateType | None = None
82
81
  duplicate_ids: list[str] = field(default_factory=list)
83
- is_interesting: bool = False
82
+ duplicate_of_id: str | None = None
83
+ is_interesting: bool | None = None
84
84
  is_synthetic: bool = False
85
85
  timestamp: datetime | None = None
86
86
 
@@ -88,7 +88,7 @@ class DocCfg:
88
88
  if self.date:
89
89
  self.timestamp = parse(self.date)
90
90
 
91
- if self.dupe_of_id or self.duplicate_ids:
91
+ if self.duplicate_of_id or self.duplicate_ids:
92
92
  self.dupe_type = self.dupe_type or SAME
93
93
 
94
94
  def complete_description(self) -> str | None:
@@ -115,11 +115,11 @@ class DocCfg:
115
115
  return ' '.join(pieces) if pieces else None
116
116
 
117
117
  def duplicate_cfgs(self) -> Generator['DocCfg', None, None]:
118
- """Create synthetic DocCfg objects that set the 'dupe_of_id' field to point back to this object."""
118
+ """Create synthetic DocCfg objects that set the 'duplicate_of_id' field to point back to this object."""
119
119
  for id in self.duplicate_ids:
120
120
  dupe_cfg = deepcopy(self)
121
121
  dupe_cfg.id = id
122
- dupe_cfg.dupe_of_id = self.id
122
+ dupe_cfg.duplicate_of_id = self.id
123
123
  dupe_cfg.duplicate_ids = []
124
124
  dupe_cfg.dupe_type = self.dupe_type
125
125
  dupe_cfg.is_synthetic = True
epstein_files/util/env.py CHANGED
@@ -31,8 +31,8 @@ output.add_argument('--output-other', '-oo', action='store_true', help='generate
31
31
  output.add_argument('--output-texts', '-ot', action='store_true', help='generate text messages section')
32
32
  output.add_argument('--sort-alphabetical', action='store_true', help='sort emailers alphabetically intead of by email count')
33
33
  output.add_argument('--suppress-output', action='store_true', help='no output to terminal (use with --build)')
34
+ output.add_argument('--uninteresting', action='store_true', help='only output uninteresting other files')
34
35
  output.add_argument('--width', '-w', type=int, default=DEFAULT_WIDTH, help='screen width to use (in characters)')
35
- output.add_argument('--use-epstein-web', action='store_true', help='use epsteinweb.org links instead of epstein.media')
36
36
 
37
37
  scripts = parser.add_argument_group('SCRIPTS', 'Options used by epstein_search, epstein_show, and epstein_diff.')
38
38
  scripts.add_argument('positional_args', nargs='*', help='strings to searchs for, file IDs to show or diff, etc.')
@@ -66,7 +66,7 @@ is_html_script = current_script in HTML_SCRIPTS
66
66
 
67
67
  args.debug = args.deep_debug or args.debug or is_env_var_set('DEBUG')
68
68
  args.output_emails = args.output_emails or args.all_emails
69
- args.output_other = args.output_other or args.all_other_files
69
+ args.output_other = args.output_other or args.all_other_files or args.uninteresting
70
70
  args.overwrite_pickle = args.overwrite_pickle or (is_env_var_set('OVERWRITE_PICKLE') and not is_env_var_set('PICKLED'))
71
71
  args.width = args.width if is_html_script else None
72
72
  is_output_selected = any([arg.startswith('output_') and value for arg, value in vars(args).items()])
@@ -90,8 +90,5 @@ if current_script == 'epstein_generate' and not (is_output_selected or args.make
90
90
  logger.warning(f"No output section chosen; outputting default selection of texts, selected emails, and other files...")
91
91
  args.output_texts = args.output_emails = args.output_other = True
92
92
 
93
- if args.use_epstein_web:
94
- logger.warning(f"Using links to epsteinweb.org links instead of epsteinify.com...")
95
-
96
93
  if args.debug:
97
94
  logger.warning(f"Invocation args:\ncurrent_script={current_script}\nis_html_script={is_html_script},\nis_output_selected={is_output_selected}\nspecified_names={specified_names},\nargs={args}")
@@ -373,14 +373,6 @@ HIGHLIGHTED_NAMES = [
373
373
  style='color(168)',
374
374
  pattern=r'BOJ|(Bank\s+of\s+)?Japan(ese)?|jpy?(?! Morgan)|SG|Singapore|Toky[op]',
375
375
  ),
376
- HighlightedNames(
377
- label='javanka',
378
- style='medium_violet_red',
379
- emailers = {
380
- IVANKA: None,
381
- JARED_KUSHNER: None,
382
- }
383
- ),
384
376
  HighlightedNames(
385
377
  label=JOURNALIST,
386
378
  style='bright_yellow',
@@ -404,7 +396,7 @@ HIGHLIGHTED_NAMES = [
404
396
  HighlightedNames(
405
397
  label='law enforcement',
406
398
  style='color(24) bold',
407
- pattern=r'ag|(Alicia\s*)?Valle|AML|(Andrew\s*)?McCabe|attorney|((Bob|Robert)\s*)?Mueller|(Byung\s)?Pak|CFTC?|CIA|CIS|CVRA|Dep(artmen)?t\.?\s*of\s*(the\s*)?(Justice|Treasury)|DHS|DOJ|FBI|FCPA|FDIC|Federal\s*Bureau\s*of\s*Investigation|FinCEN|FINRA|FOIA|FTC|IRS|(James\s*)?Comey|(Jennifer\s*Shasky\s*)?Calvery|((Judge|Mark)\s*)?(Carney|Filip)|(Kirk )?Blouin|KYC|NIH|NS(A|C)|OCC|OFAC|(Lann?a\s*)?Belohlavek|lawyer|(Michael\s*)?Reiter|OGE|Office\s*of\s*Government\s*Ethics|Police Code Enforcement|(Preet\s*)?Bharara|SCOTUS|SD(FL|NY)|Southern\s*District\s*of\s*(Florida|New\s*York)|SEC|Secret\s*Service|Securities\s*and\s*Exchange\s*Commission|State\s*Dep(artmen)?t|Strzok|Supreme\s*Court|Treasury\s*(Dep(artmen)?t|Secretary)|TSA|USAID|(William\s*J\.?\s*)?Zloch',
399
+ pattern=r'ag|(Alicia\s*)?Valle|AML|(Andrew\s*)?McCabe|attorney|((Bob|Robert)\s*)?Mueller|(Byung\s)?Pak|CFTC?|CIA|CIS|CVRA|Dep(artmen)?t\.?\s*of\s*(the\s*)?(Justice|Treasury)|DHS|DOJ|FBI|FCPA|FDIC|Federal\s*Bureau\s*of\s*Investigation|FinCEN|FINRA|FOIA|FTC|IRS|(James\s*)?Comey|(Jennifer\s*Shasky\s*)?Calvery|((Judge|Mark)\s*)?(Carney|Filip)|(Kirk )?Blouin|KYC|NIH|NS(A|C)|OCC|OFAC|(Lann?a\s*)?Belohlavek|lawyer|(Michael\s*)?Reiter|OGE|Office\s*of\s*Government\s*Ethics|Police Code Enforcement|(Preet\s*)?Bharara|SCOTUS|SD(FL|NY)|SEC|Secret\s*Service|Securities\s*and\s*Exchange\s*Commission|Southern\s*District\s*of\s*(Florida|New\s*York)|State\s*Dep(artmen)?t|Strzok|Supreme\s*Court|Treasury\s*(Dep(artmen)?t|Secretary)|TSA|USAID|(William\s*J\.?\s*)?Zloch',
408
400
  emailers = {
409
401
  ANN_MARIE_VILLAFANA: 'southern district of Florida U.S. Attorney',
410
402
  DANNY_FROST: 'Director of Communications at Manhattan DA',
@@ -476,7 +468,7 @@ HIGHLIGHTED_NAMES = [
476
468
  pattern=r'Alberto\sGonzale[sz]|(Alex\s*)?Acosta|(Bill\s*)?Barr|Bill\s*Shine|(Bob\s*)?Corker|(John\s*(R.?\s*)?)Bolton|Broidy|(Chris\s)?Christie|Devin\s*Nunes|(Don\s*)?McGa[hn]n|McMaster|(George\s*)?Nader|GOP|(Brett\s*)?Kavanaugh|Kissinger|Kobach|Koch\s*Brothers|Kolfage|Kudlow|Lewandowski|(Marco\s)?Rubio|(Mark\s*)Meadows|Mattis|McCain|(?<!Merwin Dela )Cruz|(Michael\s)?Hayden|((General|Mike)\s*)?(Flynn|Pence)|(Mitt\s*)?Romney|Mnuchin|Nikki|Haley|(Paul\s+)?(Manafort|Volcker)|(Peter\s)?Navarro|Pompeo|Reagan|Reince|Priebus|Republican|(Rex\s*)?Tillerson|(?<!Cynthia )(Richard\s*)?Nixon|Sasse|Tea\s*Party',
477
469
  # There's no emails from these people, they're just here to automate the regex creation for both first + last names
478
470
  emailers = {
479
- RUDY_GIULIANI: 'disbarred formed mayor of New York City',
471
+ RUDY_GIULIANI: None,
480
472
  TULSI_GABBARD: None,
481
473
  },
482
474
  ),
@@ -484,7 +476,7 @@ HIGHLIGHTED_NAMES = [
484
476
  label='Rothschild family',
485
477
  style='indian_red',
486
478
  emailers={
487
- ARIANE_DE_ROTHSCHILD: None,
479
+ ARIANE_DE_ROTHSCHILD: 'heiress',
488
480
  JOHNNY_EL_HACHEM: f'Works with {ARIANE_DE_ROTHSCHILD}',
489
481
  },
490
482
  ),
@@ -504,7 +496,7 @@ HIGHLIGHTED_NAMES = [
504
496
  style='light_goldenrod2',
505
497
  pattern=r'Alain Forget|Brotherton|Carl\s*Sagan|Columbia|David Grosof|J(ames|im)\s*Watson|(Lord\s*)?Martin\s*Rees|Massachusetts\s*Institute\s*of\s*Technology|MIT(\s*Media\s*Lab)?|Media\s*Lab|Minsky|((Noam|Valeria)\s*)?Chomsky|Norman\s*Finkelstein|Praluent|Regeneron|(Richard\s*)?Dawkins|Sanofi|Stanford|(Stephen\s*)?Hawking|(Steven?\s*)?Pinker|UCLA',
506
498
  emailers = {
507
- DAVID_HAIG: None,
499
+ DAVID_HAIG: 'evolutionary geneticist?',
508
500
  JOSCHA_BACH: 'cognitive science / AI research',
509
501
  'Daniel Kahneman': 'Nobel economic sciences laureate and cognitivie psychologist (?)',
510
502
  'Ed Boyden': 'Associate Professor, MIT Media Lab neurobiology',
@@ -538,7 +530,7 @@ HIGHLIGHTED_NAMES = [
538
530
  HighlightedNames(
539
531
  label='trump',
540
532
  style='red3 bold',
541
- pattern=r"@?realDonaldTrump|(Alan\s*)?Weiss?elberg|\bDJ?T\b|Donald J. Tramp|(Donald\s+(J\.\s+)?)?Trump(ism|\s*Properties)?|Don(ald| *Jr)(?! Rubin)|Ivana|(Madeleine\s*)?Westerhout|Mar[-\s]*a[-\s]*Lago|(Marla\s*)?Maples|(Matt(hew)? )?Calamari|\bMatt C\b|Melania|(Michael (J.? )?)?Boccio|Rebekah\s*Mercer|Roger\s+Stone|rona|(The\s*)?Art\s*of\s*the\s*Deal",
533
+ pattern=r"@?realDonaldTrump|(Alan\s*)?Weiss?elberg|\bDJ?T\b|Donald J. Tramp|(Donald\s+(J\.\s+)?)?Trump(ism|\s*Properties)?|Don(ald| *Jr)(?! Rubin)|Ivank?a|Jared|Kushner|(Madeleine\s*)?Westerhout|Mar[-\s]*a[-\s]*Lago|(Marla\s*)?Maples|(Matt(hew)? )?Calamari|\bMatt C\b|Melania|(Michael (J.? )?)?Boccio|Rebekah\s*Mercer|Roger\s+Stone|rona|(The\s*)?Art\s*of\s*the\s*Deal",
542
534
  emailers = {
543
535
  'Bruce Moskowitz': "'Trump's health guy' according to Epstein",
544
536
  },
@@ -560,7 +552,7 @@ HIGHLIGHTED_NAMES = [
560
552
  HighlightedNames(
561
553
  label=VIRGIN_ISLANDS,
562
554
  style='sea_green1',
563
- pattern=r'Antigua|Bahamas|Caribb?ean|Dominican\s*Republic|(Great|Little)\s*St.?\s*James|Haiti(an)?|(John\s*)deJongh(\s*Jr\.?)|(Kenneth E\. )?Mapp|Palm\s*Beach(?!\s*Post)|PBI|S(ain)?t.?\s*Thomas|USVI|VI|(The\s*)?Virgin\s*Islands(\s*Daily\s*News)?', # TODO: VI Daily News should be yellow but it's hard bc Daily News xists
555
+ pattern=r'Antigua|Bahamas|Caribb?ean|Dominican\s*Republic|(Great|Little)\s*St.?\s*James|Haiti(an)?|(John\s*)deJongh(\s*Jr\.?)|(Kenneth E\. )?Mapp|Palm\s*Beach(?!\s*Post)|PBI|S(ain)?t.?\s*Thomas|USVI|(?<!Epstein )VI|(The\s*)?Virgin\s*Islands(\s*Daily\s*News)?', # TODO: VI Daily News should be yellow but it's hard bc Daily News xists
564
556
  emailers = {
565
557
  CECILE_DE_JONGH: f'First lady 2007-2015',
566
558
  STACEY_PLASKETT: 'non-voting member of Congress',
@@ -669,7 +661,7 @@ def get_info_for_name(name: str) -> str | None:
669
661
  def get_style_for_category(category: str) -> str | None:
670
662
  if category in CATEGORY_STYLES:
671
663
  return CATEGORY_STYLES[category]
672
- elif category in [CONFERENCE, SPEECH]:
664
+ elif category == CONFERENCE:
673
665
  return f"{get_style_for_category(ACADEMIA)} dim"
674
666
  elif category == SOCIAL:
675
667
  return get_style_for_category(PUBLICIST)
@@ -32,8 +32,6 @@ DEFAULT_EMAILERS = [
32
32
  MASHA_DROKOVA,
33
33
  RENATA_BOLOTOVA,
34
34
  STEVE_BANNON,
35
- OLIVIER_COLOM,
36
- BORIS_NIKOLIC,
37
35
  PRINCE_ANDREW,
38
36
  JIDE_ZEITLIN,
39
37
  DAVID_STERN,
@@ -60,7 +58,7 @@ if len(set(DEFAULT_EMAILERS).intersection(set(DEFAULT_EMAILER_TABLES))) > 0:
60
58
  def print_emails(epstein_files: EpsteinFiles) -> int:
61
59
  """Returns number of emails printed."""
62
60
  print_section_header(('Selections from ' if not args.all_emails else '') + 'His Emails')
63
- print_other_site_link(is_header=False)
61
+ print_all_files_page_link(epstein_files)
64
62
  emailers_to_print: list[str | None]
65
63
  emailer_tables: list[str | None] = []
66
64
  already_printed_emails: list[Email] = []
@@ -69,7 +67,7 @@ def print_emails(epstein_files: EpsteinFiles) -> int:
69
67
  if specified_names:
70
68
  emailers_to_print = specified_names
71
69
  else:
72
- epstein_files.print_emailer_counts_table()
70
+ print_centered(Padding(epstein_files.table_of_emailers(), (2, 0)))
73
71
 
74
72
  if args.all_emails:
75
73
  emailers_to_print = sorted(epstein_files.all_emailers(), key=lambda e: epstein_files.earliest_email_at(e))
@@ -105,8 +103,8 @@ def print_emails(epstein_files: EpsteinFiles) -> int:
105
103
  if args.all_emails:
106
104
  _verify_all_emails_were_printed(epstein_files, already_printed_emails)
107
105
 
108
- fwded_articles = [e for e in already_printed_emails if e.config and e.config.is_fwded_article]
109
- log_msg = f"Rewrote {len(Email.rewritten_header_ids)} email headers (out of {len(already_printed_emails)})"
106
+ fwded_articles = [e for e in already_printed_emails if e.config and e.is_fwded_article()]
107
+ log_msg = f"Rewrote {len(Email.rewritten_header_ids)} of {len(already_printed_emails)} email headers"
110
108
  logger.warning(f"{log_msg}, {len(fwded_articles)} of the emails were forwarded articles.")
111
109
  return len(already_printed_emails)
112
110
 
@@ -125,17 +123,6 @@ def print_json_files(epstein_files: EpsteinFiles):
125
123
  console.print_json(json_file.json_str(), indent=4, sort_keys=False)
126
124
 
127
125
 
128
- def write_json_metadata(epstein_files: EpsteinFiles) -> None:
129
- json_str = epstein_files.json_metadata()
130
-
131
- if args.build:
132
- with open(JSON_METADATA_PATH, 'w') as f:
133
- f.write(json_str)
134
- log_file_write(JSON_METADATA_PATH)
135
- else:
136
- console.print_json(json_str, indent=4, sort_keys=True)
137
-
138
-
139
126
  def print_json_stats(epstein_files: EpsteinFiles) -> None:
140
127
  console.line(5)
141
128
  console.print(Panel('JSON Stats Dump', expand=True, style='reverse bold'), '\n')
@@ -149,21 +136,19 @@ def print_json_stats(epstein_files: EpsteinFiles) -> None:
149
136
  print_json("count_by_month", count_by_month(epstein_files.all_documents()))
150
137
 
151
138
 
152
- def print_text_messages(epstein_files: EpsteinFiles) -> None:
153
- print_section_header('Text Messages')
154
- print_centered("(conversations are sorted chronologically based on timestamp of first message)\n", style='gray30')
155
- authors: list[str | None] = specified_names if specified_names else [JEFFREY_EPSTEIN]
156
- log_files = epstein_files.imessage_logs_for(authors)
157
-
158
- for log_file in log_files:
159
- console.print(Padding(log_file))
160
- console.line(2)
139
+ def write_json_metadata(epstein_files: EpsteinFiles) -> None:
140
+ json_str = epstein_files.json_metadata()
161
141
 
162
- epstein_files.print_imessage_summary()
142
+ if args.build:
143
+ with open(JSON_METADATA_PATH, 'w') as f:
144
+ f.write(json_str)
145
+ log_file_write(JSON_METADATA_PATH)
146
+ else:
147
+ console.print_json(json_str, indent=4, sort_keys=True)
163
148
 
164
149
 
165
150
  def write_urls() -> None:
166
- """Write _URL style constant variables to a file bash scripts can load as env vars."""
151
+ """Write _URL style constant variables to URLS_ENV file so bash scripts can load as env vars."""
167
152
  url_vars = {k: v for k, v in vars(output_files).items() if k.endswith('URL') and not k.startswith('GH')}
168
153
 
169
154
  if not args.suppress_output:
@@ -190,8 +175,8 @@ def _verify_all_emails_were_printed(epstein_files: EpsteinFiles, already_printed
190
175
  logger.warning(f"Printed {len(already_printed_emails):,} emails of {len(email_ids_that_were_printed):,} unique file IDs.")
191
176
  missed_an_email = False
192
177
 
193
- for email in epstein_files.emails:
194
- if email.file_id not in email_ids_that_were_printed and not email.is_duplicate():
178
+ for email in epstein_files.non_duplicate_emails():
179
+ if email.file_id not in email_ids_that_were_printed:
195
180
  logger.warning(f"Failed to print {email.summary()}")
196
181
  missed_an_email = True
197
182