old_contents: from aiohttp import web
  
  from db_helper import get_project_id, get_most_recent_group, get_user_id
  from permissions import view_only, value_set
  
  
  @view_only("join_projects")
  @value_set("student_choosable")
  async def on_submit(request):
      session = request.app["session"]
      cookies = request.cookies
      post = await request.post()
      option = int(post["order"]) - 1
      attrs = ["first_option_id", "second_option_id", "third_option_id"]
      project = get_project_id(session, int(post["choice"]))
      if project.group is not get_most_recent_group(session):
          return web.Response(status=403, text="Cannot join legacy projects")
      user = get_user_id(session, cookies)
      setattr(user, attrs[option], project.id)
      for attr in set(attrs) - {attrs[option]}:
          if getattr(user, attr) == project.id:
              setattr(user, attr, None)
      session.commit()
      return web.Response(status=200, text="set")
  
new_contents: from aiohttp import web
  
  from db_helper import get_project_id, get_user_id, can_choose_project
  from permissions import view_only, value_set
  
  
  @view_only("join_projects")
  @value_set("student_choosable")
  async def on_submit(request):
      session = request.app["session"]
      cookies = request.cookies
      post = await request.post()
      option = int(post["order"]) - 1
      attrs = ["first_option_id", "second_option_id", "third_option_id"]
      project = get_project_id(session, int(post["choice"]))
      if not can_choose_project(session, cookies, project):
          return web.Response(status=403, text="You cannot choose this project")
      user = get_user_id(session, cookies)
      setattr(user, attrs[option], project.id)
      for attr in set(attrs) - {attrs[option]}:
          if getattr(user, attr) == project.id:
              setattr(user, attr, None)
      session.commit()
      return web.Response(status=200, text="set")
  
subject: Check if student can choose a project before allowing them to join it