code: def snapshot(self, name):
          
  
          if name in [snap.name for snap in self.snapshots.values()]:
              raise aiohttp.web_exceptions.HTTPConflict(text="The snapshot {} already exist".format(name))
  
          snapshot = Snapshot(self, name=name)
          try:
              if os.path.exists(snapshot.path):
                  raise aiohttp.web_exceptions.HTTPConflict(text="The snapshot {} already exist".format(name))
  
              os.makedirs(os.path.join(self.path, "snapshots"), exist_ok=True)
  
              with tempfile.TemporaryDirectory() as tmpdir:
                  zipstream = yield from export_project(self, tmpdir, keep_compute_id=True, allow_all_nodes=True)
                  try:
                      with open(snapshot.path, "wb") as f:
                          for data in zipstream:
                              f.write(data)
                  except OSError as e:
                      raise aiohttp.web.HTTPConflict(text="Could not write snapshot file '{}': {}".format(snapshot.path, e))
          except OSError as e:
              raise aiohttp.web.HTTPInternalServerError(text="Could not create project directory: {}".format(e))
  
          self._snapshots[snapshot.id] = snapshot
          return snapshot
docs: Snapshot the project
  
          :param name: Name of the snapshot