0

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
  • Possible duplicate [https://stackoverflow.com/q/69330304/14858221](https://stackoverflow.com/q/69330304/14858221) – Ishan Apr 13 '22 at 15:06

0 Answers0