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.
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/__init__.py +1 -1
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/__init__.py +1 -1
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Gmail.py +53 -1
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/__init__.py +1 -1
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/webapp.html +1 -0
- {medicafe-0.250909.0/medicafe.egg-info → medicafe-0.250912.0}/PKG-INFO +1 -1
- {medicafe-0.250909.0 → medicafe-0.250912.0/medicafe.egg-info}/PKG-INFO +1 -1
- {medicafe-0.250909.0 → medicafe-0.250912.0}/setup.py +1 -1
- {medicafe-0.250909.0 → medicafe-0.250912.0}/LICENSE +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MANIFEST.in +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot.bat +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Charges.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Crosswalk_Library.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Crosswalk_Utils.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Notepad_Utils.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Post.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Preprocessor.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_Preprocessor_lib.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_UI.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_dataformat_library.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_debug.bat +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_docx_decoder.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/MediBot_smart_import.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/clear_cache.bat +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/crash_diagnostic.bat +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/f_drive_diagnostic.bat +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/full_debug_suite.bat +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/get_medicafe_version.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/process_csvs.bat +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/update_json.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediBot/update_medicafe.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/MediLink_ConfigLoader.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/__main__.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/api_core.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/api_factory.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/api_utils.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/core_utils.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/deductible_utils.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/graphql_utils.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/logging_config.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/logging_demo.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/migration_helpers.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/smart_import.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediCafe/submission_index.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/InsuranceTypeService.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_837p_cob_library.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_837p_encoder.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_837p_encoder_library.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_837p_utilities.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_API_Generator.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Azure.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Charges.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_ClaimStatus.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_DataMgmt.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Decoder.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Deductible.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Deductible_Validator.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Display_Utils.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Down.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Mailer.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Parser.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_PatientProcessor.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Scan.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Scheduler.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_UI.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_Up.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_insurance_utils.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_main.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/MediLink_smart_import.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/Soumit_api.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/gmail_http_utils.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/gmail_oauth_utils.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/openssl.cnf +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/MediLink/test.py +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/README.md +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/medicafe.egg-info/SOURCES.txt +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/medicafe.egg-info/dependency_links.txt +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/medicafe.egg-info/entry_points.txt +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/medicafe.egg-info/not-zip-safe +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/medicafe.egg-info/requires.txt +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/medicafe.egg-info/top_level.txt +0 -0
- {medicafe-0.250909.0 → medicafe-0.250912.0}/setup.cfg +0 -0
@@ -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":
|
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
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|