def METHOD_NAME(self, obj_id, *ignored_args):
    """
    ---
    description: Update a Source table row
    tags:
      - sources
      - groups
    parameters:
      - in: path
        name: obj_id
        required: true
        schema:
          type: integer
    requestBody:
      content:
        application/json:
          schema:
            type: object
            properties:
              groupID:
                type: integer
              active:
                type: boolean
              requested:
                type: boolean
            required:
              - groupID
              - active
              - requested
    responses:
      200:
        content:
          application/json:
            schema: Success
    """
    data = self.get_json()
    group_id = data.get("groupID")
    if group_id is None:
        return self.error("Missing required parameter: groupID")
    active = data.get("active")
    requested = data.get("requested")
    with self.Session() as session:
        obj = session.scalars(
            Obj.select(session.user_or_token).where(Obj.id == obj_id)
        ).first()
        source = session.scalars(
            Source.select(session.user_or_token).where(
                Source.obj_id == obj_id, Source.group_id == group_id
            )
        ).first()
        previously_active = bool(source.active)
        source.active = active
        source.requested = requested
        if active and not previously_active:
            source.saved_by_id = self.associated_user_object.id
        session.commit()
        self.push_all(
            action="skyportal/REFRESH_SOURCE", payload={"obj_key": obj.internal_key}
        )
        self.push_all(
            action="skyportal/REFRESH_CANDIDATE", payload={"id": obj.internal_key}
        )
        return self.success()