示例#1
0
    def _update_model(self, mid, model):
        self._models[mid] = model
        self._project_models[model["project"]].add(mid)

        change_message = json.dumps(dict(id=mid, doc=model))
        for client in self._clients:
            if is_project_reader(self._projects[model["project"]], client.user):
                client.write_message(change_message)
示例#2
0
    def _delete_model(self, mid):
        model = self._models.pop(mid)
        self._project_models[model["project"]].discard(mid)

        change_message = json.dumps(dict(id=mid, deleted=True))
        for client in self._clients:
            if is_project_reader(self._projects[model["project"]], client.user):
                client.write_message(change_message)
示例#3
0
    def _update_model(self, mid, model):
        self._models[mid] = model
        self._project_models[model["project"]].add(mid)

        change_message = json.dumps(dict(id=mid, doc=model))
        for client in self._clients:
            if is_project_reader(self._projects[model["project"]],
                                 client.user):
                client.write_message(change_message)
示例#4
0
    def _delete_model(self, mid):
        model = self._models.pop(mid)
        self._project_models[model["project"]].discard(mid)

        change_message = json.dumps(dict(id=mid, deleted=True))
        for client in self._clients:
            if is_project_reader(self._projects[model["project"]],
                                 client.user):
                client.write_message(change_message)
示例#5
0
    def _delete_project(self, pid):
        project = self._projects.pop(pid)
        project_models = self._project_models.pop(pid, set())

        change_message = json.dumps(dict(id=pid, deleted=True))
        for client in self._clients:
            if is_project_reader(project, client.user):
                client.projects.discard(pid)
                client.write_message(change_message)
示例#6
0
    def _delete_project(self, pid):
        project = self._projects.pop(pid)
        project_models = self._project_models.pop(pid, set())

        change_message = json.dumps(dict(id=pid, deleted=True))
        for client in self._clients:
            if is_project_reader(project, client.user):
                client.projects.discard(pid)
                client.write_message(change_message)
示例#7
0
 def add_client(self, client):
   with self._lock:
     self._clients.add(client)
     for pid, project in self._projects.items():
       if is_project_reader(project, client.user):
         client.projects.add(pid)
         client.write_message(json.dumps(dict(id=pid, doc=project)))
     for mid, model in self._models.items():
       if is_project_reader(self._projects[model["project"]], client.user):
         client.write_message(json.dumps(dict(id=mid, doc=model)))
示例#8
0
 def add_client(self, client):
   with self._lock:
     self._clients.add(client)
     for pid, project in self._projects.items():
       if is_project_reader(project, client.user):
         client.projects.add(pid)
         client.write_message(json.dumps(dict(id=pid, doc=project)))
     for mid, model in self._models.items():
       if model["project"] in self._projects:
         if is_project_reader(self._projects[model["project"]], client.user):
           client.write_message(json.dumps(dict(id=mid, doc=model)))
       else:
         log.error("Model %s belongs to project %s, but the latter isn't in the cache.  This should never happen." % (mid, model["project"]))
示例#9
0
 def add_client(self, client):
     with self._lock:
         self._clients.add(client)
         for pid, project in self._projects.items():
             if is_project_reader(project, client.user):
                 client.projects.add(pid)
                 client.write_message(json.dumps(dict(id=pid, doc=project)))
         for mid, model in self._models.items():
             if model["project"] in self._projects:
                 if is_project_reader(self._projects[model["project"]],
                                      client.user):
                     client.write_message(
                         json.dumps(dict(id=mid, doc=model)))
             else:
                 log.error(
                     "Model %s belongs to project %s, but the latter isn't in the cache.  This should never happen."
                     % (mid, model["project"]))
示例#10
0
    def _update_project(self, pid, project):
        self._projects[pid] = project

        change_message = json.dumps(dict(id=pid, doc=project))
        for client in self._clients:
            if is_project_reader(project, client.user):
                client.write_message(change_message)
                # The user was added to this project.
                if pid not in client.projects:
                    client.projects.add(pid)
                    for mid in self._project_models[pid]:
                        client.write_message(json.dumps(dict(id=mid, doc=self._models[mid])))
            else:
                # The user was removed from this project.
                if pid in client.projects:
                    client.projects.discard(pid)
                    client.write_message(json.dumps(dict(id=pid, deleted=True)))
                    for mid in self._project_models[pid]:
                        client.write_message(json.dumps(dict(id=mid, deleted=True)))
示例#11
0
    def _update_project(self, pid, project):
        self._projects[pid] = project

        change_message = json.dumps(dict(id=pid, doc=project))
        for client in self._clients:
            if is_project_reader(project, client.user):
                client.write_message(change_message)
                # The user was added to this project.
                if pid not in client.projects:
                    client.projects.add(pid)
                    for mid in self._project_models[pid]:
                        client.write_message(
                            json.dumps(dict(id=mid, doc=self._models[mid])))
            else:
                # The user was removed from this project.
                if pid in client.projects:
                    client.projects.discard(pid)
                    client.write_message(json.dumps(dict(id=pid,
                                                         deleted=True)))
                    for mid in self._project_models[pid]:
                        client.write_message(
                            json.dumps(dict(id=mid, deleted=True)))