Exemplo n.º 1
0
    def createOrUpdateFromForm(self, data):
        """Creates a new proposal based on the data inserted in the form.

    Args:
      data: A RequestData describing the current request.

    Returns:
      a newly created proposal entity or None
    """
        slot_transfer_entity = None

        slot_transfer_form = SlotTransferForm(
            max_slots=data.url_ndb_org.slot_allocation, data=data.POST)

        if not slot_transfer_form.is_valid():
            return None

        slot_transfer_form.cleaned_data['program'] = data.program

        for ent in data.slot_transfer_entities:
            if ent.status == 'pending':
                slot_transfer_entity = ent
                break

        # TODO(daniel): send actual emails when we have email address in User model.
        host_users = user_logic.getHostsForProgram(data.program.key())
        to_emails = []

        def create_or_update_slot_transfer_trx():
            update = False
            if slot_transfer_entity:
                slot_transfer = db.get(slot_transfer_entity.key())
                slot_transfer_form.instance = slot_transfer
                slot_transfer = slot_transfer_form.save(commit=True)

                update = True
            else:
                slot_transfer = slot_transfer_form.create(
                    commit=True, parent=data.url_ndb_org.key.to_old_key())

            context = notifications.createOrUpdateSlotTransferContext(
                data, slot_transfer, to_emails, update)
            sub_txn = mailer.getSpawnMailTaskTxn(context,
                                                 parent=slot_transfer.parent())
            sub_txn()

            return slot_transfer

        return db.run_in_transaction(create_or_update_slot_transfer_trx)
Exemplo n.º 2
0
  def createOrUpdateFromForm(self, data):
    """Creates a new proposal based on the data inserted in the form.

    Args:
      data: A RequestData describing the current request.

    Returns:
      a newly created proposal entity or None
    """
    slot_transfer_entity = None

    slot_transfer_form = SlotTransferForm(
         max_slots=data.url_ndb_org.slot_allocation, data=data.POST)

    if not slot_transfer_form.is_valid():
      return None

    slot_transfer_form.cleaned_data['program'] = data.program

    for ent in data.slot_transfer_entities:
      if ent.status == 'pending':
        slot_transfer_entity = ent
        break

    # TODO(daniel): send actual emails when we have email address in User model.
    host_users = user_logic.getHostsForProgram(data.program.key())
    to_emails = []

    def create_or_update_slot_transfer_trx():
      update = False
      if slot_transfer_entity:
        slot_transfer = db.get(slot_transfer_entity.key())
        slot_transfer_form.instance = slot_transfer
        slot_transfer = slot_transfer_form.save(commit=True)

        update = True
      else:
        slot_transfer = slot_transfer_form.create(
            commit=True, parent=data.url_ndb_org.key.to_old_key())

      context = notifications.createOrUpdateSlotTransferContext(
          data, slot_transfer, to_emails, update)
      sub_txn = mailer.getSpawnMailTaskTxn(
          context, parent=slot_transfer.parent())
      sub_txn()

      return slot_transfer

    return db.run_in_transaction(create_or_update_slot_transfer_trx)
Exemplo n.º 3
0
  def testGetHostsForProgram(self):
    """Tests if a correct user entities are returned."""
    # seed a user to be initial host for the first program
    host = profile_utils.seedNDBUser()

    # seed two programs
    program_one = program_utils.seedProgram(host=host)
    program_two = program_utils.seedProgram()

    # seed hosts for the program one
    hosts = set([host.key])
    for _ in range(3):
      user_entity = profile_utils.seedNDBUser(host_for=[program_one])
      hosts.add(user_entity.key)

    # seed hosts for the program two
    for _ in range(2):
      user_entity = profile_utils.seedNDBUser(host_for=[program_two])

    # check that correct hosts for program one are returned
    actual_hosts = user_logic.getHostsForProgram(program_one.key())
    self.assertSetEqual(hosts, set(host.key for host in actual_hosts))
Exemplo n.º 4
0
    def testGetHostsForProgram(self):
        """Tests if a correct user entities are returned."""
        # seed a user to be initial host for the first program
        host = profile_utils.seedNDBUser()

        # seed two programs
        program_one = program_utils.seedProgram(host=host)
        program_two = program_utils.seedProgram()

        # seed hosts for the program one
        hosts = set([host.key])
        for _ in range(3):
            user_entity = profile_utils.seedNDBUser(host_for=[program_one])
            hosts.add(user_entity.key)

        # seed hosts for the program two
        for _ in range(2):
            user_entity = profile_utils.seedNDBUser(host_for=[program_two])

        # check that correct hosts for program one are returned
        actual_hosts = user_logic.getHostsForProgram(program_one.key())
        self.assertSetEqual(hosts, set(host.key for host in actual_hosts))