parameters: (cid, ttp, analyst)
docstring: Add a TTP to a Campaign.
  
      :param cid: ObjectId of the Campaign.
      :type cid: str
      :param ttp: The TTP to add.
      :type ttp: str
      :param analyst: The user adding the TTP.
      :type analyst: str
      :returns: dict with keys:
                'success' (boolean),
                'campaign' (:class:`crits.campaigns.campaign.Campaign`) if success,
                'message' (str) if failed.
docstring_summary: Add a TTP to a Campaign.
docstring_tokens: Add a TTP to a Campaign .
function: def add_ttp(cid, ttp, analyst):
      """
      Add a TTP to a Campaign.
  
      :param cid: ObjectId of the Campaign.
      :type cid: str
      :param ttp: The TTP to add.
      :type ttp: str
      :param analyst: The user adding the TTP.
      :type analyst: str
      :returns: dict with keys:
                'success' (boolean),
                'campaign' (:class:`crits.campaigns.campaign.Campaign`) if success,
                'message' (str) if failed.
      """
  
      campaign = Campaign.objects(id=cid).first()
      if campaign:
          new_ttp = EmbeddedTTP()
          new_ttp.analyst = analyst
          new_ttp.ttp = ttp
          try:
              campaign.add_ttp(new_ttp)
              campaign.save(username=analyst)
              return {'success': True, 'campaign': campaign}
          except ValidationError, e:
              return {'success': False, 'message': "Invalid value: %s" % e}
      else:
          return {'success': False, 'message': "Could not find Campaign"}
function_tokens: def add_ttp ( cid , ttp , analyst ) : campaign = Campaign . objects ( id = cid ) . first ( ) if campaign : new_ttp = EmbeddedTTP ( ) new_ttp . analyst = analyst new_ttp . ttp = ttp try : campaign . add_ttp ( new_ttp ) campaign . save ( username = analyst ) return { 'success' : True , 'campaign' : campaign } except ValidationError , e : return { 'success' : False , 'message' : "Invalid value: %s" % e } else : return { 'success' : False , 'message' : "Could not find Campaign" }