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)
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)
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))