Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -116,9 +116,9 @@ def preprocess_text(text):
|
|
116 |
return text.strip()
|
117 |
|
118 |
def sanitize_json_text(text):
|
|
|
119 |
text = re.sub(r'[\x00-\x08\x0B\x0C\x0E-\x1F]', '', text)
|
120 |
-
|
121 |
-
return text
|
122 |
|
123 |
# =============================================================================
|
124 |
# βββββββββββββ COSMOS DB FUNCTIONS βββββββββββββ
|
@@ -155,15 +155,16 @@ def update_record(container, updated_record):
|
|
155 |
def delete_record(container, record):
|
156 |
try:
|
157 |
doc_id = record["id"]
|
158 |
-
partition_key_value = record.get("pk", doc_id)
|
|
|
159 |
container.delete_item(item=doc_id, partition_key=partition_key_value)
|
160 |
return True, f"Record {doc_id} deleted. ποΈ"
|
161 |
except exceptions.CosmosResourceNotFoundError:
|
162 |
-
return True, f"Record {doc_id} not found. ποΈ"
|
163 |
except exceptions.CosmosHttpResponseError as e:
|
164 |
-
return False, f"HTTP error: {str(e)} π¨"
|
165 |
except Exception as e:
|
166 |
-
return False, f"
|
167 |
|
168 |
def save_to_cosmos_db(container, query, response1, response2):
|
169 |
try:
|
@@ -366,9 +367,13 @@ def edit_all_documents(container):
|
|
366 |
with col_save:
|
367 |
if st.button("πΎ Save", key=f"save_{doc['id']}"):
|
368 |
try:
|
369 |
-
|
|
|
|
|
|
|
370 |
updated_doc['id'] = doc['id']
|
371 |
updated_doc['pk'] = doc.get('pk', doc['id'])
|
|
|
372 |
for field in ['_ts', '_rid', '_self', '_etag', '_attachments']:
|
373 |
updated_doc.pop(field, None)
|
374 |
success, message = update_record(container, updated_doc)
|
@@ -377,8 +382,8 @@ def edit_all_documents(container):
|
|
377 |
st.session_state[doc_key] = json.dumps(updated_doc, indent=2)
|
378 |
else:
|
379 |
st.error(message)
|
380 |
-
except json.JSONDecodeError:
|
381 |
-
st.error("Invalid JSON format
|
382 |
except Exception as e:
|
383 |
st.error(f"Save error: {str(e)}")
|
384 |
with col_delete:
|
@@ -386,6 +391,8 @@ def edit_all_documents(container):
|
|
386 |
success, message = delete_record(container, doc)
|
387 |
if success:
|
388 |
st.success(message)
|
|
|
|
|
389 |
st.rerun()
|
390 |
else:
|
391 |
st.error(message)
|
|
|
116 |
return text.strip()
|
117 |
|
118 |
def sanitize_json_text(text):
|
119 |
+
# Remove control characters but keep newlines intact
|
120 |
text = re.sub(r'[\x00-\x08\x0B\x0C\x0E-\x1F]', '', text)
|
121 |
+
return text.strip()
|
|
|
122 |
|
123 |
# =============================================================================
|
124 |
# βββββββββββββ COSMOS DB FUNCTIONS βββββββββββββ
|
|
|
155 |
def delete_record(container, record):
|
156 |
try:
|
157 |
doc_id = record["id"]
|
158 |
+
partition_key_value = record.get("pk", doc_id) # Fallback to id if pk missing
|
159 |
+
st.write(f"Deleting {doc_id} with partition key {partition_key_value}") # Debug log
|
160 |
container.delete_item(item=doc_id, partition_key=partition_key_value)
|
161 |
return True, f"Record {doc_id} deleted. ποΈ"
|
162 |
except exceptions.CosmosResourceNotFoundError:
|
163 |
+
return True, f"Record {doc_id} not found (already deleted). ποΈ"
|
164 |
except exceptions.CosmosHttpResponseError as e:
|
165 |
+
return False, f"HTTP error deleting {doc_id}: {str(e)} π¨"
|
166 |
except Exception as e:
|
167 |
+
return False, f"Unexpected error deleting {doc_id}: {str(e)} π±"
|
168 |
|
169 |
def save_to_cosmos_db(container, query, response1, response2):
|
170 |
try:
|
|
|
367 |
with col_save:
|
368 |
if st.button("πΎ Save", key=f"save_{doc['id']}"):
|
369 |
try:
|
370 |
+
# Parse edited content
|
371 |
+
cleaned_content = sanitize_json_text(edited_content)
|
372 |
+
updated_doc = json.loads(cleaned_content)
|
373 |
+
# Preserve identity fields
|
374 |
updated_doc['id'] = doc['id']
|
375 |
updated_doc['pk'] = doc.get('pk', doc['id'])
|
376 |
+
# Remove system fields
|
377 |
for field in ['_ts', '_rid', '_self', '_etag', '_attachments']:
|
378 |
updated_doc.pop(field, None)
|
379 |
success, message = update_record(container, updated_doc)
|
|
|
382 |
st.session_state[doc_key] = json.dumps(updated_doc, indent=2)
|
383 |
else:
|
384 |
st.error(message)
|
385 |
+
except json.JSONDecodeError as e:
|
386 |
+
st.error(f"Invalid JSON format: {str(e)}\nProblematic input:\n{cleaned_content}")
|
387 |
except Exception as e:
|
388 |
st.error(f"Save error: {str(e)}")
|
389 |
with col_delete:
|
|
|
391 |
success, message = delete_record(container, doc)
|
392 |
if success:
|
393 |
st.success(message)
|
394 |
+
if doc_key in st.session_state:
|
395 |
+
del st.session_state[doc_key] # Clean up session state
|
396 |
st.rerun()
|
397 |
else:
|
398 |
st.error(message)
|