I'm using Replit and I try to do a live chat in python. When I call Message.send() function it's not working. I'm trying to send the whole class itself to the database. It returns ValueError: Circular reference detected. Do you have a solution ?
from replit import db
import uuid
from time import strftime
class Room:
def __init__(self, name):
self.id = uuid.uuid1()
self.name = name
def create(self):
db[self.name] = []
def getMessages(self):
if not self.name in db.keys():
self.create()
return db[self.name]
def delete(self):
del db[self.name]
class Message:
def __init__(self, user, message):
self.id = uuid.uuid1()
self.user = user
self.room = user.room
self.message = message
self.time = strftime("%D %T")
self.content = f"[{self.time}]({self.user.name}) - {self.message}"
def send(self):
db[self.room.name].append()
class User:
def __init__(self, name):
self.name = name
def connect(self, room):
self.room = Room(room)
user = User("Azerty29242")
user.connect("chat1")
print(user.room.getMessages())
message = Message(user, "Bonjour")
message.send()
print(user.room.getMessages())
Here is the complete output
ObservedList(value=[])
Traceback (most recent call last):
File "main.py", line 48, in <module>
message.send()
File "main.py", line 34, in send
db[self.room.name].append(self)
File "/nix/store/p21fdyxqb3yqflpim7g8s1mymgpnqiv7-python3-3.8.12/lib/python3.8/_collections_abc.py", line 962, in append
self.insert(len(self), value)
File "/home/runner/Je-ne-sais-pas-trop-quoi-faire/venv/lib/python3.8/site-packages/replit/database/database.py", line 286, in insert
self.on_mutate()
File "/home/runner/Je-ne-sais-pas-trop-quoi-faire/venv/lib/python3.8/site-packages/replit/database/database.py", line 256, in on_mutate
self._on_mutate_handler(self.value)
File "/home/runner/Je-ne-sais-pas-trop-quoi-faire/venv/lib/python3.8/site-packages/replit/database/database.py", line 373, in cb
db[k] = val
File "/home/runner/Je-ne-sais-pas-trop-quoi-faire/venv/lib/python3.8/site-packages/replit/database/database.py", line 491, in __setitem__
self.set(key, value)
File "/home/runner/Je-ne-sais-pas-trop-quoi-faire/venv/lib/python3.8/site-packages/replit/database/database.py", line 500, in set
self.set_raw(key, _dumps(value))
File "/home/runner/Je-ne-sais-pas-trop-quoi-faire/venv/lib/python3.8/site-packages/replit/database/database.py", line 56, in dumps
return json.dumps(val, separators=(",", ":"), cls=DBJSONEncoder)
File "/nix/store/p21fdyxqb3yqflpim7g8s1mymgpnqiv7-python3-3.8.12/lib/python3.8/json/__init__.py", line 234, in dumps
return cls(
File "/nix/store/p21fdyxqb3yqflpim7g8s1mymgpnqiv7-python3-3.8.12/lib/python3.8/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/nix/store/p21fdyxqb3yqflpim7g8s1mymgpnqiv7-python3-3.8.12/lib/python3.8/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
ValueError: Circular reference detected