Spaces:
Sleeping
Sleeping
import os | |
import uuid | |
import queue | |
import threading | |
import time | |
from dotenv import load_dotenv | |
from pymongo.server_api import ServerApi | |
from pymongo.mongo_client import MongoClient | |
load_dotenv(r"./.env") | |
# Create a thread-safe queue | |
update_queue = queue.Queue() | |
# Flag to control the queue processor thread | |
is_running = True | |
def queue_processor(): | |
"""Process database updates from the queue""" | |
while is_running: | |
try: | |
# Get an update task from the queue, wait up to 1 second | |
task = update_queue.get(timeout=1) | |
# Process the update | |
uuid_value = task['uuid'] | |
new_data = task['data'] | |
result = user.update_one( | |
{"uuid": str(uuid_value)}, | |
{"$push": {"data": new_data}} | |
) | |
# Mark the task as done | |
update_queue.task_done() | |
except queue.Empty: | |
# No tasks in queue, continue waiting | |
continue | |
except Exception as e: | |
print(f"Error processing queue item: {str(e)}") | |
continue | |
# Start the queue processor thread | |
queue_processor_thread = threading.Thread(target=queue_processor, daemon=True) | |
queue_processor_thread.start() | |
uri = os.getenv("MONGO_STRING") | |
client = MongoClient(uri, server_api=ServerApi("1")) | |
db = client.get_database("drishti") | |
user = db.user | |
def register_user(name: str, mail: str, number: str, password): | |
uuid_ = str(uuid.uuid4()) | |
data = { | |
"uuid": uuid_, | |
"name": name, | |
"email": mail, | |
"phone_number": number, | |
"password": password, | |
"is_active": True, | |
"data": [], | |
} | |
try: | |
user.insert_one(data) | |
return {"status": "success", "uuid": uuid_} | |
except Exception as e: | |
return {"status": "failed", "error": str(e)} | |
def update_data_field(uuid_value, new_data): | |
# Instead of updating directly, add to queue | |
update_queue.put({ | |
'uuid': uuid_value, | |
'data': new_data | |
}) | |
return "Update queued successfully!" | |
def fetch_data_field(uuid: str) -> dict: | |
result = user.find_one({"uuid": str(uuid)}) | |
if result: | |
return result["data"] | |
else: | |
return {"status": "failed", "error": "No document matched the given UUID."} | |
# Add cleanup function | |
def cleanup(): | |
global is_running | |
is_running = False | |
queue_processor_thread.join(timeout=5) | |
if __name__ == "__main__": | |
try: | |
from pyperclip import copy | |
rlt = fetch_data_field("95009d58-db41-4c40-8a5e-07f8821a525f") | |
print(rlt) | |
copy(rlt) | |
finally: | |
cleanup() | |
# print(update_data_field("3cbb2a37-35b3-45f2-a4fd-499baa34880c", | |
# { | |
# "timestamp": "12:00", | |
# "humidity": 50, | |
# "temprature": 25, | |
# "soil_moisture": 0.5 | |
# } | |
# ) | |
# ) | |
# print(register_user("Batu Khan", "batukhan99@gmail.com", "321654987", "abc123")) |