-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.py
More file actions
119 lines (93 loc) · 3.16 KB
/
Copy pathdatabase.py
File metadata and controls
119 lines (93 loc) · 3.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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"))