medicafe 0.250909.0__tar.gz → 0.250912.0__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.
Files changed (83) hide show
  1. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/__init__.py +1 -1
  2. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/__init__.py +1 -1
  3. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Gmail.py +53 -1
  4. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/__init__.py +1 -1
  5. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/webapp.html +1 -0
  6. {medicafe-0.250909.0/medicafe.egg-info → medicafe-0.250912.0}/PKG-INFO +1 -1
  7. {medicafe-0.250909.0 → medicafe-0.250912.0/medicafe.egg-info}/PKG-INFO +1 -1
  8. {medicafe-0.250909.0 → medicafe-0.250912.0}/setup.py +1 -1
  9. {medicafe-0.250909.0 → medicafe-0.250912.0}/LICENSE +0 -0
  10. {medicafe-0.250909.0 → medicafe-0.250912.0}/MANIFEST.in +0 -0
  11. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot.bat +0 -0
  12. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot.py +0 -0
  13. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Charges.py +0 -0
  14. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Crosswalk_Library.py +0 -0
  15. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Crosswalk_Utils.py +0 -0
  16. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Notepad_Utils.py +0 -0
  17. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Post.py +0 -0
  18. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Preprocessor.py +0 -0
  19. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Preprocessor_lib.py +0 -0
  20. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_UI.py +0 -0
  21. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_dataformat_library.py +0 -0
  22. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_debug.bat +0 -0
  23. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_docx_decoder.py +0 -0
  24. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_smart_import.py +0 -0
  25. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/clear_cache.bat +0 -0
  26. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/crash_diagnostic.bat +0 -0
  27. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/f_drive_diagnostic.bat +0 -0
  28. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/full_debug_suite.bat +0 -0
  29. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/get_medicafe_version.py +0 -0
  30. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/process_csvs.bat +0 -0
  31. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/update_json.py +0 -0
  32. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/update_medicafe.py +0 -0
  33. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/MediLink_ConfigLoader.py +0 -0
  34. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/__main__.py +0 -0
  35. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/api_core.py +0 -0
  36. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/api_factory.py +0 -0
  37. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/api_utils.py +0 -0
  38. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/core_utils.py +0 -0
  39. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/deductible_utils.py +0 -0
  40. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/graphql_utils.py +0 -0
  41. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/logging_config.py +0 -0
  42. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/logging_demo.py +0 -0
  43. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/migration_helpers.py +0 -0
  44. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/smart_import.py +0 -0
  45. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/submission_index.py +0 -0
  46. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/InsuranceTypeService.py +0 -0
  47. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_837p_cob_library.py +0 -0
  48. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_837p_encoder.py +0 -0
  49. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_837p_encoder_library.py +0 -0
  50. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_837p_utilities.py +0 -0
  51. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_API_Generator.py +0 -0
  52. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Azure.py +0 -0
  53. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Charges.py +0 -0
  54. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_ClaimStatus.py +0 -0
  55. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_DataMgmt.py +0 -0
  56. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Decoder.py +0 -0
  57. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Deductible.py +0 -0
  58. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Deductible_Validator.py +0 -0
  59. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Display_Utils.py +0 -0
  60. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Down.py +0 -0
  61. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Mailer.py +0 -0
  62. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Parser.py +0 -0
  63. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_PatientProcessor.py +0 -0
  64. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Scan.py +0 -0
  65. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Scheduler.py +0 -0
  66. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_UI.py +0 -0
  67. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Up.py +0 -0
  68. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_insurance_utils.py +0 -0
  69. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_main.py +0 -0
  70. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_smart_import.py +0 -0
  71. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/Soumit_api.py +0 -0
  72. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/gmail_http_utils.py +0 -0
  73. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/gmail_oauth_utils.py +0 -0
  74. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/openssl.cnf +0 -0
  75. {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/test.py +0 -0
  76. {medicafe-0.250909.0 → medicafe-0.250912.0}/README.md +0 -0
  77. {medicafe-0.250909.0 → medicafe-0.250912.0}/medicafe.egg-info/SOURCES.txt +0 -0
  78. {medicafe-0.250909.0 → medicafe-0.250912.0}/medicafe.egg-info/dependency_links.txt +0 -0
  79. {medicafe-0.250909.0 → medicafe-0.250912.0}/medicafe.egg-info/entry_points.txt +0 -0
  80. {medicafe-0.250909.0 → medicafe-0.250912.0}/medicafe.egg-info/not-zip-safe +0 -0
  81. {medicafe-0.250909.0 → medicafe-0.250912.0}/medicafe.egg-info/requires.txt +0 -0
  82. {medicafe-0.250909.0 → medicafe-0.250912.0}/medicafe.egg-info/top_level.txt +0 -0
  83. {medicafe-0.250909.0 → medicafe-0.250912.0}/setup.cfg +0 -0
@@ -19,7 +19,7 @@ Smart Import Integration:
19
19
  medibot_main = get_components('medibot_main')
20
20
  """
21
21
 
22
- __version__ = "0.250909.0"
22
+ __version__ = "0.250912.0"
23
23
  __author__ = "Daniel Vidaud"
24
24
  __email__ = "daniel@personalizedtransformation.com"
25
25
 
@@ -27,7 +27,7 @@ Smart Import System:
27
27
  api_suite = get_api_access()
28
28
  """
29
29
 
30
- __version__ = "0.250909.0"
30
+ __version__ = "0.250912.0"
31
31
  __author__ = "Daniel Vidaud"
32
32
  __email__ = "daniel@personalizedtransformation.com"
33
33
 
@@ -185,10 +185,30 @@ class RequestHandler(BaseHTTPRequestHandler):
185
185
  file_ids = [link.get('fileId', None) for link in links if link.get('fileId')]
186
186
  log("File IDs received from client: {}".format(file_ids))
187
187
  download_docx_files(links)
188
+ # Only delete files that actually downloaded successfully
189
+ downloaded_names = load_downloaded_emails()
190
+ successful_ids = []
191
+ try:
192
+ name_to_id = { (link.get('filename') or ''): link.get('fileId') for link in links if link.get('fileId') }
193
+ for name in downloaded_names:
194
+ fid = name_to_id.get(name)
195
+ if fid:
196
+ successful_ids.append(fid)
197
+ except Exception as e:
198
+ log("Error computing successful file IDs for cleanup: {}".format(e))
199
+ successful_ids = file_ids # Fallback: attempt all provided IDs
200
+ # Trigger cleanup in Apps Script with auth
201
+ try:
202
+ if successful_ids:
203
+ send_delete_request_to_gas(successful_ids)
204
+ else:
205
+ log("No successful file IDs to delete after download.")
206
+ except Exception as e:
207
+ log("Cleanup trigger failed: {}".format(e))
188
208
  self.send_response(200)
189
209
  self._set_headers()
190
210
  self.end_headers()
191
- response = json.dumps({"status": "success", "message": "All files downloaded", "fileIds": file_ids})
211
+ response = json.dumps({"status": "success", "message": "All files downloaded", "fileIds": successful_ids})
192
212
  self.wfile.write(response.encode('utf-8'))
193
213
  shutdown_event.set()
194
214
  bring_window_to_foreground()
@@ -437,6 +457,38 @@ def handle_post_response(url, payload, headers):
437
457
  log("Unexpected error during link retrieval initiation: {}".format(e))
438
458
  shutdown_event.set()
439
459
 
460
+ def send_delete_request_to_gas(file_ids):
461
+ """Send a delete_files action to the Apps Script web app for the provided Drive file IDs.
462
+ Relies on OAuth token previously obtained. Sends user notifications via GAS.
463
+ """
464
+ try:
465
+ medi = extract_medilink_config(config)
466
+ url = "https://script.google.com/macros/s/{}/exec".format(medi.get('webapp_deployment_id', ''))
467
+ access_token = get_access_token()
468
+ if not access_token:
469
+ log("Access token not found. Skipping cleanup request to GAS.")
470
+ return
471
+ headers = {'Authorization': 'Bearer {}'.format(access_token), 'Content-Type': 'application/json'}
472
+ payload = {"action": "delete_files", "fileIds": list(file_ids)}
473
+ log("Initiating cleanup request to GAS. Payload size: {} id(s)".format(len(file_ids)))
474
+ resp = requests.post(url, json=payload, headers=headers)
475
+ log("Cleanup response status: {}".format(resp.status_code))
476
+ # Print a concise console message
477
+ if resp.ok:
478
+ try:
479
+ body = resp.json()
480
+ msg = body.get('message', 'Files deleted successfully') if isinstance(body, dict) else 'Files deleted successfully'
481
+ except Exception:
482
+ msg = 'Files deleted successfully'
483
+ print("Cleanup complete: {} ({} file(s))".format(msg, len(file_ids)))
484
+ else:
485
+ print("Cleanup failed with status {}: {}".format(resp.status_code, resp.text))
486
+ if resp.status_code != 200:
487
+ raise RuntimeError("Cleanup request failed with status {}".format(resp.status_code))
488
+ except Exception as e:
489
+ log("Error sending delete request to GAS: {}".format(e))
490
+ print("Cleanup request error: {}".format(e))
491
+
440
492
  def inspect_token(access_token):
441
493
  return http_inspect_token(access_token, log, delete_token_file_fn=delete_token_file, stop_server_fn=stop_server)
442
494
 
@@ -22,7 +22,7 @@ Smart Import Integration:
22
22
  datamgmt = get_components('medilink_datamgmt')
23
23
  """
24
24
 
25
- __version__ = "0.250909.0"
25
+ __version__ = "0.250912.0"
26
26
  __author__ = "Daniel Vidaud"
27
27
  __email__ = "daniel@personalizedtransformation.com"
28
28
 
@@ -402,6 +402,7 @@
402
402
  links: downloadLinks.map(link => ({
403
403
  url: link.url,
404
404
  filename: link.filename,
405
+ fileId: link.fileId,
405
406
  }))
406
407
  }),
407
408
  mode: 'cors' // Ensure the request includes CORS headers
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: medicafe
3
- Version: 0.250909.0
3
+ Version: 0.250912.0
4
4
  Summary: MediCafe
5
5
  Home-page: https://github.com/katanada2/MediCafe
6
6
  Author: Daniel Vidaud
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: medicafe
3
- Version: 0.250909.0
3
+ Version: 0.250912.0
4
4
  Summary: MediCafe
5
5
  Home-page: https://github.com/katanada2/MediCafe
6
6
  Author: Daniel Vidaud
@@ -54,7 +54,7 @@ if long_description_text is None:
54
54
 
55
55
  setup(
56
56
  name='medicafe',
57
- version="0.250909.0",
57
+ version="0.250912.0",
58
58
  description='MediCafe',
59
59
  long_description=long_description_text,
60
60
  long_description_content_type='text/markdown',
File without changes
File without changes
File without changes
File without changes